2016-04-07 6 views
0

I IP-Adresse des Client-Rechners lesen will, ich bin mit folgenden Codezeilen für diesen -Wie liest man die richtige IP-Adresse?

UserIP = Dns.GetHostAddresses(Dns.GetHostName())[1].ToString(); 

Für einige Maschinen es wie richtige IP-Adresse zurückkehrt - 10.50.207.154 aber für einige Maschine ist es Rückkehr IP-Adresse wie - fe80 :: 25ab: 4248: c134: 23c6% 29

Wie bekomme ich IP-Adresse wie (Ex - 10.50.207.154) erste?

+2

[Das ist eine IPv6-Adresse] (https://en.wikipedia.org/wiki/IPv6). Es ist eine gültige IP-Adresse. – Pikamander2

+0

... und eine nicht routbare IPv4-Adresse. – AJNeufeld

Antwort

4

Sie sind beide IP-Adressen. Das "Richtige" ist IPv4. Der längere ist IPv6.

Sie können write a simple regex to detect IPv4, aber ich habe das Gefühl, dass Sie fälschlicherweise IPv6-Adressen als nicht IP-Adressen abweisen, wenn sie sehr viel sind.

1

Get IP-Adresse des Client-Rechners, versucht, diese seine Arbeit für mich,

private string GetIPAddress() 
     { 
      string IpAddress; 
      IpAddress = Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; 

      if (IpAddress == "" || IpAddress == null) 
      { 
       IpAddress = Request.ServerVariables["REMOTE_ADDR"]; 

       if (IpAddress == "::1" || IpAddress == "localhost") 
       { 
        IPAddress[] ipArray = Dns.GetHostAddresses(Dns.GetHostName()); 
        foreach (IPAddress ip in ipArray) 
        { 
         //InterNetwork for IPV4 
         if (ip.AddressFamily == AddressFamily.InterNetwork) 
         { 
          IpAddress = ip.ToString(); 
          break; 
         } 
        } 
       } 
      } 

      return IpAddress; 
     }