2016-04-07 41 views
0
Ben istemci makine IP adresini okumak istiyorum

, bunun için kod sınırının altında kullanıyorum -Doğru IP adresi nasıl okunur?

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

bazı makinelerde bu gibi doğru IP adresini döndürüyor - 10.50.207.154 ancak bazı makine için o dönüyor IP adresi gibi - fe80 :: 25ab: 4248: c134: 23C6%

29 nasıl gibi IP adresini almak için (Ör - 10.50.207.154) ilki?

+2

bu çalışmalarını deneyin [Yani IPv6 adresin] (https://en.wikipedia.org/wiki/IPv6). Geçerli bir IP adresi. – Pikamander2

+0

... ve bir unroutable IPv4 adresi. – AJNeufeld

cevap

4

İkisi IP adreslerini konum. 'Doğru' olan IPv4. Daha uzun olan IPv6.

Sen write a simple regex to detect IPv4 yapabilir ama onu yanlış IPv6 görevden olduğunuz bir duygu onlar hem de çok zaman olduğu gibi, IP adreslerini olmamak adresleri var. istemci makinenin

1

alın IP adresi, benim için

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; 
     }