diff options
Diffstat (limited to 'Godeps/_workspace/src/github.com/jackpal/gateway/gateway_darwin.go')
-rw-r--r-- | Godeps/_workspace/src/github.com/jackpal/gateway/gateway_darwin.go | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/Godeps/_workspace/src/github.com/jackpal/gateway/gateway_darwin.go b/Godeps/_workspace/src/github.com/jackpal/gateway/gateway_darwin.go new file mode 100644 index 000000000..fc6ef68d9 --- /dev/null +++ b/Godeps/_workspace/src/github.com/jackpal/gateway/gateway_darwin.go @@ -0,0 +1,40 @@ +package gateway + +import ( + "bytes" + "io/ioutil" + "net" + "os/exec" +) + +func DiscoverGateway() (ip net.IP, err error) { + routeCmd := exec.Command("route", "-n", "get", "0.0.0.0") + stdOut, err := routeCmd.StdoutPipe() + if err != nil { + return + } + if err = routeCmd.Start(); err != nil { + return + } + output, err := ioutil.ReadAll(stdOut) + if err != nil { + return + } + + // Darwin route out format is always like this: + // route to: default + // destination: default + // mask: default + // gateway: 192.168.1.1 + outputLines := bytes.Split(output, []byte("\n")) + for _, line := range outputLines { + if bytes.Contains(line, []byte("gateway:")) { + gatewayFields := bytes.Fields(line) + ip = net.ParseIP(string(gatewayFields[1])) + break + } + } + + err = routeCmd.Wait() + return +} |