Golang学习之InterfaceAddrs获取本地IP

来源:互联网 发布:golang test用法 编辑:程序博客网 时间:2024/05/20 11:24

Go 获取本地IP

package mainimport (    "fmt"    "net"    "os")func main() {    addrs, err := net.InterfaceAddrs()    if err != nil {        fmt.Println(err)        os.Exit(1)    }    for _, address := range addrs {        // 检查ip地址判断是否回环地址        if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {            if ipnet.IP.To4() != nil {                fmt.Println(ipnet.IP.String())            }        }    }}

       如代码所示

Go语言获取外网和本地IP

package mainimport (    "flag"    "fmt"    "io"    "net"    "net/http"    "os")var get_ip = flag.String("get_ip", "", "external|internal")func main() {    fmt.Println("Usage of ./getmyip --get_ip=(external|internal)")    flag.Parse()    if *get_ip == "external" {        get_external()    }    if *get_ip == "internal" {        get_internal()    }}func get_external() {    resp, err := http.Get("http://myexternalip.com/raw")    if err != nil {        os.Stderr.WriteString(err.Error())        os.Stderr.WriteString("\n")        os.Exit(1)    }    defer resp.Body.Close()    io.Copy(os.Stdout, resp.Body)    os.Exit(0)}func get_internal() {    addrs, err := net.InterfaceAddrs()    if err != nil {        os.Stderr.WriteString("Oops:" + err.Error())        os.Exit(1)    }    for _, a := range addrs {        if ipnet, ok := a.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {            if ipnet.IP.To4() != nil {                os.Stdout.WriteString(ipnet.IP.String() + "\n")            }        }    }    os.Exit(0)}
原创粉丝点击