servidor - obtener la ip del equipo c#
¿Cómo obtengo la dirección IP de la persona que llama en un WebMethod? (6)
¿Cómo obtengo la dirección IP de la persona que llama en un WebMethod?
[WebMethod]
public void Foo()
{
// HttpRequest... ? - Not giving me any options through intellisense...
}
usando C # y ASP.NET
El HttpContext está realmente disponible dentro de la clase base de WebService
, así que simplemente use Context.Request
(o HttpContext.Current
que también apunta al contexto actual) para obtener acceso a los miembros proporcionados por HttpRequest
.
Hice la siguiente función:
static public string sGetIP()
{
try
{
string functionReturnValue = null;
String oRequestHttp =
WebOperationContext.Current.IncomingRequest.Headers["User-Host-Address"];
if (string.IsNullOrEmpty(oRequestHttp))
{
OperationContext context = OperationContext.Current;
MessageProperties prop = context.IncomingMessageProperties;
RemoteEndpointMessageProperty endpoint =
prop[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
oRequestHttp = endpoint.Address;
}
return functionReturnValue;
}
catch (Exception ex)
{
return "unknown IP";
}
}
Esto funciona solo en Intranet, si tiene algún Proxy o natting, debería estudiar si la IP original se mueve a otra parte en el paquete http.
Prueba esto:
string ipAddress = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
No lo he probado en un webMethod, pero lo uso en HttpRequests estándar
Solo una advertencia. Las direcciones IP no se pueden usar para identificar de manera exclusiva a los clientes. Los cortafuegos NAT y los proxies corporativos están en todas partes, y ocultan a muchos usuarios detrás de una sola IP.
Tratar:
Context.Request.UserHostAddress
HttpContext.Current.Request.UserHostAddress es lo que quieres.