From a20fb139f59e03e464b40af36042158dc61973cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=98=B8=EF=B8=8F?= <29265684+buffermet@users.noreply.github.com> Date: Tue, 21 Sep 2021 05:38:37 +1000 Subject: [PATCH] parse every IPv4 and IPv6 route --- routing/update_linux.go | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/routing/update_linux.go b/routing/update_linux.go index 63d4679e..da4a6475 100644 --- a/routing/update_linux.go +++ b/routing/update_linux.go @@ -16,11 +16,12 @@ var ( func update() ([]Route, error) { table = make([]Route, 0) - output, err := core.Exec("netstat", []string{"-r", "-n"}) + output, err := core.Exec("netstat", []string{"-r", "-n", "-4", "-6"}) if err != nil { return nil, err } - output = strings.ReplaceAll(output, "Next Hop", "NextHop") + // because entries are separated by whitespace + output = strings.ReplaceAll(output, "Next Hop", "Gateway") for _, line := range strings.Split(output, "\n") { if line = str.Trim(line); len(line) != 0 { @@ -40,32 +41,33 @@ func update() ([]Route, error) { case "Destination": route.Destination = s break + case "Flag": + route.Flags = s + break case "Flags": route.Flags = s break case "Gateway": route.Gateway = s break + case "If": + route.Device = s + break case "Iface": route.Device = s break case "Netif": route.Device = s break - case "If": - route.Device = s - break } } route.Default = strings.Contains(route.Flags, "G") - if route.Destination != "" { - if strings.ContainsRune(route.Destination, '.') || strings.ContainsRune(route.Gateway, '.') { - route.Type = "IPv4" - } else { - route.Type = "IPv6" - } + if strings.ContainsRune(route.Destination, '.') || strings.ContainsRune(route.Gateway, '.') { + route.Type = IPv4 + } else { + route.Type = IPv6 } table = append(table, route)