Tengo un sitio web y quiero almacenar la dirección IP y la ubicación de los usuarios que visitan mi sitio web. Lo intenté de muchas maneras, pero el siguiente código me da la IP del servidor donde está alojado mi sitio web y no la IP del cliente.
//Primer código que probé.
bool GetLan = falso;
string visitorIPAddress = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; if (String.IsNullOrEmpty(visitorIPAddress)) visitorIPAddress = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; if (string.IsNullOrEmpty(visitorIPAddress)) visitorIPAddress = System.Web.HttpContext.Current.Request.UserHostAddress; if (string.IsNullOrEmpty(visitorIPAddress) || visitorIPAddress.Trim() == "::1") { GetLan = true; visitorIPAddress = string.Empty; } if (GetLan) { if (string.IsNullOrEmpty(visitorIPAddress)) { //This is for Local(LAN) Connected ID Address string stringHostName = Dns.GetHostName(); //Get Ip Host Entry IPHostEntry ipHostEntries = Dns.GetHostEntry(stringHostName); //Get Ip Address From The Ip Host Entry Address List IPAddress[] arrIpAddress = ipHostEntries.AddressList; try { visitorIPAddress = arrIpAddress[arrIpAddress.Length - 2].ToString(); } catch { try { visitorIPAddress = arrIpAddress[0].ToString(); } catch { try { arrIpAddress = Dns.GetHostAddresses(stringHostName); visitorIPAddress = arrIpAddress[0].ToString(); } catch { visitorIPAddress = "127.0.0.1"; } } } } } var zaz = ""; zaz = visitorIPAddress.ToString();//segundo código que probé
string VisitorsIPAddr = string.Empty; if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null) { VisitorsIPAddr = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString(); } else if (System.Web.HttpContext.Current.Request.UserHostAddress.Length != 0) { VisitorsIPAddr = System.Web.HttpContext.Current.Request.UserHostAddress; }HttpContext.Current.Request o HttpContext.Request contendrá la dirección IP del cliente; no necesita el código repetitivo anterior.
Intente usar la propiedad HttpRequest.UserHostAddress en .NET Framework:
public ActionResult Test() { string clientIp = HttpContext.Current.Request.UserHostAddress; ... }Sin embargo, tenga en cuenta que si ha habido servidores proxy entre el cliente y su servidor, la IP puede no ser la IP del cliente sino la IP del servidor proxy .
En estos casos, es posible que encuentre la IP del cliente original en el encabezado X-Forwarded-For pero no hay garantías de la presencia de este encabezado ni de que conozca la IP real del cliente en general.