2013-07-12 2 views
2

http_x_forwarded_for를 사용하여 클라이언트의 프록시 서버와 실제 IP 주소를 얻으려고 제안하는 많은 기사를 읽었지만 아무 것도 작동하지 않는 것 같습니다.로컬 IP 주소와 클라이언트의 프록시 서버를 얻는 방법

로컬 IP 주소가 할당되어 있으며 프록시 서버를 사용하여 인터넷에 연결합니다. 그러나 전체 $ _SERVER 변수를 표시 할 때 저의 실제 기계 IP 및 프록시 서버에 대한 단일 추적이 없습니다.

LINK은 전체 $ _SERVER 변수를 표시합니다.

PHP에서는 불가능합니다. 어떻게해야합니까? 내가 모질라에서 사용하는 실제 IP 주소와 프록시 서버를 표시하는 일부 웹 페이지를 보았 기 때문에 그 가능성을 알았습니다. 그러나 어떤 언어를 사용하고 있는지 확실하지 않습니다.

어떻게 수행합니까? CGI 또는 JavaScript를 사용할 준비가되었습니다. 나는 인터넷에서 어떤 실무 사례도 찾을 수 없었다. 도움?

답변

1

http_x_forwarded_for 헤더를 보낼지 여부는 전적으로 프록시에 달려 있습니다. 일부 의지와 일부는 그렇지 않을 것입니다. $_SERVER 변수를 인쇄 할 때 사용했던 프록시가 헤더를 보내지 않았습니다.

모든 프록시가 헤더를 보낸 경우에도 누구나 http_x_forwarded_for 헤더를 스푸핑 할 수 있으므로 스크립트에서 실제 IP로 처리하면 누군가가 스푸핑하여 IP 확인을 우회 할 수 있으므로 문제가 발생합니다.

$_SERVER['REMOTE_ADDR']을 사용하고 http_x_forwarded_for에 의존하지 않는 것이 가장 좋습니다. 예를 들어 프록시 사용자는 새로운 IP로 사이트를 방문 할 수 있지만 모든 사용자가 http_x_forwarded_for에 IP를 스푸핑 할 수있는 능력보다 낫습니다.

알려진 프록시 목록을 유지할 수 있지만 궁극적으로 실제 클라이언트 IP를 제공하지는 않지만 IP가 프록시 목록에있는 경우에만 알려줄 수 있습니다.

+0

클라이언트 컴퓨터에서 javascript를 실행하여 브라우저에서 IP 및 프록시를 가져 오는 방법이 있습니까? 물론 가능하다면! –

+0

아쉽게도 외부 스크립트를 포함 할 수는 있지만 실제 IP 또는'x_forwarded_for '에 의존하는지 여부와 상관없이 PHP와 동일한 문제가 발생합니다. 또한 프록시 목록을 유지하는 것에 대한 제 편집을 참조하십시오. – MrCode

+0

의심을 해결해 주셔서 감사합니다. –

1

내가 작성한 작은 스위치가 프록시가 아닌 실제 IP를 얻는 데 어려움을 겪고있는 대부분의 사람들에게이 문제를 해결했다고 알았습니다. REMOTE_ADDRHTTP_X_FORWARDED_FOR이 같은지 확인하고 일치하는 경우 REMOTE_ADDR을 인쇄합니다. 서로 다른 경우 REMOTE_ADDR이 대개 프록시를 반환하기 때문에 HTTP_X_FORWARDED_FOR이 맞다고 가정합니다. 희망이 도움이됩니다. 더 좋은 방법이 있으면 알려주세요! [email protected]

<?php 
    $ip = $_SERVER['REMOTE_ADDR']; 
    $ip2 = $_SERVER['HTTP_X_FORWARDED_FOR']; 

    switch($ip): 
    case $ip2: 
     $ipa = $_SERVER['REMOTE_ADDR']; 
     $city= file_get_contents ("http://ipinfo.io/".$_SERVER['REMOTE_ADDR']."/city"); 
     $region= file_get_contents ("http://ipinfo.io/".$_SERVER['REMOTE_ADDR']."/region"); 
     $geo= file_get_contents ("http://ipinfo.io/".$_SERVER['REMOTE_ADDR']."/geo"); 
     break; 
    default: 
     $ipa = $_SERVER['HTTP_X_FORWARDED_FOR']; 
     $city= file_get_contents ("http://ipinfo.io/".$_SERVER['HTTP_X_FORWARDED_FOR']."/city"); 
     $region= file_get_contents ("http://ipinfo.io/".$_SERVER['HTTP_X_FORWARDED_FOR']."/region"); 
     $geo= file_get_contents ("http://ipinfo.io/".$_SERVER['HTTP_X_FORWARDED_FOR']."/geo"); 
     break; 
    endswitch; 
    ?> 
관련 문제