diff --git a/portlist/netstat.go b/portlist/netstat.go index 9f7beb8dc..d8a09492e 100644 --- a/portlist/netstat.go +++ b/portlist/netstat.go @@ -7,12 +7,9 @@ package portlist import ( - "fmt" "sort" "strconv" "strings" - - exec "tailscale.com/tempfork/osexec" ) func parsePort(s string) int { @@ -141,23 +138,3 @@ func parsePortsNetstat(output string) List { return l } - -//lint:ignore U1000 function is only used on !linux, but we want the -// unit test to run on linux, so we don't build-tag it away. -func listPortsNetstat(arg string) (List, error) { - exe, err := exec.LookPath("netstat") - if err != nil { - return nil, fmt.Errorf("netstat: lookup: %v", err) - } - output, err := exec.Command(exe, arg).Output() - if err != nil { - xe, ok := err.(*exec.ExitError) - stderr := "" - if ok { - stderr = strings.TrimSpace(string(xe.Stderr)) - } - return nil, fmt.Errorf("netstat: %v (%q)", err, stderr) - } - - return parsePortsNetstat(string(output)), nil -} diff --git a/portlist/netstat_exec.go b/portlist/netstat_exec.go new file mode 100644 index 000000000..3f7ac04bf --- /dev/null +++ b/portlist/netstat_exec.go @@ -0,0 +1,32 @@ +// Copyright (c) 2020 Tailscale Inc & AUTHORS All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows freebsd openbsd darwin,amd64 + +package portlist + +import ( + "fmt" + "strings" + + exec "tailscale.com/tempfork/osexec" +) + +func listPortsNetstat(arg string) (List, error) { + exe, err := exec.LookPath("netstat") + if err != nil { + return nil, fmt.Errorf("netstat: lookup: %v", err) + } + output, err := exec.Command(exe, arg).Output() + if err != nil { + xe, ok := err.(*exec.ExitError) + stderr := "" + if ok { + stderr = strings.TrimSpace(string(xe.Stderr)) + } + return nil, fmt.Errorf("netstat: %v (%q)", err, stderr) + } + + return parsePortsNetstat(string(output)), nil +} diff --git a/portlist/portlist_windows.go b/portlist/portlist_windows.go index 2e77025c6..89a048e75 100644 --- a/portlist/portlist_windows.go +++ b/portlist/portlist_windows.go @@ -4,7 +4,9 @@ package portlist -import "time" +import ( + "time" +) // Forking on Windows is insanely expensive, so don't do it too often. const pollInterval = 5 * time.Second