2017-01-16 113 views
0

我們如何在golang獲得公共IP?方法req.Header.Get("X-Forwarded-For")返回IP數組。我們如何識別哪一個是公開的,哪一個是內部的?是否有任何其他方法來獲取公共(外部)IP?在Golang獲取公共IP

回答

6

以下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

+0

謝謝你,它是非常有益的。 – Shubhra

1

我用來找出公共IP下面的代碼:

//function to get the public ip address 
func GetOutboundIP() string { 
    conn, err := net.Dial("udp", "8.8.8.8:80") 
    HandleError("net.Dial: ",err) 
    defer conn.Close() 
    localAddr := conn.LocalAddr().String() 
    idx := strings.LastIndex(localAddr, ":") 
    return localAddr[0:idx] 
}