2009-03-14 17 views

Respuesta

47

Esto debería funcionar:

//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

O

//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

Esos dos bloques de código hacen cosas completamente diferentes. – Martin

+0

¿Cuál es la diferencia? – jergason

+6

El bloque de código superior obtiene la dirección IP del servidor en el que se está ejecutando el código. El bloque de código inferior obtiene la dirección IP del visitante que realiza la solicitud. – Martin

10

Lo anterior es lento, ya que requiere una llamada DNS (y, obviamente, no funciona si uno no está disponible). Puede usar el siguiente código para obtener un mapa de direcciones IPv4 locales del PC actual con su correspondiente máscara de subred:

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

advertencia: esto no está implementado en Mono todavía

+0

Y ... con este código ... ¿cómo verifica cuál es el servidor que ejecuta un sitio? Creo ... Tengo un servidor de producción y de replicación, ¿cómo almaceno las ip o ips para verificar cuál es el servidor? –

+0

Creo que esta respuesta se dirige en la dirección correcta. Los servidores pueden tener múltiples adaptadores de red, y el nombre de host solo puede proporcionarle información incorrecta según la configuración del servidor. Las otras respuestas pueden funcionar y funcionarán en algunas situaciones, pero esta es la respuesta que lo hace pensar y comprender mejor su entorno. – 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"];

Esto le da a la IP la solicitud de los servidores multitarjeta

+2

Este es también el método más eficiente y estable. Si está usando '' 'System.Net.Dns''' lo estás haciendo mal. –

+0

Más específicamente: System.Web.HttpContext.Current.Request.ServerVariables ["LOCAL_ADDR"]; –

1

Esto funcionará para 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; 
} 
Cuestiones relacionadas