mirror of
https://github.com/bettercap/bettercap
synced 2025-08-19 13:09:49 -07:00
fixed net.FindGateway if there's a VPN interface active
This commit is contained in:
parent
407fd392b9
commit
5041267be9
3 changed files with 18 additions and 56 deletions
|
@ -1,7 +1,6 @@
|
||||||
package network
|
package network
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"net"
|
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -14,16 +13,8 @@ func buildExampleLAN() *LAN {
|
||||||
}
|
}
|
||||||
|
|
||||||
func buildExampleEndpoint() *Endpoint {
|
func buildExampleEndpoint() *Endpoint {
|
||||||
ifaces, _ := net.Interfaces()
|
iface, _ := FindInterface("")
|
||||||
var exampleIface net.Interface
|
return iface
|
||||||
for _, iface := range ifaces {
|
|
||||||
if iface.HardwareAddr != nil {
|
|
||||||
exampleIface = iface
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
foundEndpoint, _ := FindInterface(exampleIface.Name)
|
|
||||||
return foundEndpoint
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestNewLAN(t *testing.T) {
|
func TestNewLAN(t *testing.T) {
|
||||||
|
|
|
@ -14,21 +14,24 @@ func FindGateway(iface *Endpoint) (*Endpoint, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ifName := iface.Name()
|
||||||
for _, line := range strings.Split(output, "\n") {
|
for _, line := range strings.Split(output, "\n") {
|
||||||
m := IPv4RouteParser.FindStringSubmatch(line)
|
if strings.Contains(line, ifName) {
|
||||||
if len(m) == IPv4RouteTokens {
|
m := IPv4RouteParser.FindStringSubmatch(line)
|
||||||
return IPv4RouteIsGateway(iface.Name(), m, func(gateway string) (*Endpoint, error) {
|
if len(m) == IPv4RouteTokens {
|
||||||
if gateway == iface.IpAddress {
|
return IPv4RouteIsGateway(ifName, m, func(gateway string) (*Endpoint, error) {
|
||||||
return iface, nil
|
if gateway == iface.IpAddress {
|
||||||
} else {
|
return iface, nil
|
||||||
// we have the address, now we need its mac
|
} else {
|
||||||
mac, err := ArpLookup(iface.Name(), gateway, false)
|
// we have the address, now we need its mac
|
||||||
if err != nil {
|
mac, err := ArpLookup(ifName, gateway, false)
|
||||||
return nil, err
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return NewEndpoint(gateway, mac), nil
|
||||||
}
|
}
|
||||||
return NewEndpoint(gateway, mac), nil
|
})
|
||||||
}
|
}
|
||||||
})
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -87,38 +87,6 @@ func TestFindInterfaceByName(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestMatchByAddress(t *testing.T) {
|
|
||||||
ifaces, err := net.Interfaces()
|
|
||||||
if err != nil {
|
|
||||||
t.Error(err)
|
|
||||||
}
|
|
||||||
if len(ifaces) <= 0 {
|
|
||||||
t.Error("Unable to find any network interfaces to run test with.")
|
|
||||||
}
|
|
||||||
var exampleIface net.Interface
|
|
||||||
// emulate libpcap's pcap_lookupdev function to find
|
|
||||||
// default interface to test with ( maybe could use loopback ? )
|
|
||||||
for _, iface := range ifaces {
|
|
||||||
if iface.HardwareAddr != nil {
|
|
||||||
exampleIface = iface
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// check match by mac address
|
|
||||||
if !matchByAddress(exampleIface, exampleIface.HardwareAddr.String()) {
|
|
||||||
t.Error("unable to verify a match with a given interface and mac address")
|
|
||||||
}
|
|
||||||
addrs, err := exampleIface.Addrs()
|
|
||||||
if err != nil || len(addrs) <= 0 {
|
|
||||||
t.Error("Unable to find any ip addresses to run test with interface:", exampleIface.Name)
|
|
||||||
|
|
||||||
}
|
|
||||||
// check match by ip address
|
|
||||||
if !matchByAddress(exampleIface, addrs[0].String()) {
|
|
||||||
t.Error("unable to verify a match with a given interface and ip address")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestFindInterface(t *testing.T) {
|
func TestFindInterface(t *testing.T) {
|
||||||
ifaces, err := net.Interfaces()
|
ifaces, err := net.Interfaces()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue