This commit is contained in:
evilsocket 2018-02-07 20:00:44 +01:00
parent 99209f9f2e
commit d22ce9b6dd

View file

@ -4,14 +4,42 @@ import (
"fmt" "fmt"
"net" "net"
"regexp" "regexp"
"runtime"
"strconv" "strconv"
"strings" "strings"
"github.com/evilsocket/bettercap-ng/core" "github.com/evilsocket/bettercap-ng/core"
"github.com/google/gopacket/pcap"
) )
const MonitorModeAddress = "0.0.0.0" const MonitorModeAddress = "0.0.0.0"
func getInterfaceName(iface net.Interface) string {
// all normal OS
if runtime.GOOS != "windows" {
return iface.Name
}
devs, err := pcap.FindAllDevs()
if err != nil {
return iface.Name
}
for _, dev := range devs {
if dev.Name == iface.Name {
desc := dev.Description
name := dev.Name
if desc != "" {
name = fmt.Sprintf("%s (%s)", name, desc)
}
return name
}
}
return iface.Name
}
func FindInterface(name string) (*Endpoint, error) { func FindInterface(name string) (*Endpoint, error) {
ifaces, err := net.Interfaces() ifaces, err := net.Interfaces()
if err != nil { if err != nil {
@ -19,6 +47,7 @@ func FindInterface(name string) (*Endpoint, error) {
} }
for _, iface := range ifaces { for _, iface := range ifaces {
ifName := getInterfaceName(iface)
mac := iface.HardwareAddr.String() mac := iface.HardwareAddr.String()
addrs, err := iface.Addrs() addrs, err := iface.Addrs()
if err != nil { if err != nil {
@ -34,9 +63,9 @@ func FindInterface(name string) (*Endpoint, error) {
* if passed explicitly. * if passed explicitly.
*/ */
doCheck := false doCheck := false
if name == "" && iface.Name != "lo" && iface.Name != "lo0" && nAddrs > 0 { if name == "" && ifName != "lo" && ifName != "lo0" && nAddrs > 0 {
doCheck = true doCheck = true
} else if iface.Name == name { } else if ifName == name {
doCheck = true doCheck = true
} }
@ -44,7 +73,7 @@ func FindInterface(name string) (*Endpoint, error) {
var e *Endpoint = nil var e *Endpoint = nil
// interface is in monitor mode (or it's just down and the user is dumb) // interface is in monitor mode (or it's just down and the user is dumb)
if nAddrs == 0 { if nAddrs == 0 {
e = NewEndpointNoResolve(MonitorModeAddress, mac, iface.Name, 0) e = NewEndpointNoResolve(MonitorModeAddress, mac, ifName, 0)
} else { } else {
// For every address of the interface. // For every address of the interface.
for _, addr := range addrs { for _, addr := range addrs {
@ -53,14 +82,14 @@ func FindInterface(name string) (*Endpoint, error) {
if m, _ := regexp.MatchString("^[0-9\\.]+/?\\d*$", ip); m == true { if m, _ := regexp.MatchString("^[0-9\\.]+/?\\d*$", ip); m == true {
if strings.IndexRune(ip, '/') == -1 { if strings.IndexRune(ip, '/') == -1 {
// plain ip // plain ip
e = NewEndpointNoResolve(ip, mac, iface.Name, 0) e = NewEndpointNoResolve(ip, mac, ifName, 0)
} else { } else {
// ip/bits // ip/bits
parts := strings.Split(ip, "/") parts := strings.Split(ip, "/")
ip_part := parts[0] ip_part := parts[0]
bits, err := strconv.Atoi(parts[1]) bits, err := strconv.Atoi(parts[1])
if err == nil { if err == nil {
e = NewEndpointNoResolve(ip_part, mac, iface.Name, uint32(bits)) e = NewEndpointNoResolve(ip_part, mac, ifName, uint32(bits))
} }
} }
} else if e != nil { } else if e != nil {