如何检测访客';使用HTML的IP地址?
如何使用HTML检测我的网站的访问者IP地址? 我有一个contactform.html和一个formsent.html。如何检测访客';使用HTML的IP地址?,html,web,ip-address,Html,Web,Ip Address,如何使用HTML检测我的网站的访问者IP地址? 我有一个contactform.html和一个formsent.html。 当formsent.html将联系人信息发送到我的电子邮件时,我也想查看他们的IP地址 你不能,不仅仅是通过HTML 您需要使用具有可用HTTP头的脚本 请参阅使用JSONP 对于PHP,您将使用$\u服务器['REMOTE\u HOST']您不能 HTML是一种标记语言,而不是编程语言。它不“做”任何事情——它只是构建内容 您需要使用编程语言,如PHP、ASP等。您不能通
当formsent.html将联系人信息发送到我的电子邮件时,我也想查看他们的IP地址 你不能,不仅仅是通过HTML 您需要使用具有可用HTTP头的脚本 请参阅使用JSONP 对于PHP,您将使用
$\u服务器['REMOTE\u HOST']
您不能
HTML是一种标记语言,而不是编程语言。它不“做”任何事情——它只是构建内容
您需要使用编程语言,如PHP、ASP等。您不能通过HTML来完成。但是,您可以通过PHP找到访问者的IP地址
$ip=$_SERVER['REMOTE_ADDR'];
HTML是一种标记语言,因此它没有任何变量 如果希望使用PHP获得它,则需要使用$\u SERVER superglobal变量。解决办法可以是:
echo $_SERVER["REMOTE_ADDR"];
这实际上得到了主机ip,这将是您的服务器
echo$_服务器[“远程地址”]
但是,这是最基本的,如果用户在代理后面,并且允许他们对其进行简单的更改,则会失败。一个更好的方法是使用以下方法:
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_X_FORWARDED_FOR字段,并验证IP以确保其格式正确,且不在专用块中。以下脚本可能对您有用。您可以复制它并将其保存为
{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;
}
?>
$ip=$\u服务器['REMOTE\u ADDR']
此命令显示服务器ip地址而不是用户本地ip地址,因为这是php命令。由于此原因,此命令符合服务器中的代码。如果您可以使用JQuery但无法访问php,则此命令将显示服务器ip地址。它是免费的,对请求的数量没有限制
函数getIP(json){
编写(“我的公共IP地址是:”,json.IP);
}
这不是从HTML(或JavaScript)中获得的。您可以从处理contactform.html的脚本中获得它。然后我如何在PHP中使用它?@LukeyBoyIsXen use$_SERVER['REMOTE_HOST']这还包括了用户能够伪造其地址的可能性。另外,远程地址将始终被设置,因此剩余的地址永远不会被使用。你是对的。我把它改了一圈,所以它先检查转发,然后检查其他转发。事实上,整个答案都是废话。我重写它是为了更好。对大多数用户来说应该是一样的,但是将区分代理后面的用户,而不是将代理IP放在那里。这意味着如果你被IP阻止,你不会意外地阻止整个公司。但是在$IP之前它的值是什么样的现在是什么?好的,已经删除了错误的}。再试一次!