// +build windows package main import ( "bufio" "bytes" "errors" "io" "os/exec" "regexp" ) // DefaultLib path for the operating system in question var DefaultLib string = `C:\Program Files (x86)\Steam\steamapps` // BrowserCommand returns a []string containing the command that will start the // browser for a given url specific to the OS func BrowserCommand(url string) []string { return []string{"cmd", "/c", "start", url} } func GetHostIP() string { s, err := GetHostIPFromRoutes() if err != nil { panic(err) } return s } // GetHostIPFromRoutes is a terrible little function to scrape up the // information about the route table and return the IP address associated with // the default route func GetHostIPFromRoutes() (string, error) { spaceRe := regexp.MustCompile(" *") c := exec.Command("route", "print", "-4") b, err := c.Output() if err != nil { return "", err } rdr := bufio.NewReader(bytes.NewBuffer(b)) net := false for { l, err := rdr.ReadBytes('\n') if err == io.EOF { break } else if err != nil { return "", err } if bytes.HasPrefix(l, []byte("Network Destination")) && !net { net = true continue } if net && bytes.HasPrefix(l, []byte("=")) { break } if net == false { continue } l = spaceRe.ReplaceAll(l, []byte{' '}) l = bytes.TrimPrefix(l, []byte{' '}) fields := bytes.Split(l, []byte(" ")) if len(fields) < 5 { return "", errors.New("Less than five fields") } if bytes.Equal(fields[0], []byte("0.0.0.0")) { return string(fields[3]), nil } } return "", errors.New("Unable to parse IP from route table") }