我需要知道 MAC 和连接客户端的 IP地址,我怎么能做到这一点在 PHP?
服务器 IP
您可以从$_SERVER['SERVER_ADDR']
获取服务器 IP 地址。
服务器 MAC 地址
对于 MAC 地址,您可以在 Linux 中解析netstat -ie
的输出,或者在 Windows 中解析ipconfig /all
的输出。
客户端 IP 地址
您可以从$_SERVER['REMOTE_ADDR']
获取客户端 IP
客户端 MAC 地址
除非在一种特殊情况下,否则您将无法使用客户端 MAC 地址:如果客户端与服务器位于同一以太网网段上。
因此,如果您正在构建某种基于 LAN 的系统,并且您的客户端在同一以太网段上,那么您可以通过解析arp -n
(linux)或arp -a
(windows)。
编辑:您在注释中询问如何获取外部命令的输出-一种方法是使用反引号,例如
$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 上怎么办?
好吧,除非您可以让客户自愿提供该信息并通过其他方式进行传输,否则您将不走运。

客户端的 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 服务器,我认为你可以使用这个:
<?php
echo exec('getmac');
?>
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(70条)