Heim  >  Artikel  >  Backend-Entwicklung  >  Verwenden Sie PHP, um Client- und Server-IP zu erhalten

Verwenden Sie PHP, um Client- und Server-IP zu erhalten

王林
王林nach vorne
2019-08-19 16:01:145679Durchsuche

1. PHP erhält die Client-IP

Wenn PHP die Client-IP erhält, wird oft $_SERVER["REMOTE_ADDR"] verwendet. Wenn der Client jedoch einen Proxyserver für den Zugriff verwendet, wird die IP-Adresse des Proxyservers erhalten, nicht die tatsächliche IP-Adresse des Clients. Um die echte IP-Adresse des Clients über den Proxyserver zu erhalten, lesen Sie sie mit $_SERVER["HTTP_X_FORWARDED_FOR"] aus.

Aber nur, wenn der Client einen „transparenten Proxy“ verwendet, ist der Wert von $_SERVER["HTTP_X_FORWARDED_FOR"] die tatsächliche IP des Clients (wenn es sich um einen mehrschichtigen Proxy handelt, kann dieser Wert der sein echte IP des Clients) IP und die IP mehrerer Proxy-Server, getrennt durch Kommas ","); im Fall von „anonymer Proxy“ und „deceptiver Proxy“ ist es der IP-Wert des Proxy-Servers (falls vorhanden). Bei einem mehrschichtigen Proxy kann dieser Wert aus mehreren Proxy-Server-IPs bestehen, getrennt durch Kommas ","); im Fall eines „Proxy mit hoher Anonymität“ ist es ein leerer Wert.

REMOTE_ADDR ist die IP, wenn Ihr Client mit Ihrem Server einen „Handshake“ durchführt. Wenn ein „anonymer Proxy“ verwendet wird, zeigt REMOTE_ADDR die IP des Proxyservers an.
HTTP_CLIENT_IP ist der vom Proxyserver gesendete HTTP-Header. Wenn es sich um einen „superanonymen Proxy“ handelt, wird der Wert „none“ zurückgegeben. Ebenso wird REMOTE_ADDR durch die IP dieses Proxyservers ersetzt.

$_SERVER['REMOTE_ADDR']; //Accessor-IP (kann ein Benutzer, ein Proxy-Server oder ein Reverse-Proxy-Server sein)
$_SERVER['HTTP_CLIENT_IP' ]; (kann existieren, kann gefälscht werden), nicht Standard, nicht unbedingt von Servern implementiert.
$_SERVER['HTTP_X_FORWARDED_FOR']; //Welche IP ist der vom Benutzer zu verwendende Proxy? Das Format lautet: clientip,proxy1,proxy2. Eine ausführliche Erklärung finden Sie unter http://zh.wikipedia.org/wiki/X-Forwarded-For.

Der Unterschied zwischen den drei Werten ist wie folgt:

1 Wenn kein Proxyserver verwendet wird:

REMOTE_ADDR = Ihre IP
HTTP_VIA = Kein Wert oder nicht angezeigt
HTTP_X_FORWARDED_FOR = Kein Wert oder nicht angezeigt

2. Bei Verwendung transparenter Proxyserver: Transparente Proxys

REMOTE_ADDR = Letzter Proxy-Server-IP
HTTP_VIA = Proxy-Server-IP
HTTP_X_FORWARDED_FOR = Ihre echte IP. Bei der Weiterleitung über mehrere Proxy-Server ähnelt dieser Wert dem folgenden: 203.98.182.163, 203.98.182.163, 203.129.72.215.

Diese Art von Proxyserver leitet Ihre Informationen immer noch an die Person weiter, die Sie besuchen, und kann nicht den Zweck erreichen, Ihre wahre Identität zu verbergen.

3. Bei Verwendung gewöhnlicher anonymer Proxyserver: Anonyme Proxys

REMOTE_ADDR = Letzte Proxyserver-IP
HTTP_VIA = Proxyserver-IP
HTTP_X_FORWARDED_FOR = Proxyserver IP, wenn mehrere Proxyserver durchlaufen werden, ähnelt dieser Wert dem folgenden: 203.98.182.163, 203.98.182.163, 203.129.72.215.

