WCF 3.0에서 클라이언트 IP 주소 얻기


82

WCF 3.5에서는 클라이언트 IP 주소를 쉽게 얻을 수 있지만 WCF 3.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가 진정으로 스푸핑 된 경우 syn ack이 잘못된 위치로 전송되지 않을까요? 따라서 연결이 시작되기도 전에 실패할까요?
비용 :

1
@cost이 경우 "IP"는 TCP 패킷에있을뿐만 아니라 WCF 메시지에도 상주하지만 데이터 스트림 (레이어 7)의이 텍스트는 제대로 보호되지 않습니다. '
goodguys_activate 2013 년

1
@shambulator 문제를 본 지 몇 년이 지났지 만 다음 KB 기사는 ipaddress가 아닌 포트 일 수 있음을 나타내는 것 같습니다. support.microsoft.com/kb/971842
goodguys_activate 2013-06-20

36

(a) 서비스가 웹 서비스에서 호스팅되고 (분명히) (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

3
전체 문제의 설정이 당긴를 경고
user1496062

15

.NET 3.0 SP1을 대상으로하는 경우 가능합니다.

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.