2009-03-14 6 views

Antwort

47

Dies sollte funktionieren:

//this gets the ip address of the server pc 

    public string GetIPAddress() 
    { 
    IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName()); // `Dns.Resolve()` method is deprecated. 
    IPAddress ipAddress = ipHostInfo.AddressList[0]; 

    return ipAddress.ToString(); 
    } 

http://wec-library.blogspot.com/2008/03/gets-ip-address-of-server-pc-using-c.html

ODER

//while this gets the ip address of the visitor making the call 
    HttpContext.Current.Request.UserHostAddress; 

http://www.geekpedia.com/KB32_How-do-I-get-the-visitors-IP-address.html

+4

Diese zwei Codeblöcke machen ganz andere Dinge. – Martin

+0

Was ist der Unterschied? – jergason

+6

Der oberste Codeblock ruft die IP-Adresse des Servers ab, auf dem der Code ausgeführt wird. Der untere Codeblock erhält die IP-Adresse des Besuchers, der die Anfrage stellt. – Martin

10

Die oben ist langsam, da es einen DNS-Aufruf erfordert (und offensichtlich nicht funktionieren, wenn eine ist nicht verfügbar). Sie können den Code verwenden, unten eine Karte des aktuellen PCs lokalen IPv4-Adressen mit den entsprechenden Subnetz-Maske zu erhalten:

public static Dictionary<IPAddress, IPAddress> GetAllNetworkInterfaceIpv4Addresses() 
{ 
    var map = new Dictionary<IPAddress, IPAddress>(); 

    foreach (var ni in NetworkInterface.GetAllNetworkInterfaces()) 
    { 
     foreach (var uipi in ni.GetIPProperties().UnicastAddresses) 
     { 
      if (uipi.Address.AddressFamily != AddressFamily.InterNetwork) continue; 

      if (uipi.IPv4Mask == null) continue; //ignore 127.0.0.1 
      map[uipi.Address] = uipi.IPv4Mask; 
     } 
    } 
    return map; 
} 

Warnung: Das in Mono nicht implementiert ist noch

+0

Und ... mit diesem Code ... Wie überprüfen Sie, welcher Server eine Site ausführt? Ich denke ... Ich habe einen Produktions- und einen Replikationsserver, wie speichere ich die IP oder ips, um zu überprüfen, welches der Server ist? –

+0

Ich denke, dass diese Antwort in die richtige Richtung geht. Server können mehrere Netzwerkadapter haben, und nur der Hostname kann je nach Serverkonfiguration falsche Informationen liefern. Die anderen Antworten können und werden in manchen Situationen funktionieren, aber dies ist die Antwort, die Sie dazu bringt, besser zu denken und Ihre Umgebung zu verstehen. – Nick

6
//this gets the ip address of the server pc 
    public string GetIPAddress() 
    { 
    string strHostName = System.Net.Dns.GetHostName(); 
    //IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName()); <-- Obsolete 
    IPHostEntry ipHostInfo = Dns.GetHostEntry(strHostName); 
    IPAddress ipAddress = ipHostInfo.AddressList[0]; 

    return ipAddress.ToString(); 
    } 
26

Request.ServerVariables["LOCAL_ADDR"];

Dies gibt die IP die Anforderung für multi-homed Server

+2

Dies ist auch die effizienteste und stabilste Methode. Wenn Sie '' 'System.Net verwenden.Dns''' du machst es falsch. –

+0

Genauer gesagt: System.Web.HttpContext.Current.Request.ServerVariables ["LOCAL_ADDR"]; –

1

in angingen Dies funktioniert für IPv 4:

public static string GetServerIP() 
{    
    IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName()); 

    foreach (IPAddress address in ipHostInfo.AddressList) 
    { 
     if (address.AddressFamily == AddressFamily.InterNetwork) 
      return address.ToString(); 
    } 

    return string.Empty; 
} 
Verwandte Themen