我想获取计算机的 IP 地址。我使用了下面的代码,但它返回127.0.0.1.
127.0.0.1
我想获取 IP 地址,例如10.32.10.111,而不是环回地址。
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) }
您需要遍历所有网络接口
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 } }
当机器上存在多个 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 }