Arch Linux-通过Web服务器将连接的客户端的MAC地址传递给Web应用程序

Arch Linux-通过Web服务器将连接的客户端的MAC地址传递给Web应用程序

我目前有一台运行 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`

相关内容