我们如何在golang中获取公共IP?方法req.Header.Get("X-Forwarded-For")
返回IP数组.我们如何确定哪一个是公开的,哪个是内部的?有没有其他方法来获取公共(外部)IP?
以下IP块保留用于专用IP地址.
Class Starting IPAddress Ending IP Address # of Hosts A 10.0.0.0 10.255.255.255 16,777,216 B 172.16.0.0 172.31.255.255 1,048,576 C 192.168.0.0 192.168.255.255 65,536 Link-local-u 169.254.0.0 169.254.255.255 65,536 Link-local-m 224.0.0.0 224.0.0.255 256 Local 127.0.0.0 127.255.255.255 16777216
您可以编写一个函数来检查ip是否属于这些
这是尝试做同样的事情,下面的代码不处理ipv6请根据需要添加
func IsPublicIP(IP net.IP) bool { if IP.IsLoopback() || IP.IsLinkLocalMulticast() || IP.IsLinkLocalUnicast() { return false } if ip4 := IP.To4(); ip4 != nil { switch { case ip4[0] == 10: return false case ip4[0] == 172 && ip4[1] >= 16 && ip4[1] <= 31: return false case ip4[0] == 192 && ip4[1] == 168: return false default: return true } } return false }
这是播放链接