Heim  >  Artikel  >  Backend-Entwicklung  >  PHP-Lösung, um die echte IP des Benutzer-Clients zu erhalten

PHP-Lösung, um die echte IP des Benutzer-Clients zu erhalten

高洛峰
高洛峰Original
2016-12-20 15:48:531058Durchsuche

Das Abrufen der Client-IP ist eigentlich keine einfache Aufgabe. Aufgrund von IP-Spoofing und Proxy-Problemen ist die Authentizität des Client-IP-Abrufs nicht zu 100 % gewährleistet. Wir versuchen jedoch dennoch, eine vollständigere Lösung zu finden. Es gibt viele Möglichkeiten, die echte IP des Clients zu erhalten.

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);

Jetzt müssen wir diesen Code erklären: getenv( ) und strcasecmp() , die vorherige Funktion ruft die Systemumgebungsvariable ab, sie gibt den Wert zurück, andernfalls gibt sie false zurück.

$_SERVER ist das superglobale Variablenarray des Servers, verwenden Sie $ _SERVER['REMOTE_ADDR'] auf die gleiche Weise Sie können die IP-Adresse des Clients abrufen. Der Unterschied zwischen den beiden besteht darin, dass getenv die Ausführung von PHP im IIS-Isapi-Modus nicht unterstützt. Die Verwendung der String-Funktion besteht darin, string1 und string2 zu vergleichen. Wenn string1 größer als 0 ist, wird eine Zahl kleiner als 0 zurückgegeben 🎜>

Funktion verwendet zuerst die Kunden-IP. Wenn sie nicht eingerichtet ist, verwenden Sie die Proxy-Methode. Wenn sie nicht funktioniert, verwenden Sie REMOTE_ADDR.

Ich habe auch eine detailliertere Methode zur Erkennung gesehen IP, die IP-Spoofing und mehrere Proxy-Codes berücksichtigt.

1. Es wird kein Proxyserver verwendet. PHP erhält die Client-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;
}
REMOTE_ADDR = Client-IP

HTTP_X_FORWARDED_FOR = Kein Wert oder wird nicht angezeigt

2. Die Verwendung transparenter Proxyserver: Transparente Proxys

REMOTE_ADDR = Letzte Proxyserver-IP

HTTP_X_FORWARDED_FOR = Echte IP des Clients (wenn Beim Durchlaufen mehrerer Proxyserver ist dieser Wert ähnlich: 221.5.252.160, 203.98.182.163, 203.129.72.215)

Diese Art von Proxy Der Server sendet immer noch die echte IP des Clients an das Zugriffsobjekt, das das nicht erreichen kann Zweck, die wahre Identität zu verbergen.

3. Verwendung von PHP gewöhnlicher anonymer Proxyserver, um die Client-IP zu erhalten: Anonyme Proxys

REMOTE_ADDR = Letzte Proxyserver-IP

HTTP_X_FORWARDED_FOR = Proxyserver-IP (Beim Durchlaufen mehrerer Proxy-Server ist dieser Wert ähnlich: 203.98.182.163, 203.98.182.163, 203.129.72.215)


In diesem Fall wird die tatsächliche IP des Clients ausgeblendet, sie ist jedoch nicht verfügbar Dem Zugriffsobjekt wird offenbart, dass der Client einen Proxyserver verwendet, um darauf zuzugreifen.

4. Die Verwendung betrügerischer Proxyserver: Verzerrung von Proxys

REMOTE_ADDR = Proxyserver-IP

HTTP_X_FORWARDED_FOR = Zufällige IP (beim Durchlaufen mehrerer Proxyserver ist dieser Wert ähnlich: 220.4.251.159, 203.98.182.163, 203.129.72.215)

In diesem Fall zeigt sich das Gleiche. Der Client verwendet einen Proxyserver, fabriziert jedoch einen gefälschte zufällige IP (220.4.251.159) anstelle der echten IP des Clients, um ihn zu täuschen

5. Verwendung von PHP eines Proxyservers mit hoher Anonymität, um die Client-IP zu erhalten: High Anonymity Proxies (Elite-Proxys)

REMOTE_ADDR = Proxy-Server-IP

HTTP_X_FORWARDED_FOR = Kein Wert oder nicht angezeigt

Unabhängig davon, ob es sich um REMOTE_ADDR oder HTTP_FORWARDED_FOR handelt, sind diese Header-Nachrichten möglicherweise nicht verfügbar kann unterschiedliche IP-Header-Nachrichten senden. Daher kann der von PHP mit $_SERVER["REMOTE_ADDR"] und $_SERVER["HTTP_X_FORWARDED_FOR"] erhaltene Wert null oder ein "unbekannter" Wert sein.

Das Obige ist der PHP Vom Herausgeber eingeführte Lösung, um die echte IP des Benutzer-Clients zu erhalten. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Herausgeber wird allen umgehend antworten. Ich möchte mich auch bei Ihnen allen für Ihre Unterstützung der chinesischen PHP-Website bedanken!

Weitere Artikel zur PHP-Lösung zum Erhalten der echten IP des Benutzer-Clients finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn