如何在PHP中获取已连接客户端的MAC和IP地址?
2022-08-30 06:45:50
我需要知道MAC和连接客户端的IP地址,如何在PHP中执行此操作?
您可以从 中获取服务器 IP 地址。$_SERVER['SERVER_ADDR']
对于 MAC 地址,您可以在 Linux 或 Windows 中解析 的输出。netstat -ie
ipconfig /all
您可以从以下位置获取客户端 IP$_SERVER['REMOTE_ADDR']
客户端 MAC 地址将不可用,除非在一种特殊情况下:如果客户端与服务器位于同一以太网段上。
因此,如果您正在构建某种基于LAN的系统,并且您的客户端位于同一以太网段上,那么您可以通过解析(linux)或(windows)的输出来获取MAC地址。arp -n
arp -a
编辑:您在评论中询问如何获取外部命令的输出 - 一种方法是使用反引号,例如
$ipAddress=$_SERVER['REMOTE_ADDR'];
$macAddr=false;
#run the external command, break output into lines
$arp=`arp -a $ipAddress`;
$lines=explode("\n", $arp);
#look for the output line describing our IP address
foreach($lines as $line)
{
$cols=preg_split('/\s+/', trim($line));
if ($cols[0]==$ipAddress)
{
$macAddr=$cols[1];
}
}
好吧,你运气不好,除非你能让客户自愿提供这些信息并通过其他方式传输。
客户端的 MAC 地址(在发出 HTTP 请求的计算机的意义上)被客户端和服务器之间的每个路由器覆盖。
客户端 IP 方便地提供给 中的脚本。在某些情况下,特别是如果您的Web服务器位于代理(即缓存代理)后面,将返回代理的IP,并且通常会有一个额外的值,其中包含原始请求客户端的IP。$_SERVER['REMOTE_ADDR']
$_SERVER['REMOTE ADDR']
$_SERVER['HTTP_X_FORWARDED_FOR']
有时,特别是当您正在处理您无法控制的匿名代理时,代理不会返回真正的IP地址,您所能希望的只是代理的IP地址。