diff --git a/lib/beacon/broadcast.go b/lib/beacon/broadcast.go index 1ab0cddb3..fbd0061de 100644 --- a/lib/beacon/broadcast.go +++ b/lib/beacon/broadcast.go @@ -44,17 +44,29 @@ func writeBroadcasts(ctx context.Context, inbox <-chan []byte, port int) error { return nil } - addrs, err := net.InterfaceAddrs() + intfs, err := net.Interfaces() if err != nil { l.Debugln(err) return err } var dsts []net.IP - for _, addr := range addrs { - if iaddr, ok := addr.(*net.IPNet); ok && len(iaddr.IP) >= 4 && iaddr.IP.IsGlobalUnicast() && iaddr.IP.To4() != nil { - baddr := bcast(iaddr) - dsts = append(dsts, baddr.IP) + for _, intf := range intfs { + if intf.Flags&net.FlagBroadcast == 0 { + continue + } + + addrs, err := intf.Addrs() + if err != nil { + l.Debugln(err) + return err + } + + for _, addr := range addrs { + if iaddr, ok := addr.(*net.IPNet); ok && len(iaddr.IP) >= 4 && iaddr.IP.IsGlobalUnicast() && iaddr.IP.To4() != nil { + baddr := bcast(iaddr) + dsts = append(dsts, baddr.IP) + } } } diff --git a/lib/beacon/multicast.go b/lib/beacon/multicast.go index 353955a2c..d3644053f 100644 --- a/lib/beacon/multicast.go +++ b/lib/beacon/multicast.go @@ -67,6 +67,10 @@ func writeMulticasts(ctx context.Context, inbox <-chan []byte, addr string) erro success := 0 for _, intf := range intfs { + if intf.Flags&net.FlagMulticast == 0 { + continue + } + wcm.IfIndex = intf.Index pconn.SetWriteDeadline(time.Now().Add(time.Second)) _, err = pconn.WriteTo(bs, wcm, gaddr)