¿Cómo obtener la dirección IP?

Quiero obtener la dirección IP de quien se está registrando en mi sitio. Cómo hacer esto en ASPNET. Usé el siguiente código, pero no está obteniendo la dirección IP correcta

string ipaddress = Request.UserHostAddress; 

Puede usar este método para obtener la dirección IP de la máquina del cliente.

 public static String GetIP() { String ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; if (string.IsNullOrEmpty(ip)) { ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; } return ip; } 

En una situación en la que use la dirección IP para la seguridad, debe conocer su infraestructura.

Si está utilizando un proxy entre su servidor web y sus clientes que establece el encabezado, debe poder confiar en la última dirección. Luego, utiliza el código como Muhammed sugirió con una actualización para obtener siempre la última dirección IP del encabezado directo (Vea el código a continuación)

Si no usa un proxy, tenga en cuenta que el encabezado X-Forwarded-For es muy fácil de falsificar. Le sugiero que lo ignore, a menos que tenga una razón clara para no hacerlo.

Actualicé el código de Muhammed Akhtar de la siguiente manera para permitirle elegir:

 public string GetIP(bool CheckForward = false) { string ip = null; if (CheckForward) { ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; } if (string.IsNullOrEmpty(ip)) { ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; } else { // Using X-Forwarded-For last address ip = ip.Split(',') .Last() .Trim(); } return ip; } 

Este artículo de Wikipedia explica los riesgos más a fondo.

Se debe usar HTTP_X_FORWARDED_FOR PERO puede devolver varias direcciones IP separadas por una coma. Vea esta página .

Por lo tanto, siempre debes verificarlo. Yo personalmente uso la función Split.

 public static String GetIPAddress() { String ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; if (string.IsNullOrEmpty(ip)) ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; else ip = ip.Split(',')[0]; return ip; } 

En MVC 6, recupera la dirección IP de esta manera:

 HttpContext.Request.HttpContext.Connection.RemoteIpAddress.ToString() 

Si un cliente se conecta a través de un proxy transparente no anónimo, puede obtener su dirección de:

 Request.ServerVariables["HTTP_X_FORWARDED_FOR"] 

que puede devolver nulo o “desconocido” si el IP no se puede obtener de esa manera.

Request.ServerVariables["REMOTE_ADDR"] debe ser igual que Request.UserHostAddress , cualquiera de los cuales se puede usar si la solicitud no proviene de un proxy no anónimo.

Sin embargo, si la solicitud proviene de un proxy anónimo, entonces no es posible obtener directamente la IP del cliente. Es por eso que llaman a esos proxies anónimos .

 string result = string.Empty; string ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; if (!string.IsNullOrEmpty(ip)) { string[] ipRange = ip.Split(','); int le = ipRange.Length - 1; result = ipRange[0]; } else { result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; }