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!
Vous ne pouvez pas le faire via HTML. Cependant, vous pouvez trouver l'adresse IP d'un visiteur via PHP.
$ip=$_SERVER['REMOTE_ADDR'];
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;
}
?>
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.
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']
.
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;
}
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é.
$ 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