Verbergen Sie Ihre echte IP, aber zeigen Sie Ihren Besuchern, dass Sie einen Proxyserver verwenden, um auf sie zuzugreifen.

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

REMOTE_ADDR = Proxyserver-IP
HTTP_VIA = Proxyserver-IP
HTTP_X_FORWARDED_FOR = zufällige IP, Beim Durchlaufen mehrerer Proxyserver ähnelt dieser Wert dem folgenden: 203.98.182.163, 203.98.182.163, 203.129.72.215.

Sagen Sie dem Besucher, dass Sie einen Proxyserver verwenden, erfinden Sie jedoch eine gefälschte zufällige IP anstelle Ihrer echten IP, um ihn auszutricksen.

5. Bei Verwendung von Proxyservern mit hoher Anonymität: Proxys mit hoher Anonymität (Elite-Proxys)

REMOTE_ADDR = Proxyserver-IP
HTTP_VIA = Kein Wert oder wird nicht angezeigt
HTTP_X_FORWARDED_FOR = Kein Wert oder wird nicht angezeigt. Beim Durchlaufen mehrerer Proxyserver ähnelt der Wert dem folgenden: 203.98.182.163, 203.98.182.163, 203.129.72.215.

Ersetzt alle Ihre Informationen vollständig durch die Informationen des Proxyservers, so wie Sie diesen Proxyserver verwenden, um direkt auf das Objekt zuzugreifen.

Beispielcode:

//获取用户IP, 定义一个函数getIP()
function getClientIP(){
if (getenv("HTTP_CLIENT_IP")) {
	$ip = getenv("HTTP_CLIENT_IP");
}elseif(getenv("HTTP_X_FORWARDED_FOR")) {
	$ip = getenv("HTTP_X_FORWARDED_FOR");
}elseif(getenv("REMOTE_ADDR")) {
$ip = getenv("REMOTE_ADDR");
	else $ip = "Unknow";
}
return $ip;
}
或者
function getClientIp() {
	$ip = 'unknow';
    foreach (array(
                'HTTP_CLIENT_IP',
                'HTTP_X_FORWARDED_FOR',
                'HTTP_X_FORWARDED',
                'HTTP_X_CLUSTER_CLIENT_IP',
                'HTTP_FORWARDED_FOR',
                'HTTP_FORWARDED',
                'REMOTE_ADDR') as $key) {
        if (array_key_exists($key, $_SERVER)) {
            foreach (explode(',', $_SERVER[$key]) as $ip) {
                $ip = trim($ip);
                //会过滤掉保留地址和私有地址段的IP,例如 127.0.0.1会被过滤
                //也可以修改成正则验证IP
                if ((bool) filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {
                    return $ip;
                }
            }
        }
    }
    return $ip;
}

2.php Serverseitige IP abrufen

Serverseitige IP-bezogene Variablen
a. „SERVER_NAME“] müssen Sie die Funktion gethostbyname() verwenden, um ihn abzurufen. Diese Variable wird sowohl auf der Server- als auch auf der Clientseite korrekt angezeigt.

b. $_SERVER["SERVER_ADDR"], serverseitig getestet: 127.0.0.1 (dies hängt mit dem Einstellungswert von BindAddress in httpd.conf zusammen). Die Testergebnisse auf dem Client sind korrekt.

/**
* 获取服务器端IP地址
 * @return string
 */
function getServerIp() { 
    if (isset($_SERVER)) { 
        if($_SERVER['SERVER_ADDR']) {
            $server_ip = $_SERVER['SERVER_ADDR']; 
        } else { 
            $server_ip = $_SERVER['LOCAL_ADDR']; 
        } 
    } else { 
        $server_ip = getenv('SERVER_ADDR');
    } 
    return $server_ip; 
}
或者
function getServerIP(){    
    return gethostbyname($_SERVER["SERVER_NAME"]);    
}

Für weitere verwandte Fragen besuchen Sie bitte das Fragen-Tutorial zur PHP-chinesischen Website: https://www.php.cn/

Das obige ist der detaillierte Inhalt vonVerwenden Sie PHP, um Client- und Server-IP zu erhalten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen