web-dev-qa-db-fra.com

Comment détecter l'adresse IP du visiteur en utilisant HTML?

Comment puis-je détecter l'adresse IP des visiteurs en utilisant HTML pour mon site Web? J'ai un contactform.html et un formsent.html. Et lorsque formsent.html envoie les informations de contact à mon e-mail, je veux également voir leur adresse IP!

8
user1096463

Vous ne pouvez pas le faire via HTML. Cependant, vous pouvez trouver l'adresse IP d'un visiteur via PHP.

$ip=$_SERVER['REMOTE_ADDR'];
12
Surya KLSV

Le script suivant peut vous être utile. Vous pouvez le copier et l'enregistrer sous {whateveryouwant}.php

<?php

echo "Your IP is";

echo $_SERVER["REMOTE_ADDR"];

function get_ip_address() {
  // check for shared internet/ISP IP
  if (!empty($_SERVER['HTTP_CLIENT_IP']) && $this->validate_ip($_SERVER['HTTP_CLIENT_IP']))
   return $_SERVER['HTTP_CLIENT_IP'];

  // check for IPs passing through proxies
  if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
   // check if multiple ips exist in var
    $iplist = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
    foreach ($iplist as $ip) {
     if ($this->validate_ip($ip))
      return $ip;
    }
   }

  if (!empty($_SERVER['HTTP_X_FORWARDED']) && $this->validate_ip($_SERVER['HTTP_X_FORWARDED']))
   return $_SERVER['HTTP_X_FORWARDED'];
  if (!empty($_SERVER['HTTP_X_CLUSTER_CLIENT_IP']) && $this->validate_ip($_SERVER['HTTP_X_CLUSTER_CLIENT_IP']))
   return $_SERVER['HTTP_X_CLUSTER_CLIENT_IP'];
  if (!empty($_SERVER['HTTP_FORWARDED_FOR']) && $this->validate_ip($_SERVER['HTTP_FORWARDED_FOR']))
   return $_SERVER['HTTP_FORWARDED_FOR'];
  if (!empty($_SERVER['HTTP_FORWARDED']) && $this->validate_ip($_SERVER['HTTP_FORWARDED']))
   return $_SERVER['HTTP_FORWARDED'];

  // return unreliable ip since all else failed
   return $_SERVER['REMOTE_ADDR'];
 }

function validate_ip($ip) {
     if (filter_var($ip, FILTER_VALIDATE_IP, 
                         FILTER_FLAG_IPV4 | 
                         FILTER_FLAG_IPV6 |
                         FILTER_FLAG_NO_PRIV_RANGE | 
                         FILTER_FLAG_NO_RES_RANGE) === false)
         return false;
     self::$ip = $ip;
     return true;
 }
?>
8
Michael

Tu ne peux pas.

HTML est un langage de balisage, pas un langage de programmation. il ne "fait" rien - il structure simplement le contenu.

Vous devez utiliser un langage de programmation, tel que PHP, ASP, etc.

3
Kae Verens

Vous ne pouvez pas, pas uniquement via HTML.

Vous devez utiliser un script qui dispose des en-têtes HTTP.

Voir this SO answer using JSONP.

Pour PHP vous utiliseriez $_SERVER['REMOTE_Host'].

2
Oded

Le HTML est un langage de balisage, il n'a donc aucune variable.

Si vous voulez l'obtenir en utilisant PHP, vous devrez utiliser la variable superglobale $ _SERVER. Une solution pourrait être:

echo $_SERVER["REMOTE_ADDR"];

Cela obtient en fait l'IP hôte, qui serait votre serveur.

echo $ _SERVER ["REMOTE_ADDR"];

C'est le plus basique cependant, et échoue si l'utilisateur est derrière un proxy, tout en lui permettant de le changer trivialement. Une bien meilleure méthode consiste à utiliser quelque chose comme:

function get_ip_address() {
  // check for shared internet/ISP IP
  if (!empty($_SERVER['HTTP_CLIENT_IP']) && $this->validate_ip($_SERVER['HTTP_CLIENT_IP']))
   return $_SERVER['HTTP_CLIENT_IP'];

  // check for IPs passing through proxies
  if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
   // check if multiple ips exist in var
    $iplist = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
    foreach ($iplist as $ip) {
     if ($this->validate_ip($ip))
      return $ip;
    }
   }

  if (!empty($_SERVER['HTTP_X_FORWARDED']) && $this->validate_ip($_SERVER['HTTP_X_FORWARDED']))
   return $_SERVER['HTTP_X_FORWARDED'];
  if (!empty($_SERVER['HTTP_X_CLUSTER_CLIENT_IP']) && $this->validate_ip($_SERVER['HTTP_X_CLUSTER_CLIENT_IP']))
   return $_SERVER['HTTP_X_CLUSTER_CLIENT_IP'];
  if (!empty($_SERVER['HTTP_FORWARDED_FOR']) && $this->validate_ip($_SERVER['HTTP_FORWARDED_FOR']))
   return $_SERVER['HTTP_FORWARDED_FOR'];
  if (!empty($_SERVER['HTTP_FORWARDED']) && $this->validate_ip($_SERVER['HTTP_FORWARDED']))
   return $_SERVER['HTTP_FORWARDED'];

  // return unreliable ip since all else failed
  return $_SERVER['REMOTE_ADDR'];
 }

function validate_ip($ip) {
     if (filter_var($ip, FILTER_VALIDATE_IP, 
                         FILTER_FLAG_IPV4 | 
                         FILTER_FLAG_IPV6 |
                         FILTER_FLAG_NO_PRIV_RANGE | 
                         FILTER_FLAG_NO_RES_RANGE) === false)
         return false;
     self::$ip = $ip;
     return true;
 }

( http://stackoverflow.com/questions/1634782/what-is-the-most-accurate-way-to-retrieve-a-users-correct-ip-address-in-php )

Cela analyse correctement le champ HTTP_X_FORWARDED_FOR ainsi que la validation de l'IP pour s'assurer qu'il est du bon format, et non dans un bloc privé.

1
Rich Bradshaw

$ ip = $ _ SERVER ['REMOTE_ADDR'];

cette commande affiche l'adresse IP du serveur et non l'adresse IP locale de l'utilisateur car il s'agit de la commande php est conforme au code du serveur pour cette raison, cette commande affiche l'adresse IP du serveur

1
Naga Kotesh