我目前有一台运行 Arch Linux 的 Raspberry Pi,用作 WiFi 接入点。Pi 上运行着一个 Web 服务器,带有一个 LAN Web 应用程序 (PHP)。
我希望我的 Web 应用知道发出请求的用户的 MAC 地址。我是否可以获取连接用户的 MAC 地址,将其发送到 lighttpd 并将其作为环境变量传递?
Web 服务器将知道请求用户的 LAN IP。这可以用来从系统获取 MAC 地址吗?
谢谢
答案1
这很容易做到。我将展示的第一种方法是获取所有 IP/MAC 对的列表,以防您需要。然后它会解析当前连接的客户端的 MAC 列表。第二种方法只是快速获取当前连接的客户端的 IP。
第一种方式:
在命令行运行此命令来检查它是否为您提供了 IP=MAC 地址列表:
arp -en | grep ether | sed -e "s/ \+ether \+/=/g" | grep -ioE "[0-9]{1,3}+(\.[0-9]{1,3}){3}=[0-9a-f]{2}(\:[0-9a-f]{2}){5}"`
一旦你知道它可以工作,你就可以将其合并到你的代码中。首先,你获取客户端 IP 地址。
$client_ip=$_SERVER['REMOTE_ADDR'];
然后获取 MAC 地址列表:
$arp_output=`arp -en | grep ether | sed -e "s/ \+ether \+/=/g" | grep -ioE "[0-9]{1,3}+(\.[0-9]{1,3}){3}=[0-9a-f]{2}(\:[0-9a-f]{2}){5}"`;
然后解析它们以找到正确的一个:
$mac_addresses=explode("\n", $arp_output);
foreach($mac_addresses as $mac_address)
{
$values=explode('=', trim($mac_address));
if ($values[0]==$client_ip)
{
$client_mac_address=$values[1];
}
}
第二种方式
进入$client_ip
命令行直接获取MAC地址:
$client_ip=escapeshellarg($_SERVER['REMOTE_ADDR']);
$client_mac_address=`arp -en | grep {$client_ip} | grep -ioE "[0-9a-f]{2}(\:[0-9a-f]{2}){5}" | head -c-1`