From e85b644e82755b8fa30cfc52f0896914502e0ae5 Mon Sep 17 00:00:00 2001 From: Steven Polley Date: Tue, 16 Apr 2024 19:44:25 -0600 Subject: [PATCH] Add maxjitter flag to hyp client This to allow configurable time between knock sequence transmissions. It's important the sequence arrive in the correct order, and some networks have multiple paths. --- hyp/cmd/knock.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/hyp/cmd/knock.go b/hyp/cmd/knock.go index a86bd61..a088086 100644 --- a/hyp/cmd/knock.go +++ b/hyp/cmd/knock.go @@ -38,6 +38,14 @@ Example usage: panic(fmt.Errorf("failed to parse command flag 'secret': %w", err)) } + maxJitter, err := cmd.Flags().GetInt("maxjitter") + if err != nil { + panic(fmt.Errorf("failed to parse command flag 'maxjitter': %w", err)) + } + if maxJitter < 1 || maxJitter > 1500 { + panic(fmt.Errorf("maxjitter must be value between 1 and 1500")) + } + secretBytes, err := os.ReadFile(secretFilePath) if err != nil { log.Fatalf("failed to read file 'hyp.secret': %v", err) @@ -50,12 +58,12 @@ Example usage: } // Transmit - fmt.Println("Transmitting knock sequence:", ports) for _, port := range ports { + fmt.Printf("knock | %s:%d\n", args[0], port) conn, _ := net.Dial("udp", fmt.Sprintf("%s:%d", args[0], port)) conn.Write([]byte{0}) conn.Close() - time.Sleep(time.Millisecond * 200) // TBD: Make this configurable with flag (maxJitter) + time.Sleep(time.Millisecond * time.Duration(maxJitter)) // TBD: Make this configurable with flag (maxJitter) } }, } @@ -64,4 +72,5 @@ func init() { rootCmd.AddCommand(knockCmd) knockCmd.PersistentFlags().String("secret", "hyp.secret", "Path to the file containing the hyp secret.") + knockCmd.PersistentFlags().Int("maxjitter", 200, "Specifies the time in milliseconds between knock sequence transmissions.") }