WCF3.0でクライアントIPアドレスを取得する


82

どうやら、WCF 3.5ではクライアントIPアドレスを簡単に取得できますが、WCF3.0では取得できません。誰もが方法を知っていますか?

回答:


152

これは3.0では役に立ちませんが、3.5でクライアントIPアドレスを取得しようとしているために、この質問を見つけてイライラしている人々を見ることができます。だから、ここに動作するはずのいくつかのコードがあります:

using System.ServiceModel;
using System.ServiceModel.Channels;

OperationContext context = OperationContext.Current;
MessageProperties prop = context.IncomingMessageProperties;
RemoteEndpointMessageProperty endpoint =
    prop[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
string ip = endpoint.Address;

11
投稿を編集できませんでしたが、とても助かりました。ありがとうございます。2つのエラーがあることに言及したかった。「OperationContent」ではなく「OperationContext」であり、「RemoveEndpointMessageProperty」ではなく「RemoteEndpointMessageProperty」である必要があります。
Jeremy Mullin

3
セキュリティ上の注意:この値はなりすましの可能性があります... MSDNを参照してください
goodguys_activate 2012年

@ makerofthings7 MSDNでそれを確認しましたが、実際になりすましている可能性はありますか?リクエストにはまだTCPハンドシェイクがあります。IPが本当にスプーフィングされた場合、シナックスが間違った場所に送信され、接続が開始される前に失敗するのではないでしょうか。
費用

1
@costこの場合の「IP」は、TCPパケットだけでなく、WCFメッセージにも存在しますが、データストリーム(レイヤー7)のこのテキストは適切に保護されていません '
goodguys_activate

1
@shambulatorこの問題を確認してから数年が経ちましたが、次のKB記事は、IPアドレスではなくポートである可能性があることを示しているようです。 support.microsoft.com/kb/971842
goodguys_activate 2013年

36

(a)サービスが(明らかに)Webサービスでホストされており、(b)次のようにAspNetCompatibilityモードを有効にしている限り、可能であることがわかります。

    <system.serviceModel>
            <!-- this enables WCF services to access ASP.Net http context -->
            <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
...
    </system.serviceModel>

そして、次の方法でIPアドレスを取得できます。

HttpContext.Current.Request.UserHostAddress

11
そして、次を使用して取得しますHttpContext.Current.Request.UserHostAddress
Jader Dias 2010

3
これにより、一連の問題が発生することに注意してください
user1496062 2014

15

.NET 3.0SP1をターゲットにしている場合は可能です。

OperationContext context = OperationContext.Current;
MessageProperties prop = context.IncomingMessageProperties;
RemoteEndpointMessageProperty endpoint = prop[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
string ip = endpoint.Address;

クレジット:http//blogs.msdn.com/phenning/archive/2007/08/08/remoteendpointmessageproperty-in-wcf-net-3-5.aspx

参照:http//msdn.microsoft.com/en-us/library/system.servicemodel.channels.remoteendpointmessageproperty.aspx


3
わかりました。「fe80 :: 3dbc:a2ec」のようなIPv6を取得しているようです。私は、リモートのIP番号を取得できる方法さまよった
ジュニアMayhé

@ makerofthings7セキュリティ上の決定を行うときに何を使用する必要がありますか?
CSharper 2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.