PHP-识别同一路由器下的单个用户(主IP地址)
是否有可能在同一“路由器”或“主IP地址”上找到(或以其他方式识别)每个用户的IP地址PHP-识别同一路由器下的单个用户(主IP地址),php,Php,是否有可能在同一“路由器”或“主IP地址”上找到(或以其他方式识别)每个用户的IP地址 更新,澄清问题: 用例: 我希望能够跟踪在一个可能的公共网络上的N个单独的计算机用户中的每一个是否登录到一个页面上 目前,在S/O上使用其他PHP IP detect代码段,这似乎只能将网络上的所有N台计算机标识为来自同一IP地址。这无助于解决识别这些用户是否来自同一网络上的不同用户,或者是否是网络上的同一用户多次点击页面的问题 -- 注意:Cookie可能已禁用 大多数转发路由器web代理将把原始IP地址
更新,澄清问题: 用例: 我希望能够跟踪在一个可能的公共网络上的N个单独的计算机用户中的每一个是否登录到一个页面上 目前,在S/O上使用其他PHP IP detect代码段,这似乎只能将网络上的所有N台计算机标识为来自同一IP地址。这无助于解决识别这些用户是否来自同一网络上的不同用户,或者是否是网络上的同一用户多次点击页面的问题 -- 注意:Cookie可能已禁用 大多数转发路由器web代理将把原始IP地址放在X-Forwarded-For报头中。使用PHP,您可以通过以下方式访问此原始地址:
$_SERVER['HTTP_X_FORWARDED_FOR']
我还应该提到,当请求通过其他路由器代理时,这个头很可能包含多个地址。由你自己决定你到底对哪个地址感兴趣
伪造标题也相当简单。不一致。当涉及NAT时,最好避免依赖IP地址来识别特定客户机;取而代之的是考虑使用Cookie来存储每个客户端的会话ID,并使用该信息来区分共享单个IP的主机(或用户代理)。 < P>您的问题相当模糊,我可以想出几种不同的方式来解释这一点……/P>
如果这不能回答您的问题,请告诉我您的目标是什么,我将调整我的答案。有没有明确的方法来保证互联网上用户的唯一性 没有办法区分机器人和真实用户 鉴于计算机视觉和验证码规避培训的当前趋势,验证码似乎不再是识别机器人的有效工具 在任何结合NAT的PAT(端口地址转换)之后,网络结构隐藏了内部计算机。可能存在
USERAGENT
变体,在内部指定唯一的计算机(假设它们不是伪造的)
但是,从同一操作系统源克隆的一组二十台计算机,在PAT后面,看起来几乎相同,端口也会不同,因为源端口映射是随机的,并且当PAT翻译组合在一起时,在Internet web PHP服务器上仍然会显示为一台计算机
无论用户是否相同,都无法建立信息:
Cookie只允许识别绑定到特定浏览器和特定用户的特定计算机。如果用户想要三倍或四倍。。。他们自己能够在同一台计算机上运行不同的浏览器(即Safari、FireFox、Chrome和Opera)或多次登录(更不用说curl、wget和许多其他访问方法)。它仍然无法区分冒充多个用户的单个用户
还有其他网络因素,如Tor出口点和代理服务器,使范例更加复杂
考虑到人类倾向于相同的浏览模式,如果有足够的数据,这可以被确定为用户是相同的概率,但即使是这种概率也永远无法确定(更不用说随机机器人模式了)
登录对“用户问题”有更大的影响,如果您要求每个用户都有一个经过验证的电子邮件登录,那么每次登录您都有更多的机会使用单个用户,特别是如果您排除了常见的公共电子邮件域,如hotmail.com和gmail.com等。私有域几乎不可能与不同的用户进行确认。信任的百分比随着已建立/已知的私有域的增加而增加(例如mit.edu)
总之,单一用户识别的目标无法从互联网上的客户那里合理地实现
有一些缓解技术可用,但没有一种是万无一失的。在4年前首次提出这个问题时,情况可能并非如此。但是现在大多数互联网都有一个IPv6地址。我知道大多数人目前也有IPv4地址。我会按IPv6地址检查连接。有了IPv6地址,即使在同一网络上,每台机器也应该获得不同的IP地址 使用此代码验证您正在使用IPv6地址。如果是,不同的设备应该有不同的IP地址
<?php
//whether ip is from share internet
if (!empty($_SERVER['HTTP_CLIENT_IP']))
{
$ip_address = $_SERVER['HTTP_CLIENT_IP'];
}
//whether ip is from proxy
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
{
$ip_address = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
//whether ip is from remote address
else
{
$ip_address = $_SERVER['REMOTE_ADDR'];
}
$ip_address = "2001:0db8:85a3:08d3:1319:8a2e:0370:7334";
// Validate ip as IPv6
if (filter_var($ip_address , FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
echo("$ip_address is a valid IPv6 address");
} else {
echo("$ip_address is not a valid IPv6 address");
}
?>
因此,我有一个日志文件,用于跟踪我网站上的用户,我会这样做以获取IP:
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} else if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
您可以尝试跟踪以上三种情况,但如果同一网络上的用户使用一个IP,他们通常只使用最后一个IP,很少会显示单独的IP,因为这可能会带来安全风险
对于同一网络上的不同用户,我还尝试跟踪会话id:
$session_id = session_id();
因此,即使多个用户的IP相同,他们也应该有不同的浏览会话
如果你想追踪t