From 325cff6661db5b05d008013d33f9618bad0a0a10 Mon Sep 17 00:00:00 2001 From: Zack Scholl Date: Thu, 3 Oct 2024 20:06:32 -0700 Subject: [PATCH] add option -multicast to change multicast address Fixes #817 --- go.mod | 1 - go.sum | 7 ----- src/cli/cli.go | 75 +++++++++++++++++++++++++----------------------- src/croc/croc.go | 55 ++++++++++++++++++----------------- 4 files changed, 67 insertions(+), 71 deletions(-) diff --git a/go.mod b/go.mod index 7da9248df..c84398fb2 100644 --- a/go.mod +++ b/go.mod @@ -33,7 +33,6 @@ require ( github.com/pmezard/go-difflib v1.0.0 // indirect github.com/rivo/uniseg v0.4.7 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect - github.com/shurcooL/sanitized_anchor_name v1.0.0 // indirect github.com/tscholl2/siec v0.0.0-20240310163802-c2c6f6198406 // indirect github.com/twmb/murmur3 v1.1.8 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index b4ce3acd0..099a7e5d0 100644 --- a/go.sum +++ b/go.sum @@ -11,7 +11,6 @@ github.com/chzyer/readline v1.5.1 h1:upd/6fQk4src78LMRzh5vItIt361/o4uq553V8B5sGI github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObkaSkeBlk= github.com/chzyer/test v1.0.0 h1:p3BQDXSxOhOG0P9z6/hGnII4LGiEPOYBhs8asl/fC04= github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.5 h1:ZtcqGrnekaHpVLArFSe4HK5DoKx1T0rq2DwVB0alcyc= github.com/cpuguy83/go-md2man/v2 v2.0.5/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= @@ -35,7 +34,6 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= -github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -49,11 +47,8 @@ github.com/schollz/pake/v3 v3.0.5 h1:MnZVdI987lkjln9BSx/zUb724TZISa2jbO+dPj6BvgQ github.com/schollz/pake/v3 v3.0.5/go.mod h1:OGbG6htRwSKo6V8R5tg61ufpFmZM1b/PrrSp6g2ZLLc= github.com/schollz/peerdiscovery v1.7.4 h1:XTgdtdWxtrj+Z9mlCkvKkxawQLLwRL8ElssuLlIYP/4= github.com/schollz/peerdiscovery v1.7.4/go.mod h1:iKfn3SwRPiHYbyo6YCRjHNwRwDZM8ruJxzTBwO6g36c= -github.com/schollz/progressbar/v3 v3.16.0 h1:+MbBim/cE9DqDb8UXRfLJ6RZdyDkXG1BDy/sWc5s0Mc= -github.com/schollz/progressbar/v3 v3.16.0/go.mod h1:lLiKjKJ9/yzc9Q8jk+sVLfxWxgXKsktvUf6TO+4Y2nw= github.com/schollz/progressbar/v3 v3.16.1 h1:RnF1neWZFzLCoGx8yp1yF7SDl4AzNDI5y4I0aUJRrZQ= github.com/schollz/progressbar/v3 v3.16.1/go.mod h1:I2ILR76gz5VXqYMIY/LdLecvMHDPVcQm3W/MSKi1TME= -github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72 h1:qLC7fQah7D6K1B0ujays3HV9gkFtllcxhzImRR7ArPQ= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= @@ -61,11 +56,9 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/tscholl2/siec v0.0.0-20210707234609-9bdfc483d499 h1:bPQ48TuiAuGTZDm54H2EV/2+eRRBHP61bKDkKSEPW4A= github.com/tscholl2/siec v0.0.0-20210707234609-9bdfc483d499/go.mod h1:KL9+ubr1JZdaKjgAaHr+tCytEncXBa1pR6FjbTsOJnw= github.com/tscholl2/siec v0.0.0-20240310163802-c2c6f6198406 h1:sDWDZkwYqX0jvLWstKzFwh+pYhQNaVg65BgSkCP/f7U= github.com/tscholl2/siec v0.0.0-20240310163802-c2c6f6198406/go.mod h1:KL9+ubr1JZdaKjgAaHr+tCytEncXBa1pR6FjbTsOJnw= -github.com/twmb/murmur3 v1.1.5 h1:i9OLS9fkuLzBXjt6dptlAEyk58fJsSTXbRg3SgVyqgk= github.com/twmb/murmur3 v1.1.5/go.mod h1:Qq/R7NUyOfr65zD+6Q5IHKsJLwP7exErjN6lyyq3OSQ= github.com/twmb/murmur3 v1.1.8 h1:8Yt9taO/WN3l08xErzjeschgZU2QSrwm1kclYq+0aRg= github.com/twmb/murmur3 v1.1.8/go.mod h1:Qq/R7NUyOfr65zD+6Q5IHKsJLwP7exErjN6lyyq3OSQ= diff --git a/src/cli/cli.go b/src/cli/cli.go index 4107fbd6d..4e29c8a3a 100644 --- a/src/cli/cli.go +++ b/src/cli/cli.go @@ -108,6 +108,7 @@ func Run() (err error) { &cli.BoolFlag{Name: "ignore-stdin", Usage: "ignore piped stdin"}, &cli.BoolFlag{Name: "overwrite", Usage: "do not prompt to overwrite or resume"}, &cli.BoolFlag{Name: "testing", Usage: "flag for testing purposes"}, + &cli.StringFlag{Name: "multicast", Value: "239.255.255.250", Usage: "multicast address to use for local discovery"}, &cli.StringFlag{Name: "curve", Value: "p256", Usage: "choose an encryption curve (" + strings.Join(pake.AvailableCurves(), ", ") + ")"}, &cli.StringFlag{Name: "ip", Value: "", Usage: "set sender ip if known e.g. 10.0.0.1:9009, [::1]:9009"}, &cli.StringFlag{Name: "relay", Value: models.DEFAULT_RELAY, Usage: "address of the relay", EnvVars: []string{"CROC_RELAY"}}, @@ -279,28 +280,29 @@ func send(c *cli.Context) (err error) { } crocOptions := croc.Options{ - SharedSecret: c.String("code"), - IsSender: true, - Debug: c.Bool("debug"), - NoPrompt: c.Bool("yes"), - RelayAddress: c.String("relay"), - RelayAddress6: c.String("relay6"), - Stdout: c.Bool("stdout"), - DisableLocal: c.Bool("no-local"), - OnlyLocal: c.Bool("local"), - IgnoreStdin: c.Bool("ignore-stdin"), - RelayPorts: ports, - Ask: c.Bool("ask"), - NoMultiplexing: c.Bool("no-multi"), - RelayPassword: determinePass(c), - SendingText: c.String("text") != "", - NoCompress: c.Bool("no-compress"), - Overwrite: c.Bool("overwrite"), - Curve: c.String("curve"), - HashAlgorithm: c.String("hash"), - ThrottleUpload: c.String("throttleUpload"), - ZipFolder: c.Bool("zip"), - GitIgnore: c.Bool("git"), + SharedSecret: c.String("code"), + IsSender: true, + Debug: c.Bool("debug"), + NoPrompt: c.Bool("yes"), + RelayAddress: c.String("relay"), + RelayAddress6: c.String("relay6"), + Stdout: c.Bool("stdout"), + DisableLocal: c.Bool("no-local"), + OnlyLocal: c.Bool("local"), + IgnoreStdin: c.Bool("ignore-stdin"), + RelayPorts: ports, + Ask: c.Bool("ask"), + NoMultiplexing: c.Bool("no-multi"), + RelayPassword: determinePass(c), + SendingText: c.String("text") != "", + NoCompress: c.Bool("no-compress"), + Overwrite: c.Bool("overwrite"), + Curve: c.String("curve"), + HashAlgorithm: c.String("hash"), + ThrottleUpload: c.String("throttleUpload"), + ZipFolder: c.Bool("zip"), + GitIgnore: c.Bool("git"), + MulticastAddress: c.String("multicast"), } if crocOptions.RelayAddress != models.DEFAULT_RELAY { crocOptions.RelayAddress6 = "" @@ -525,20 +527,21 @@ func receive(c *cli.Context) (err error) { comm.Socks5Proxy = c.String("socks5") comm.HttpProxy = c.String("connect") crocOptions := croc.Options{ - SharedSecret: c.String("code"), - IsSender: false, - Debug: c.Bool("debug"), - NoPrompt: c.Bool("yes"), - RelayAddress: c.String("relay"), - RelayAddress6: c.String("relay6"), - Stdout: c.Bool("stdout"), - Ask: c.Bool("ask"), - RelayPassword: determinePass(c), - OnlyLocal: c.Bool("local"), - IP: c.String("ip"), - Overwrite: c.Bool("overwrite"), - Curve: c.String("curve"), - TestFlag: c.Bool("testing"), + SharedSecret: c.String("code"), + IsSender: false, + Debug: c.Bool("debug"), + NoPrompt: c.Bool("yes"), + RelayAddress: c.String("relay"), + RelayAddress6: c.String("relay6"), + Stdout: c.Bool("stdout"), + Ask: c.Bool("ask"), + RelayPassword: determinePass(c), + OnlyLocal: c.Bool("local"), + IP: c.String("ip"), + Overwrite: c.Bool("overwrite"), + Curve: c.String("curve"), + TestFlag: c.Bool("testing"), + MulticastAddress: c.String("multicast"), } if crocOptions.RelayAddress != models.DEFAULT_RELAY { crocOptions.RelayAddress6 = "" diff --git a/src/croc/croc.go b/src/croc/croc.go index 35539a8d4..806882dc2 100644 --- a/src/croc/croc.go +++ b/src/croc/croc.go @@ -58,31 +58,32 @@ func Debug(debug bool) { // Options specifies user specific options type Options struct { - IsSender bool - SharedSecret string - RoomName string - Debug bool - RelayAddress string - RelayAddress6 string - RelayPorts []string - RelayPassword string - Stdout bool - NoPrompt bool - NoMultiplexing bool - DisableLocal bool - OnlyLocal bool - IgnoreStdin bool - Ask bool - SendingText bool - NoCompress bool - IP string - Overwrite bool - Curve string - HashAlgorithm string - ThrottleUpload string - ZipFolder bool - TestFlag bool - GitIgnore bool + IsSender bool + SharedSecret string + RoomName string + Debug bool + RelayAddress string + RelayAddress6 string + RelayPorts []string + RelayPassword string + Stdout bool + NoPrompt bool + NoMultiplexing bool + DisableLocal bool + OnlyLocal bool + IgnoreStdin bool + Ask bool + SendingText bool + NoCompress bool + IP string + Overwrite bool + Curve string + HashAlgorithm string + ThrottleUpload string + ZipFolder bool + TestFlag bool + GitIgnore bool + MulticastAddress string } type SimpleMessage struct { @@ -588,7 +589,7 @@ func (c *Client) broadcastOnLocalNetwork(useipv6 bool) { if useipv6 { settings.IPVersion = peerdiscovery.IPv6 } else { - settings.MulticastAddress = "255.255.255.255" + settings.MulticastAddress = c.Options.MulticastAddress } discoveries, err := peerdiscovery.Discover(settings) @@ -869,7 +870,7 @@ func (c *Client) Receive() (err error) { Payload: []byte("ok"), Delay: 20 * time.Millisecond, TimeLimit: 200 * time.Millisecond, - MulticastAddress: "255.255.255.255", + MulticastAddress: c.Options.MulticastAddress, }) if err1 == nil && len(ipv4discoveries) > 0 { dmux.Lock()