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()