Maison  >  Article  >  développement back-end  >  php ne peut pas obtenir la vraie adresse IP

php ne peut pas obtenir la vraie adresse IP

王林
王林original
2019-09-29 17:46:244181parcourir

php ne peut pas obtenir la vraie adresse IP

1. Obtenez la véritable adresse IP de l'utilisateur

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

Remarque :

$ La différence entre _SERVER et getenv est que getenv ne prend pas en charge php exécuté en mode isapi IIS. La fonction getenv("REMOTE_ADDR") peut obtenir l'adresse IP normalement sous Apache, mais n'a aucun effet sous iis. La fonction $_SERVER['REMOTE_ADDR'] peut obtenir avec succès l'adresse IP du visiteur sous Apache, mais également sous iis.

2. À propos de REMOTE_ADDR

Cette variable obtient l'adresse IP de la "source directe". La "source directe" fait référence au client qui demande directement. l'adresse IP de fin. Dans le cas d’un serveur unique, cette IP est très précise et ne peut être falsifiée. Bien sûr, tous les programmes ne doivent pas nécessairement être des serveurs uniques. Par exemple, lorsque l'équilibrage de charge est utilisé (comme l'utilisation de haproxy ou nginx pour l'équilibrage de charge), cette adresse IP est l'adresse IP de la machine de transfert, car le processus est client->Load. Équilibrage-> ; Côté serveur. Il s'agit du serveur directement accessible par l'équilibreur de charge au lieu du client.

3. Concernant HTTP_X_FORWARDED_FOR et HTTP_CLIENT_IP

Il est impossible d'obtenir l'IP du client en utilisant directement REMOTE_ADDR sous équilibrage de charge. Par conséquent, le côté équilibrage de charge est dérivé, qui ajoute l'adresse IP du client à HEAD et l'envoie au serveur, afin que le serveur puisse obtenir la véritable adresse IP du client. Bien entendu, ce que vous appelez une contrefaçon est produit. Après tout, à l'exception des données fixes du protocole HEAD, d'autres données sont personnalisables.

Tutoriel recommandé : Tutoriel vidéo PHP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn