Heim  >  Artikel  >  Backend-Entwicklung  >  So erhalten Sie die echte IP des Benutzer-Clients in PHP

So erhalten Sie die echte IP des Benutzer-Clients in PHP

*文
*文Original
2018-01-02 14:01:131983Durchsuche

Wie erhält PHP die echte IP des Benutzer-Clients? Das Abrufen der IP-Adresse des Clients ist eigentlich keine einfache Aufgabe. Aufgrund von IP-Spoofing und Proxy-Problemen wird die Authentizität des Abrufens der IP-Adresse des Clients beeinträchtigt und kann nicht 100 % genau sein. Wir versuchen jedoch, umfassendere Methoden zu verwenden, um die IP des Kunden zu erhalten. Im Folgenden wird Ihnen die Methode zum Abrufen der tatsächlichen IP des Benutzerclients in PHP erläutert.

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 gefährdet und kann nicht zu 100 % genau sein Es gibt eine relativ vollständige Methode zum Abrufen der echten IP des Clients.

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, wenn sie den Wert zurückgibt, andernfalls gibt sie false zurück.

$_SERVER ist das superglobale Variablenarray des Servers. Verwenden Sie $_SERVER['REMOTE_ADDR '], um die IP-Adresse des Clients abzurufen. Der Unterschied zwischen den beiden besteht darin, dass getenv die Ausführung von PHP im IIS-Isapi-Modus nicht unterstützt Die Zeichenfolgenfunktion besteht darin, Zeichenfolge1 und Zeichenfolge2 zu kombinieren und 0 zurückzugeben, wenn sie gleich ist. Wenn Zeichenfolge1 größer als Zeichenfolge2 ist, wird eine Zahl größer als 0 zurückgegeben. Wenn sie kleiner ist, wird eine Zahl kleiner als 0 zurückgegeben.

Die Funktion zuerst Verwendet die Kunden-IP. Wenn sie nicht eingerichtet ist, versuchen Sie, die Proxy-Methode zu verwenden. Wenn sie nicht funktioniert, verwenden Sie REMOTE_ADDR.

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

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;
}
Eins, PHP ohne Verwendung eines Proxyservers, um die Client-IP zu erhalten:

REMOTE_ADDR = Client-IP

HTTP_X_FORWARDED_FOR = Kein Wert oder keine Anzeige


2. Transparenz verwenden Proxyserver-Situation: Transparente Proxys

REMOTE_ADDR = Letzte Proxyserver-IP

HTTP_X_FORWARDED_FOR = Client echte IP (beim Durchlaufen mehrerer Proxyserver ist dieser Wert ähnlich: 221.5.252.160, 203.98. 182.163, 203.129.72.215)


Diese Art von Proxyserver sendet weiterhin die echte IP des Clients an das Zugriffsobjekt, das Der Zweck, die wahre Identität zu verbergen, kann nicht erreicht werden.

3. Verwenden Sie gewöhnliches PHP eines anonymen Proxyservers, um die Client-IP zu erhalten: Anonyme Proxys

REMOTE_ADDR = Letzte Proxyserver-IP

HTTP_X_FORWARDED_FOR = Proxyserver-IP (beim Durchlaufen mehrerer Proxyserver ist dieser Wert ähnlich: 203.98 .182.163, 203.98.182.163, 203.129.72.215)



In diesem Fall die tatsächliche IP des Der Client ist verborgen, dem Zugriffsobjekt wird jedoch offenbart, dass der Client einen Proxyserver verwendet, um auf ihn zuzugreifen.

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

REMOTE_ADDR = Proxyserver-IP

HTTP_X_FORWARDED_FOR = zufällige IP (bei der Durchleitung über mehrere Proxyserver ist dieser Wert ähnlich: 220.4.251.159, 203.98.182.163, 203.129.72.215)


In diesem Fall ist es so Außerdem wurde festgestellt, dass der Client einen Proxy-Server verwendet, aber eine gefälschte zufällige IP (220.4.251.159) erstellt, um den Client zu ersetzen. Verwenden Sie die echte IP des Clients, um ihn zu täuschen.

5 ein Proxyserver mit hoher Anonymität, um die Client-IP zu erhalten: High Anonymity Proxies (Elite-Proxys)

REMOTE_ADDR = Proxyserver-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, da verschiedene Browser und verschiedene Netzwerkgeräte möglicherweise unterschiedliche IP-Header-Nachrichten senden. Daher verwendet PHP $_SERVER["REMOTE_ADDR"] und $_SERVER["HTTP_X_FORWARDED_FOR"] Erhalten Sie einen Wert, der ein Nullwert oder ein „unbekannter“ Wert sein kann.

Verwandte Empfehlungen:

So berechnen Sie die IP-Adressmaske php

php IP Get City API (Innocent IP Database)

php IP und IP-Segment-Zugriffsbeschränkungscode_PHP-Tutorial

Das obige ist der detaillierte Inhalt vonSo erhalten Sie die echte IP des Benutzer-Clients in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen 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