jueves, 20 de noviembre de 2014

Obtener el Nombre del equipo y la Direccion IP en C# - How to Get User IP address using C#

Posted by InfoTacticas Soluciones  |  No comments

Para obtener el nombre de una computadora y su IP en C# utilizaremos el namespace System.net el cual provee una interface de programación simple para muchos de los protocolos de redes usados actualmente y los metodos GetHostNameGetHostAddresses. El primer metodo obtiene el nombre de la computadora local y retorna un valor de tipo string. Mientras que el segundo método obtiene la IP de una computadora a partir del nombre de la computadora y devuelve un valor por medio de un arreglo de tipo IPAddress (un arreglo de bytes).

Un inconveniente en la captura de la dirección IP es que hay diferencias en el formato de dirección IP entre la IP versión 4 y la IP versión 6. Cuando el protocolo IPv4 es el único protocolo habilitado en el servidor web, el acceso a la dirección IP en las Cabeceras de la Solicitud retornarán la dirección IPv4 habitual. Sin embargo, si IPv6 está también habilitada, se impondrá sobre IPv4. Los Sistemas Operativos Windows a partir de Windows Vista traen habilitado por defecto IPv6.

En el código presentado a continuación se verifica si la dirección devuelta es del formato IPv6, también se verifica si se está ejecutando en un equipo local, en cuyo caso devolverá "127.0.0.1" (IPv4) o ::1 (IPV6), en esos casos se procede a obtener la dirección IP a partir del nombre de la computadora y en un formato IPv4.

Espero les sea de utilidad el código.

     public static string GetIpCliente(System.Web.HttpContext contexto)
     {            
         string IP4Address = String.Empty;

         foreach (IPAddress IPA in Dns.GetHostAddresses(contexto.Request.UserHostAddress))
         {
            if (IPA.AddressFamily.ToString() == "InterNetwork" || IPA.AddressFamily.ToString() == "InterNetworkV6")
            {
                IP4Address = IPA.ToString();
                break;
            }
         }

         if (IP4Address != "127.0.0.1" && IP4Address != "::1" ) //String.Empty
         {
            return IP4Address;
         }

         foreach (IPAddress IPA in Dns.GetHostAddresses(Dns.GetHostName()))
         {
            if (IPA.AddressFamily.ToString() == "InterNetwork")
            {
                IP4Address = IPA.ToString();
                break;
            }
         }
         return IP4Address;
            
    }  
Más información: http://www.4guysfromrolla.com/articles/071807-1.aspx

11/20/2014 02:18:00 a. m. Share:

0 comentarios:

back to top