|
|
@ -1,9 +1,6 @@
|
|
|
|
package sockaddr
|
|
|
|
package sockaddr
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
import "os/exec"
|
|
|
|
"errors"
|
|
|
|
|
|
|
|
"os/exec"
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// defaultWindowsIfNameCmd is the comamnd to run on Windows to get the default
|
|
|
|
// defaultWindowsIfNameCmd is the comamnd to run on Windows to get the default
|
|
|
|
// interface.
|
|
|
|
// interface.
|
|
|
@ -20,23 +17,22 @@ func defaultWindowsIPConfigCmd() []string {
|
|
|
|
// getDefaultIfName is a Windows-specific function for extracting the name of
|
|
|
|
// getDefaultIfName is a Windows-specific function for extracting the name of
|
|
|
|
// the interface from `netstat -rn` and `ipconfig`.
|
|
|
|
// the interface from `netstat -rn` and `ipconfig`.
|
|
|
|
func getDefaultIfName() (string, error) {
|
|
|
|
func getDefaultIfName() (string, error) {
|
|
|
|
ipAddr, err := getWindowsIPOnDefaultRoute()
|
|
|
|
var cmd []string = defaultWindowsIfNameCmd()
|
|
|
|
|
|
|
|
ifNameOut, err := exec.Command(cmd[0], cmd[1:]...).Output()
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
return "", err
|
|
|
|
return "", err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return ipAddr, nil
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func getWindowsIPOnDefaultRoute() (string, error) {
|
|
|
|
cmd = defaultWindowsIPConfigCmd()
|
|
|
|
var cmd []string = defaultWindowsIfNameCmd()
|
|
|
|
ipconfigOut, err := exec.Command(cmd[0], cmd[1:]...).Output()
|
|
|
|
out, err := exec.Command(cmd[0], cmd[1:]...).Output()
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
return "", err
|
|
|
|
return "", err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var defaultIPAddr string
|
|
|
|
ifName, err := parseDefaultIfNameWindows(string(ifNameOut), string(ipconfigOut))
|
|
|
|
if defaultIPAddr, err = parseDefaultIPAddrWindowsRoute(string(out)); err != nil {
|
|
|
|
if err != nil {
|
|
|
|
return "", errors.New("No IP on default route found")
|
|
|
|
return "", err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return defaultIPAddr, nil
|
|
|
|
|
|
|
|
|
|
|
|
return ifName, nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|