WebMethodで発信者のIPアドレスを取得するにはどうすればよいですか?
[WebMethod]
public void Foo()
{
// HttpRequest... ? - Not giving me any options through intellisense...
}
c#とASP.NETを使用する
HttpContext.Current.Request.UserHostAddress はあなたが望むものです。
ご注意ください。クライアントを一意に識別するためにIPアドレスを使用することはできません。 NATファイアウォールと企業プロキシはどこにでもあり、多くのユーザーを単一のIPの背後に隠しています。
試してください:
Context.Request.UserHostAddress
これを試して:
string ipAddress = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
WebMethodで試していませんが、標準のHttpRequestsで使用しています
HttpContextはWebService
基本クラス内で実際に使用できるため、Context.Request
(またはHttpContext.Current
(現在のコンテキストも指します)HttpRequest
によって提供されるメンバーへのアクセスを取得します。
次の機能を作成しました。
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パケット内の別の場所に移動したかどうかを調べる必要があります。