Guy
Guy

Reputation: 67280

How do I get the caller's IP address in a WebMethod?

How do I get the caller's IP address in a WebMethod?

[WebMethod]
public void Foo()
{
    // HttpRequest... ? - Not giving me any options through intellisense...
}

using C# and ASP.NET

Upvotes: 54

Views: 62579

Answers (6)

depoip
depoip

Reputation: 121

I made the following function:

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

This work only in Intranet, if you have some Proxy or natting you should study if the original IP is moved somewhere else in the http packet.

Upvotes: 0

davenpcj
davenpcj

Reputation: 12684

Just a caution. IP addresses can't be used to uniquely identify clients. NAT Firewalls and corporate proxies are everywhere, and hide many users behind a single IP.

Upvotes: 9

Kev
Kev

Reputation: 119806

Try:

Context.Request.UserHostAddress

Upvotes: 7

Aaron Powell
Aaron Powell

Reputation: 25099

Try this:

string ipAddress = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];

Haven't tried it in a webMethod, but I use it in standard HttpRequests

Upvotes: 4

Troels Thomsen
Troels Thomsen

Reputation: 11617

The HttpContext is actually available inside the WebService base class, so just use Context.Request (or HttpContext.Current which also points to the current context) to get access to the members provided by the HttpRequest.

Upvotes: 2

Darren Kopp
Darren Kopp

Reputation: 77637

HttpContext.Current.Request.UserHostAddress is what you want.

Upvotes: 86

Related Questions