From d514721a2eb057d3a74c04df30b4ca79660f1b95 Mon Sep 17 00:00:00 2001 From: evilsocket Date: Wed, 7 Feb 2018 19:19:17 +0100 Subject: [PATCH] fix: this should fix #46 --- net/net.go | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/net/net.go b/net/net.go index c0234f6b..4c473517 100644 --- a/net/net.go +++ b/net/net.go @@ -20,17 +20,30 @@ func FindInterface(name string) (*Endpoint, error) { for _, iface := range ifaces { mac := iface.HardwareAddr.String() - if (name == "" && iface.Name != "lo" && iface.Name != "lo0") || iface.Name == name { + addrs, err := iface.Addrs() + if err != nil { + fmt.Printf("%s\n", err) + continue + } + nAddrs := len(addrs) + + /* + * If no interface has been specified, return the first active + * one with at least an ip address, otherwise just the match + * whatever it has, in order to also consider monitor interfaces + * if passed explicitly. + */ + doCheck := false + if name == "" && iface.Name != "lo" && iface.Name != "lo0" && nAddrs > 0 { + doCheck = true + } else if iface.Name == name { + doCheck = true + } + + if doCheck { var e *Endpoint = nil - - addrs, err := iface.Addrs() - if err != nil { - fmt.Printf("%s\n", err) - continue - } - // interface is in monitor mode (or it's just down and the user is dumb) - if len(addrs) == 0 { + if nAddrs == 0 { e = NewEndpointNoResolve(MonitorModeAddress, mac, iface.Name, 0) } else { // For every address of the interface.