Heim  >  Artikel  >  Backend-Entwicklung  >  PHP kann keine echte IP erhalten

PHP kann keine echte IP erhalten

王林
王林Original
2019-09-29 17:46:244248Durchsuche

PHP kann keine echte IP erhalten

1. Ermitteln Sie die tatsächliche IP-Adresse des Benutzers

 public static function getClientIp()
 {
 if (getenv('HTTP_CLIENT_IP')) {
  $ip = getenv('HTTP_CLIENT_IP');
 }
 if (getenv('HTTP_X_REAL_IP')) {
  $ip = getenv('HTTP_X_REAL_IP');
 } elseif (getenv('HTTP_X_FORWARDED_FOR')) {
  $ip = getenv('HTTP_X_FORWARDED_FOR');
  $ips = explode(',', $ip);
  $ip = $ips[0];
 } elseif (getenv('REMOTE_ADDR')) {
  $ip = getenv('REMOTE_ADDR');
 } else {
  $ip = '0.0.0.0';
 }

 return $ip;
 }

Hinweis:

$ Der Unterschied zwischen _SERVER und getenv besteht darin, dass getenv PHP nicht unterstützt, das im IIS-Isapi-Modus ausgeführt wird. Die Funktion getenv("REMOTE_ADDR") kann die IP-Adresse normalerweise unter Apache abrufen, hat jedoch keine Wirkung in iis. Die Funktion $_SERVER['REMOTE_ADDR'] kann die IP-Adresse des Besuchers in Apache erfolgreich abrufen, aber auch unter iis.

2. Über REMOTE_ADDR

Diese Variable bezieht sich auf die IP-Adresse der „direkten Quelle“. die Adresse und IP. Bei einem einzelnen Server ist diese IP sehr genau und kann nicht gefälscht werden. Natürlich müssen nicht alle Programme einzelne Server sein. Wenn beispielsweise ein Lastausgleich verwendet wird (z. B. die Verwendung von Haproxy oder Nginx für den Lastausgleich), ist diese IP die IP des Weiterleitungscomputers, da der Prozess vom Client geladen wird Balancing-> ;Serverseitig. Es ist der Server, auf den der Load Balancer direkt zugreift, und nicht der Client.

3. In Bezug auf HTTP_X_FORWARDED_FOR und HTTP_CLIENT_IP

Es ist unmöglich, die Client-IP durch direkte Verwendung von REMOTE_ADDR unter Lastausgleich zu erhalten. Daher wurde die Lastausgleichsseite abgeleitet, um die Client-IP zu HEAD hinzuzufügen und an den Server zu senden, damit der Server die tatsächliche IP des Clients erhalten kann. Natürlich entsteht das, was Sie als Fälschung bezeichnen, schließlich sind außer den festen Daten im HEAD-Protokoll auch andere Daten anpassbar.

Empfohlenes Tutorial: PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonPHP kann keine echte IP erhalten. 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