多网卡,多IP,如何拿到真实IP地址(主IP)
Go语言中,获取IP地址一般操作是:
1 | // 获取本机网卡IP |
这里会有一个问题,在多网卡(例如有虚拟网卡的情况下),有时会取到无法使用的IP地址,这样程序启动会报错。
这里出现的无法使用的IP地址是什么呢?
我这里指代为链路本地地址
,link-local unicast address
。
维基百科:
链路本地地址(Link-local address),又称链接本地地址是计算机网络中一类特殊的地址, 它仅供于在网段,或广播域中的主机相互通信使用。这类主机通常不需要外部互联网服务,仅有主机间相互通讯的需求。
所以,虚拟网卡属于这一类。我们需要排除这一类IP地址,我们这里需要判断net flag,就像我们判断IsLoopback
一样。
1 | if ipNet, isIpNet = addr.(*net.IPNet); isIpNet && !ipNet.IP.IsLoopback() { |
将属于链路本地地址的IP,全部拔除。
若是需要获取到机器现在使用的主IP地址,这需要怎么获得呢?
这里可以使用以下程序获取到当前机器的主IP,由于使用的是UDP
协议,不会需要握手
,所以不需要担心访问不到8.8.8.8:8
(或者这样说,这里随便填一个IP地址都可以,反正不会去访问)。
1 | conn, err := net.Dial("udp", "8.8.8.8:8") |
本文标题:多网卡,多IP,如何拿到真实IP地址(主IP)
文章作者:小师
发布时间:2020-08-12
最后更新:2022-05-04
原始链接:chunlife.top/2020/08/12/多网卡,多IP,如何拿到真实IP地址(主IP)/
版权声明:本站所有文章均采用知识共享署名4.0国际许可协议进行许可