以下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 true { 
     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 
} 

这里是玩link