mirror of
https://github.com/netbirdio/netbird.git
synced 2026-04-21 01:36:46 +00:00
* fix(client): skip MAC address filter for network addresses on iOS iOS does not expose hardware (MAC) addresses due to Apple's privacy restrictions (since iOS 14), causing networkAddresses() to return an empty list because all interfaces are filtered out by the HardwareAddr check. Move networkAddresses() to platform-specific files so iOS can skip this filter.
67 lines
1.3 KiB
Go
67 lines
1.3 KiB
Go
//go:build !ios
|
|
|
|
package system
|
|
|
|
import (
|
|
"net"
|
|
"net/netip"
|
|
)
|
|
|
|
func networkAddresses() ([]NetworkAddress, error) {
|
|
interfaces, err := net.Interfaces()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var netAddresses []NetworkAddress
|
|
for _, iface := range interfaces {
|
|
if iface.Flags&net.FlagUp == 0 {
|
|
continue
|
|
}
|
|
if iface.HardwareAddr.String() == "" {
|
|
continue
|
|
}
|
|
addrs, err := iface.Addrs()
|
|
if err != nil {
|
|
continue
|
|
}
|
|
|
|
mac := iface.HardwareAddr.String()
|
|
for _, address := range addrs {
|
|
netAddr, ok := toNetworkAddress(address, mac)
|
|
if !ok {
|
|
continue
|
|
}
|
|
if isDuplicated(netAddresses, netAddr) {
|
|
continue
|
|
}
|
|
netAddresses = append(netAddresses, netAddr)
|
|
}
|
|
}
|
|
return netAddresses, nil
|
|
}
|
|
|
|
func toNetworkAddress(address net.Addr, mac string) (NetworkAddress, bool) {
|
|
ipNet, ok := address.(*net.IPNet)
|
|
if !ok {
|
|
return NetworkAddress{}, false
|
|
}
|
|
if ipNet.IP.IsLoopback() {
|
|
return NetworkAddress{}, false
|
|
}
|
|
prefix, err := netip.ParsePrefix(ipNet.String())
|
|
if err != nil {
|
|
return NetworkAddress{}, false
|
|
}
|
|
return NetworkAddress{NetIP: prefix, Mac: mac}, true
|
|
}
|
|
|
|
func isDuplicated(addresses []NetworkAddress, addr NetworkAddress) bool {
|
|
for _, duplicated := range addresses {
|
|
if duplicated.NetIP == addr.NetIP {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|