From 9c3790764a15af06a1e16c833f8c099dc90b55c5 Mon Sep 17 00:00:00 2001 From: Simone Margaritelli Date: Mon, 11 Nov 2019 17:27:42 +0100 Subject: [PATCH] fix: fixed gateway regexp for macOS (closes #645) --- network/net_darwin.go | 7 +++---- network/net_gateway.go | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/network/net_darwin.go b/network/net_darwin.go index 4877c245..c5ec7712 100644 --- a/network/net_darwin.go +++ b/network/net_darwin.go @@ -13,16 +13,15 @@ import ( const airPortPath = "/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport" -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 +var IPv4RouteParser = regexp.MustCompile(`([^\s]+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+).*`) +var IPv4RouteTokens = 5 var IPv4RouteCmd = "netstat" var IPv4RouteCmdOpts = []string{"-n", "-r"} var WiFiChannelParser = regexp.MustCompile(`(?m)^.*Supported Channels: (.*)$`) func IPv4RouteIsGateway(ifname string, tokens []string, f func(gateway string) (*Endpoint, error)) (*Endpoint, error) { - ifname2 := tokens[6] flags := tokens[3] - + ifname2 := tokens[4] if ifname == ifname2 && flags == "UGSc" { gateway := tokens[2] return f(gateway) diff --git a/network/net_gateway.go b/network/net_gateway.go index 4b2cb268..1d7b6042 100644 --- a/network/net_gateway.go +++ b/network/net_gateway.go @@ -25,7 +25,7 @@ func FindGateway(iface *Endpoint) (*Endpoint, error) { for _, line := range strings.Split(output, "\n") { if line = str.Trim(line); strings.Contains(line, ifName) { m := IPv4RouteParser.FindStringSubmatch(line) - if len(m) == IPv4RouteTokens { + if len(m) >= IPv4RouteTokens { Debug("FindGateway(%s) line '%s' matched with %v", iface.Name(), line, m) return IPv4RouteIsGateway(ifName, m, func(gateway string) (*Endpoint, error) { if gateway == iface.IpAddress {