2011-01-04 5 views
1

$ _SERVER [ 'REMOTE_ADDR']을 (를) 사용했으며 클라이언트 IP 주소 (현재 페이지를보고있는 IP 주소)를 반환하지만 현재는 반환합니다 (동일한 코드). 호스트 IP 주소 (나는 IP 위치로 IP 주소를 확인했다). 문제는 호스트 또는 무엇입니까? 감사합니다.

+6

우연히 호스트에서 방문하지 않겠습니까? – TJHeuvel

+0

어떤 종류의 프록시를 사용합니까? – Gumbo

+0

번호. 몇 번 확인 했어. 난 프록시를 사용하지 말아주세요 – imez

답변

12

먼저 HTTP_X_FORWARDED_FOR을 쿼리해야하며 할당되지 않은 경우 REMOTE_ADDR을 사용해야합니다.

+0

지금 HTTP_X_FORWARDED_FOR을 사용하고 올바른 ip를 반환합니다. 하지만 REMOTE_ADDR에 문제가있는 이유는 무엇입니까? – imez

+0

당신과 서버 사이에 프록시가 있기 때문에 프록시 주소를 REMOTE_ADDR로 가져옵니다. HTTP_X_FORWARDED_FOR은 프록시를 사용하는 클라이언트의 IP입니다. –

+0

@imez : @Rosh는 이미 당신과 서버 사이에 프록시가 있어야한다고 지적 했으므로'REMOTE_ADDR'을 쿼리하면 프록시 서버의 IP를 얻을 수 있습니다. 'HTTP_X_FORWARDED_FOR'를 처음으로 확인하면 프록시는 이것을 실제 IP 주소로 채울 것입니다. – James

2

나는 배열의 키는 대소 문자를 구분 언급해야하고, 대문자이어야한다 :

var_dump($_SERVER['remote_addr']); 
echo "\n"; 
var_dump($_SERVER['REMOTE_ADDR']); 

는 출력 :

Notice: Undefined index: remote_addr in /home/adam/public_html/2011/01/04/foo.php on line 3 
NULL 

string(15) "10.0.1.51" 

내가 var_dump($_SERVER) 단지의 상태를 평가하기위한 것이다 당신의 세상에, 그리고 거기에서 가라.

+0

나는 이전 코드를 변경하지 않았다. – imez

+0

$ _SERVER 전체를 덤핑하는 것은 좋은 생각입니다. HTTP_CLIENT_IP에서 작동하는 프록시 뒤에 실제 IP 주소가 있다는 것을 발견했습니다 ... – ChrisV

4

@ 제임스 @imez 기본적으로

클라이언트 IP는 [ 'REMOTE_ADDR'] $ _SERVER입니다. 사용자가 PROXY 서버 (HTTP 게이트웨이)를 사용하여 사이트에 들어올 때 프록시 서버는 프록시 서버 (HTTP_X_FORWARDED_FOR)를 알리고 $ _SERVER [ 'REMOTE_ADDR']에 자체 프록시 IP를 부여합니다.

익명 프록시는 HTTP_X_FORWARDED_FOR을 생략하거나 단순히 거짓말을합니다.

실제 클라이언트 IP를 가지고 있음을 알 수 없습니다.

+0

내 대답에 대한 내 의견에이를 명시했습니다. 실제 IP 주소는'HTTP_X_FORWARDED_FOR'에있는 것이 결코 아니지만 제가 말했던 것처럼 대부분의 시간입니다. – James

+0

@James : 나보다 빠르다 ;-) - –

+0

localhost에서 어떻게 될까? 내가 프록시를 사용한다는 것을 어떻게 알 수 있습니까? –