2014-01-16 9 views
11

Ich versuche, die IP-Adresse des Client-Computers mit C# zu ermitteln. Ich verwende den folgenden Code, um die IP-Adresse zu erhalten:IP-Adresse des Client-Computers abrufen

string IPAddress = HttpContext.Current.Request.UserHostAddress; 

Aber es gibt mir die Antwort in verschlüsselter Form d.h fe80::ed13:dee2:127e:1264%13

Wie kann ich die tatsächliche IP-Adresse? Jeder, der mit diesem Problem konfrontiert wurde, möchte eine Idee teilen.

+2

Für mich Ihr Beispiel sieht tatsächlich wie eine echte IP-Adresse (obwohl IPv6, nicht IPv4). –

+0

das ist nicht verschlüsseltes Ergebnis, das ist IPv6 anstelle von IPv4 –

+0

Ja gibt es die IPv6-Adresse. Gibt es eine Möglichkeit, wo wir die IPv4-Adresse bekommen können? – Sushri

Antwort

9

C#

string IPAddress = GetIPAddress(); 

public string GetIPAddress() 
{ 
    IPHostEntry Host = default(IPHostEntry); 
    string Hostname = null; 
    Hostname = System.Environment.MachineName; 
    Host = Dns.GetHostEntry(Hostname); 
    foreach (IPAddress IP in Host.AddressList) { 
     if (IP.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) { 
      IPAddress = Convert.ToString(IP); 
     } 
    } 
    return IPAddress; 
} 

VB.net

Dim Host As IPHostEntry 
Dim Hostname As String 
Hostname = My.Computer.Name 
Host = Dns.GetHostEntry(Hostname) 
For Each IP As IPAddress In Host.AddressList 
    If IP.AddressFamily = System.Net.Sockets.AddressFamily.InterNetwork Then 
     IPAddress = Convert.ToString(IP) 
    End If 
    Next 
Return IPAddress 

hoffte, das hilft

+0

Danke für deine Zeit Amarnath. Aber ich habe ein Problem in dieser Zeile: Hostname = My.Computer.Name; Gibt es noch weitere Abhängigkeiten? – Sushri

+0

@Sushri welchen Fehler Sie erhalten –

+0

My.Computer.Name wird nicht erkannt. Müssen wir noch etwas hinzufügen, das im Code hinzugefügt wurde? – Sushri

3
private string GetUserIP() 
{ 
    return Request.ServerVariables["HTTP_X_FORWARDED_FOR"] ?? Request.ServerVariables["REMOTE_ADDR"];  
} 

Sie mehrere IP-Adresse bekommen kann, kann sie so aufgeteilt as-

private string GetUserIP() 
    { 
     string ipList = Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; 

     if (!string.IsNullOrEmpty(ipList)) 
     { 
      return ipList.Split(',')[0]; 
     } 

     return Request.ServerVariables["REMOTE_ADDR"]; 
    } 
+0

Beachten Sie, dass der Header HTTP_X_FORWARDED_FOR mehrere IPs durch Komma getrennt enthalten kann. Normalerweise ist die richtige IP die letzte. Dies liegt an Proxies, die ihre eigene IP der "Kette" hinzufügen. –

+0

@ PascalMathys: Ja, Sie haben Recht, aktualisiert die Antwort. – Ramashankar

4

versucht diese es ist erforderlich, um den lokalen PC IP zu bekommen

string ip=System.Net.Dns.GetHostEntry 
       (System.Net.Dns.GetHostName()).AddressList.GetValue(0).ToString(); 
+0

Danke Ronit ... dieser Code für das Abrufen der IPv6-Adresse und ich habe es ein wenig modifiziert, um die IPv4-Adresse zu bekommen. Der Code zum Abrufen der IPv4-Adresse lautet: string ip = System.Net.Dns.GetHostEntry (System.Net.Dns.GetHostName()). AddressList.GetValue (1) .ToString(); – Sushri

4

In meinem Projekt verwenden. So benutze ich es Bitte versuchen Sie den Code unten

string strHostName = System.Net.Dns.GetHostName(); 
IPHostEntry ipEntry = System.Net.Dns.GetHostEntry(strHostName); 
IPAddress[] addr = ipEntry.AddressList; 
string ip = addr[1].ToString(); 
+0

Danke. Das funktioniert für mich. –