diff --git a/net/net.go b/net/net.go index f0a779e0..5587d88a 100644 --- a/net/net.go +++ b/net/net.go @@ -4,51 +4,14 @@ import ( "fmt" "net" "regexp" - "runtime" "strconv" "strings" "github.com/evilsocket/bettercap-ng/core" - - "github.com/google/gopacket/pcap" ) const MonitorModeAddress = "0.0.0.0" -func areTheSame(iface net.Interface, piface pcap.Interface) bool { - if addrs, err := iface.Addrs(); err == nil { - for _, ia := range addrs { - for _, ib := range piface.Addresses { - if ia.String() == ib.IP.String() || strings.HasPrefix(ia.String(), ib.IP.String()) { - return true - } - } - } - } - return false -} - -func getInterfaceName(iface net.Interface) string { - // all normal operating systems - if runtime.GOOS != "windows" { - return iface.Name - } - - // Microsoft Windows - devs, err := pcap.FindAllDevs() - if err != nil { - return iface.Name - } - - for _, dev := range devs { - if areTheSame(iface, dev) { - return dev.Name - } - } - - return iface.Name -} - func NormalizeMac(mac string) string { var parts []string if strings.ContainsRune(mac, '-') { diff --git a/net/net_darwin.go b/net/net_darwin.go index 89c0ae7d..ffb17689 100644 --- a/net/net_darwin.go +++ b/net/net_darwin.go @@ -1,6 +1,9 @@ package net -import "regexp" +import ( + "net" + "regexp" +) var IPv4RouteParser = regexp.MustCompile("^([a-z]+)+\\s+(\\d+\\.+\\d+.\\d.+\\d)+\\s+([a-zA-z]+)+\\s+(\\d+)+\\s+(\\d+)+\\s+([a-zA-Z]+\\d+)$") var IPv4RouteTokens = 7 @@ -18,3 +21,8 @@ func IPv4RouteIsGateway(ifname string, tokens []string, f func(gateway string) ( return nil, nil } + +// see Windows version to understand why .... +func getInterfaceName(iface net.Interface) string { + return iface.Name +} diff --git a/net/net_linux.go b/net/net_linux.go index 179d26a5..41926eed 100644 --- a/net/net_linux.go +++ b/net/net_linux.go @@ -1,6 +1,9 @@ package net -import "regexp" +import ( + "net" + "regexp" +) // only matches gateway lines var IPv4RouteParser = regexp.MustCompile("^(default|[0-9\\.]+)\\svia\\s([0-9\\.]+)\\sdev\\s(\\w+)\\s.*$") @@ -18,3 +21,8 @@ func IPv4RouteIsGateway(ifname string, tokens []string, f func(gateway string) ( return nil, nil } + +// see Windows version to understand why .... +func getInterfaceName(iface net.Interface) string { + return iface.Name +} diff --git a/net/net_windows.go b/net/net_windows.go index 3dc013a9..cd9fd99c 100644 --- a/net/net_windows.go +++ b/net/net_windows.go @@ -2,6 +2,7 @@ package net import ( "regexp" + "runtime" ) // only matches gateway lines @@ -16,3 +17,37 @@ func IPv4RouteIsGateway(ifname string, tokens []string, f func(gateway string) ( gateway := tokens[2] return f(gateway) } + +/* + * net.Interface does not have the correct name on Windows and pcap.Interface + * does not have the hardware address for some reason ... so this is what I + * had to do in Windows ... tnx Microsoft <3 + */ + +func areTheSame(iface net.Interface, piface pcap.Interface) bool { + if addrs, err := iface.Addrs(); err == nil { + for _, ia := range addrs { + for _, ib := range piface.Addresses { + if ia.String() == ib.IP.String() || strings.HasPrefix(ia.String(), ib.IP.String()) { + return true + } + } + } + } + return false +} + +func getInterfaceName(iface net.Interface) string { + devs, err := pcap.FindAllDevs() + if err != nil { + return iface.Name + } + + for _, dev := range devs { + if areTheSame(iface, dev) { + return dev.Name + } + } + + return iface.Name +}