2017-01-16 3 views
0

Wie wir öffentliche IP in golang bekommen? Die Methode req.Header.Get("X-Forwarded-For") gibt ein Array von IPs zurück. Wie identifizieren wir, welche öffentlich und welche auf intern? Gibt es eine andere Methode, um öffentliche (externe) IP abzurufen?Holen öffentliche IP in Golang

Antwort

6

Die folgenden IP-Blöcke sind für private IP-Adressen reserviert.

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 

Sie eine Funktion schreiben können, die für die überprüft, ob die IP unter diesen hier

kommen, ist ein Versuch, das gleiche zu tun, unter dem Code hinzufügen nicht ipv6 Handhabung bitte, wenn

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 
} 
benötigt hier

ist spielen link

+0

Vielen Dank, es ist sehr hilfreich war. – Shubhra

1

Ich verwende den folgenden Code für die öffentliche IP herauszufinden:

//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] 
} 
Verwandte Themen