小李同学 keep digging deeper
Golang

Golang获取本地ip

2 阅读 — 字

取本机内网 IP,遍历所有网卡地址,跳过回环,拿第一个 IPv4:

func GetLocalIP() string {
	ip := "127.0.0.1"
	addrs, err := net.InterfaceAddrs()
	if err != nil {
		return ip
	}
	for _, a := range addrs {
		if ipnet, ok := a.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
			if ipnet.IP.To4() != nil {
				ip = ipnet.IP.String()
				break
			}
		}
	}
	return ip
}

两个地方值得留意:

  • break 在拿到第一个非回环 IPv4 时就退出,所以多网卡机器上拿到哪个地址,取决于 InterfaceAddrs() 的遍历顺序,不一定是你要的那块网卡。需要指定网卡时,改用 net.InterfaceByName 再取它自己的地址。
  • 默认值 127.0.0.1 在取不到结果时返回,比如机器只有 IPv6、或 InterfaceAddrs() 报错。调用方最好把这种情况当成「没拿到」处理,而不是真的去连 127.0.0.1。

本文作者 小李同学,转载请注明出处。

评论

还没有人留言。

写一条

提交后会先进站主的待审列表,通过之后才公开。

搜索文章

输入关键词搜索文章。