我需要知道连接客户端的MAC和IP地址,我该如何在PHP中执行此操作?
您可以从中获取服务器IP地址$_SERVER['SERVER_ADDR']
.
对于MAC地址,您可以解析netstat -ie
Linux或ipconfig /all
Windows中的输出.
您可以从中获取客户端IP $_SERVER['REMOTE_ADDR']
除非在一个特殊情况下,否则客户端MAC地址将不可用:如果客户端与服务器位于同一以太网段上.
所以,如果你正在构建某种基于局域网的系统和你的客户都在同一个以太网段,那么你可以通过解析的输出中获得的MAC地址arp -n
(Linux)或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可方便地提供给脚本$_SERVER['REMOTE_ADDR']
.在某些情况下,特别是如果你的Web服务器位于代理(即高速缓存代理)$_SERVER['REMOTE ADDR']
将返回IP的的代理,并且会有一个额外的价值,通常$_SERVER['HTTP_X_FORWARDED_FOR']
,包含原始请求的客户端的IP地址.
有时,特别是当您处理您无法控制的匿名代理时,代理将不会返回真实的IP地址,您可以希望的是代理的IP地址.
我不认为您可以在PHP中获取MAC地址,但您可以从$_SERVER['REMOTE_ADDR']
变量中获取IP .
对于Windows服务器,我想你可以使用这个:
您需要做的就是将arp放入不同的组中.
默认:
-rwxr-xr-x 1 root root 48K 2008-11-11 18:11 /usr/sbin/arp*
用命令:
sudo chown root:www-data /usr/sbin/arp
你会得到:
-rwxr-xr-x 1 root www-data 48K 2008-11-11 18:11 /usr/sbin/arp*
因为apache是一个在用户www-data下运行的守护进程,所以它现在能够执行这个命令.
因此,如果您现在使用PHP脚本,例如:
你将获得linux arp -an
命令的输出.