2009-06-08 5 views
3

나는 ASMA 서비스를 구축했으며 ELMAH에서 오는 오류 로그를 처리하는 코드에 작성했습니다. 데이터베이스에 모든 필드를 추가하고 좀 더 추가하면 하나는 요청한 클라이언트의 IP 주소입니다. ...요청한 클라이언트의 IP 주소 얻기 (SOAP 메시지)

그러나 나는 (읽을 수는 있습니다. ..

나는

string ipAddress = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; 
if (ipAddress == "") ipAddress = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; 

사용 해요하지만 내가 모든 정보를 얻을 수있는 HTML 요청하지만 ALL_HTTP 헤더 SOAP 요청

아니기 때문에 오프 물론 여기에는 적용되지 않습니다

HTTP_CONNECTION:Keep-Alive 
HTTP_CONTENT_LENGTH:440331 
HTTP_CONTENT_TYPE:text/xml; charset=utf-8 
HTTP_EXPECT:100-continue 
HTTP_HOST:www.mydomainname.com 
HTTP_USER_AGENT:Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 2.0.50727.3074) 
HTTP_VSDEBUGGERCAUSALITYDATA:uIDPowJ7s0UYlmhEqcDjxYQT/TQAAAAADlaOOkJ5DUizA7gKLg3YEPur8pFWlaVFmpinSAOBTuIACQAA 
HTTP_SOAPACTION:"http://www. mydomainname.com/webservices/ErrorReportService/ReportErrors" 

요청한 IP는 어디에서 어떻게 구할 수 있습니까? 나는 (아직) 인증의 어떤 종류를 사용하지 않는

주 ... :

답변

2

당신은 HttpContext.Current.Request.UserHostAddress을 사용할 수 있어야하지만,이 신뢰할 수 없게됩니다를 요청하는 경우 컴퓨터가 프록시 서버 또는 NAT 장치 뒤에 있습니다. 대신 프록시 서버의 주소를 가져옵니다.


IP 주소는 고유 한 고유 식별자가 아닙니다. 컴퓨터를 식별하지 않습니다. 기껏해야 한 특정 컴퓨터에서 한 특정 네트워크 인터페이스가 한 특정 시간에 사용하는 네트워크 계층 주소를 식별합니다. 다른 시간에 동일한 네트워크 인터페이스가 다른 IP 주소를 사용하고있을 수 있습니다. 다른 시점에서 동일한 컴퓨터에는 둘 이상의 네트워크 인터페이스가있을 수 있습니다. 너는 말할 수 없다.

TCP/IP 프로토콜 설계자는 의도적으로 IP 주소를 컴퓨터의 고유 식별자로 사용할 수 없다는 것을 분명히 알았습니다. 불행히도, 너무 적은 사람들이 그것을 읽은 것 같습니다.

+0

이러한 상황에서 유일하게 현실적인 것은 프록시가 동의 한 사용자 정의 헤더에 실제 IP를 전달하는 것입니다. 당신이 통제 할 수 있다면 모든 것이 달려 있습니다. – annakata

+0

내가 이것을 사용하면 67에서 시작하는 IP 주소를 얻고 현재의 IP는 87로 시작하고 호스트 IP는 62로 시작합니다 ... 87 :-( – balexandre

관련 문제