Maison >développement back-end >tutoriel php >Comment obtenir la véritable adresse IP du client utilisateur en PHP
Comment PHP obtient-il la véritable adresse IP du client utilisateur ? Obtenir l'adresse IP du client n'est en réalité pas une tâche simple. En raison de problèmes d'usurpation d'adresse IP et de proxy, l'authenticité de l'obtention de l'adresse IP du client sera compromise et ne pourra pas être précise à 100 %. Cependant, nous essayons d'utiliser des méthodes plus complètes pour obtenir l'IP du client. Ci-dessous, l'éditeur partagera avec vous la méthode d'obtention de l'IP réelle du client de l'utilisateur en PHP. J'espère que cela sera utile à tout le monde.
L'obtention de l'adresse IP du client n'est en fait pas une tâche simple. En raison de problèmes d'usurpation d'adresse IP et de proxy, l'authenticité de l'obtention de l'adresse IP du client sera compromise et ne pourra pas être exacte à 100 %. it. Une méthode relativement complète pour obtenir la véritable IP du client. Vous pouvez trouver de nombreuses méthodes pour obtenir l'IP en utilisant php
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);
Nous devons maintenant expliquer ce code. getenv() et strcasecmp(), la fonction précédente obtient la variable d'environnement système si la valeur peut être obtenue, elle renvoie la valeur, sinon elle renvoie false
$_SERVER est le tableau de super variables globales du serveur, use $_SERVER['REMOTE_ADDR '] peut également obtenir l'adresse IP du client. La différence entre les deux est que getenv ne prend pas en charge php exécuté en mode isapi IIS
strcasecmp(string1, string2) L'utilisation du. La fonction string consiste à combiner string1 et string2 Comparez et renvoie 0 si égal. Si string1 est supérieur à string2, renvoie un nombre supérieur à 0. S'il est inférieur, renvoie un nombre inférieur à 0.
La fonction en premier utilise l'adresse IP du client. Si elle n'est pas établie, essayez d'utiliser la méthode proxy. Si cela ne fonctionne pas, utilisez REMOTE_ADDR.
J'ai également vu une méthode plus détaillée de détection de l'IP, qui prend en compte l'IP. usurpation d'identité et codes proxy multiples. La méthode est similaire.
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; }
Un, PHP sans utiliser de serveur proxy pour obtenir l'IP du client :
REMOTE_ADDR = IP du client.
HTTP_X_FORWARDED_FOR = Aucune valeur ou aucun affichage
2. Utiliser la transparence Situation du serveur proxy : Proxies transparents
REMOTE_ADDR = Dernière adresse IP du serveur proxy
HTTP_X_FORWARDED_FOR = Client IP réelle (lors du passage par plusieurs serveurs proxy, cette valeur est similaire : 221.5.252.160, 203.98.182.163, 203.129.72.215)
Ce type de serveur proxy envoie toujours la véritable IP du client à l'objet d'accès, qui ne peut pas atteindre l'objectif de cacher la véritable identité.
3. Utilisez PHP ordinaire du serveur proxy anonyme pour obtenir l'adresse IP du client : proxys anonymes
REMOTE_ADDR = Dernière adresse IP du serveur proxy
HTTP_X_FORWARDED_FOR = IP du serveur proxy (lors du passage par plusieurs serveurs proxy, cette valeur est similaire : 203.98 .182.163, 203.98.182.163, 203.129.72.215)
Dans ce cas, la véritable IP du Le client est masqué, mais il est révélé à l'objet d'accès que le client utilise un serveur proxy pour y accéder.
4. L'utilisation de serveurs proxy trompeurs : distorsion des proxys
REMOTE_ADDR = IP du serveur proxy
HTTP_X_FORWARDED_FOR = IP aléatoire (lors du passage par plusieurs serveurs proxy, cette valeur Similaire : 220.4.251.159, 203.98.182.163, 203.129.72.215)
Dans ce cas, il s'agit a également révélé que le client utilise un serveur proxy, mais fabrique une fausse adresse IP aléatoire (220.4.251.159) pour remplacer le client. Utilisez la véritable adresse IP du client pour le tromper.
Utilisez PHP de. un serveur proxy à haut anonymat pour obtenir l'IP du client : Proxies à haut anonymat (Proxies Elite)
REMOTE_ADDR = IP du serveur proxy
HTTP_X_FORWARDED_FOR = Aucune valeur ou non affiché
Qu'il s'agisse de REMOTE_ADDR ou HTTP_FORWARDED_FOR, ces messages d'en-tête peuvent ne pas être disponibles car différents navigateurs et différents périphériques réseau peuvent envoyer des messages d'en-tête IP différents. Par conséquent, PHP utilise $_SERVER["REMOTE_ADDR"] et $_SERVER["HTTP_X_FORWARDED_FOR"] pour. obtenir une valeur qui peut être une valeur nulle ou une valeur "inconnue"
Recommandations associées :
Comment calculer le masque d'adresse IP dans. php
php IP Get City API (base de données IP innocente)
php IP et Code de restriction d'accès au segment IP_Tutoriel 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!