如何在PHP中获取已连接客户端的MAC和IP地址?

2022-08-30 06:45:50

我需要知道MAC和连接客户端的IP地址,如何在PHP中执行此操作?


答案 1

服务器 IP

您可以从 中获取服务器 IP 地址。$_SERVER['SERVER_ADDR']

服务器 MAC 地址

对于 MAC 地址,您可以在 Linux 或 Windows 中解析 的输出。netstat -ieipconfig /all

客户端 IP 地址

您可以从以下位置获取客户端 IP$_SERVER['REMOTE_ADDR']

客户端 MAC 地址

客户端 MAC 地址将不可用,除非在一种特殊情况下:如果客户端与服务器位于同一以太网段上。

因此,如果您正在构建某种基于LAN的系统,并且您的客户端位于同一以太网段上,那么您可以通过解析(linux)或(windows)的输出来获取MAC地址。arp -narp -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];
   }
}

但是,如果客户端不在 LAN 上怎么办?

好吧,你运气不好,除非你能让客户自愿提供这些信息并通过其他方式传输。


答案 2

客户端的 MAC 地址(在发出 HTTP 请求的计算机的意义上)被客户端和服务器之间的每个路由器覆盖。

客户端 IP 方便地提供给 中的脚本。在某些情况下,特别是如果您的Web服务器位于代理(即缓存代理)后面,将返回代理的IP,并且通常会有一个额外的值,其中包含原始请求客户端的IP。$_SERVER['REMOTE_ADDR']$_SERVER['REMOTE ADDR']$_SERVER['HTTP_X_FORWARDED_FOR']

有时,特别是当您正在处理您无法控制的匿名代理时,代理不会返回真正的IP地址,您所能希望的只是代理的IP地址。


推荐