>  기사  >  백엔드 개발  >  PHP를 사용하여 사용자 클라이언트의 실제 IP를 얻는 방법

PHP를 사용하여 사용자 클라이언트의 실제 IP를 얻는 방법

不言
不言원래의
2018-06-08 09:35:502871검색

이 글에서는 주로 PHP를 사용하여 사용자 클라이언트의 실제 IP를 얻는 방법을 소개합니다. 이는 특정 참조 값을 가지고 있습니다. 이제 필요한 친구가 이를 참조할 수 있습니다.

실제로 클라이언트 IP를 얻는 것은 아닙니다. , IP 스푸핑 및 프록시 문제가 있기 때문에 클라이언트 IP 획득의 신뢰성이 손상되고 100% 정확할 수 없습니다. 그러나 고객의 IP를 획득하기 위해 보다 완전한 방법을 사용하려고 노력합니다. PHP에서 사용자 클라이언트를 얻는 방법 실제 IP 방법을 살펴보겠습니다

클라이언트 IP를 얻는 것은 실제로 간단한 작업이 아닙니다. IP 스푸핑 및 프록시 문제로 인해 클라이언트 IP를 얻는 신뢰성이 손상될 수 있습니다. 100% 정확할 수는 없습니다. 하지만 우리는 여전히 클라이언트의 실제 IP를 얻는 더 완전한 방법을 찾으려고 노력하고 있습니다. php를 사용하여 IP를 얻는 방법은 많습니다.

function getIp(){
if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
$ip = getenv("HTTP_CLIENT_IP");
else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
$ip = getenv("REMOTE_ADDR");
else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
$ip = $_SERVER['REMOTE_ADDR'];
else
$ip = "unknown";
return($ip);

이제 이 코드를 설명해야 합니다. 여기서 사용된 getenv() 및 strcasecmp(), 이전 함수는 시스템 환경 변수를 가져옵니다. 값을 얻을 수 있으면 값을 반환하고, 그렇지 않으면 false를 반환합니다.

$_SERVER는 서버 슈퍼 전역 변수 배열입니다. $_SERVER['REMOTE_ADDR']을 사용하여 클라이언트의 IP 주소를 얻을 수도 있습니다. 둘 사이의 차이점은 getenv가 IIS isapi 모드에서 실행되는 PHP를 지원하지 않는다는 것입니다.

strcasecmp(string1, string2) 문자열 함수의 사용법. string1과 string2를 비교하는 것입니다. 같으면 0을 반환합니다. string1이 string2보다 크면 0보다 큰 숫자를 반환하고, 작으면 0보다 작은 숫자를 반환합니다. 작동하지 않으면 프록시 방법을 사용해 보세요. 작동하지 않으면 REMOTE_ADDR을 사용하세요.

탐지 IP도 봤습니다. 더 자세한 방법은 IP 스푸핑 및 다중 프록시 코드를 고려하는 방법입니다.

function getip() {
$unknown = 'unknown';
if ( isset($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARDED_FOR'] && strcasecmp($_SERVER['HTTP_X_FORWARDED_FOR'], $unknown) ) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} elseif ( isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], $unknown) ) {
$ip = $_SERVER['REMOTE_ADDR'];
}
/*
处理多层代理的情况
或者使用正则方式:$ip = preg_match("/[\d\.]{7,15}/", $ip, $matches) ? $matches[0] : $unknown;
*/
if (false !== strpos($ip, ','))
$ip = reset(explode(',', $ip));
return $ip;
}

1. 클라이언트 IP를 얻기 위해 프록시 서버를 사용하지 않는 PHP:

REMOTE_ADDR = 클라이언트 IP

HTTP_X_FORWARDED_FOR = None 값이 표시되지 않을 수 있습니다


2. 투명 프록시 서버를 사용하는 경우: Transparent Proxies

REMOTE_ADDR = 마지막 프록시 서버 IP

HTTP_X_FORWARDED_FOR = 클라이언트의 실제 IP(여러 프록시 서버를 통과할 때 이 값은 유사: 221.5.252.160 , 203.98.182.163, 203.129.72.215)


이 유형 프록시 서버는 여전히 클라이언트의 실제 IP를 액세스 개체로 전송하므로 실제 신원을 숨기는 목적을 달성할 수 없습니다.

3. 일반 익명 프록시 서버의 PHP를 사용하여 고객 확보 최종 IP 상황: 익명 프록시

REMOTE_ADDR = 마지막 프록시 서버 IP

HTTP_X_FORWARDED_FOR = 프록시 서버 IP(여러 프록시 서버를 통과할 때 이 값은 유사함: 203.98.182.163, 203.98.182.163, 203.129.72.215)



이 경우 클라이언트의 실제 IP는 숨겨져 있지만 클라이언트가 프록시 서버를 사용하여 액세스한다는 사실이 액세스 개체에 드러납니다.

넷째, 사기성 프록시 서버의 사용: 프록시 서버 왜곡

REMOTE_ADDR = 프록시 서버 IP

HTTP_X_FORWARDED_FOR = 임의 IP( 여러 프록시 서버를 통과할 때 이 값은 유사합니다: 220.4.251.159, 203.98.182.163, 203.129.72.215)


이 경우 클라이언트가 프록시 서버를 사용하지만 하나의 가짜 임의 IP(220.4. 251.159)는 클라이언트의 실제 IP를 대체하여 속입니다.

5. 익명성이 높은 프록시 서버의 PHP를 사용하여 클라이언트 IP를 얻습니다. 익명성이 높은 프록시(엘리트 프록시)

REMOTE_ADDR = 프록시 서버 IP

HTTP_X_FORWARDED_FOR = 값이 없거나 표시되지 않습니다

REMOTE_ADDR이든 HTTP_FORWARDED_FOR이든 이러한 헤더 메시지는 브라우저와 네트워크 장치에 따라 서로 다른 IP 헤더 메시지를 보낼 수 있으므로 사용하지 못할 수 있습니다. 따라서 PHP는 $_SERVER[" REMOTE_ADDR"], $_SERVER[ "HTTP_X_FORWARDED_FOR"] 얻은 값은 null 값이거나 "알 수 없는" 값일 수 있습니다.

위 내용은 모두의 학습에 도움이 되기를 바랍니다. 중국사이트!

관련 권장사항:

PHP에서 핫링크 방지를 구현하는 방법


PHP는 IP 정보를 가져오고, php는 IP를 가져옵니다

위 내용은 PHP를 사용하여 사용자 클라이언트의 실제 IP를 얻는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.