aboutsummaryrefslogtreecommitdiffstats
path: root/Godeps/_workspace/src/github.com/jackpal/gateway/gateway_darwin.go
blob: fc6ef68d954060fbdf3c441c5db965ecc174ea0a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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
}