web-dev-qa-db-ja.com

WebMethodで発信者のIPアドレスを取得するにはどうすればよいですか?

WebMethodで発信者のIPアドレスを取得するにはどうすればよいですか?

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

c#とASP.NETを使用する

51
Guy

HttpContext.Current.Request.UserHostAddress はあなたが望むものです。

84
Darren Kopp

ご注意ください。クライアントを一意に識別するためにIPアドレスを使用することはできません。 NATファイアウォールと企業プロキシはどこにでもあり、多くのユーザーを単一のIPの背後に隠しています。

9
davenpcj

試してください:

Context.Request.UserHostAddress
6
Kev

これを試して:

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

WebMethodで試していませんが、標準のHttpRequestsで使用しています

4
Aaron Powell

HttpContextはWebService基本クラス内で実際に使用できるため、Context.Request(またはHttpContext.Current(現在のコンテキストも指します)HttpRequestによって提供されるメンバーへのアクセスを取得します。

2
Troels Thomsen

次の機能を作成しました。

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

これはイントラネットでのみ機能します。プロキシまたはナッティングがある場合は、元のIPがhttpパケット内の別の場所に移動したかどうかを調べる必要があります。

0
depoip