小编典典

如何在 Go 中获取本地 IP 地址?

go

我想获取计算机的 IP 地址。我使用了下面的代码,但它返回127.0.0.1.

我想获取 IP 地址,例如10.32.10.111,而不是环回地址。

name, err := os.Hostname()
if err != nil {
     fmt.Printf("Oops: %v\n", err)
     return
}

addrs, err := net.LookupHost(name)
if err != nil {
    fmt.Printf("Oops: %v\n", err)
    return
}

for _, a := range addrs {
    fmt.Println(a)
}  

阅读 476

收藏
2021-12-14

共2个答案

小编典典

您需要遍历所有网络接口

ifaces, err := net.Interfaces()
// handle err
for _, i := range ifaces {
    addrs, err := i.Addrs()
    // handle err
    for _, addr := range addrs {
        var ip net.IP
        switch v := addr.(type) {
        case *net.IPNet:
                ip = v.IP
        case *net.IPAddr:
                ip = v.IP
        }
        // process IP address
    }
}
2021-12-14
小编典典

当机器上存在多个 ip 接口时,这里有一个更好的解决方案来检索首选的出站 ip 地址。

import (
    "log"
    "net"
    "strings"
)

// Get preferred outbound ip of this machine
func GetOutboundIP() net.IP {
    conn, err := net.Dial("udp", "8.8.8.8:80")
    if err != nil {
        log.Fatal(err)
    }
    defer conn.Close()

    localAddr := conn.LocalAddr().(*net.UDPAddr)

    return localAddr.IP
}
2021-12-14