Networking

Arch Linux - 通過 Web 伺服器將連接的客戶端的 MAC 地址傳遞給 Web 應用程序

  • December 28, 2016

我目前有一個執行 Arch Linux 作為 wifi 接入點的樹莓派。在 pi 上執行一個帶有 LAN Web 應用程序 (PHP) 的 Web 伺服器。

我希望我的 Web 應用程序知道發出請求的使用者的 MAC 地址。我是否能夠獲取連接使用者的 MAC 地址,將其發送到 lighttpd 並將其作為環境變數傳遞?

Web 伺服器將知道請求使用者的 LAN IP。這可以用來從系統中獲取 MAC 地址嗎?

謝謝

這很容易做到。我將展示的第一種方式是獲取所有 IP/MAC 對的列表,以備不時之需。然後它解析目前連接的客戶端 MAC 的列表。第二種方式,只是快速抓取目前連接的客戶端的IP。

第一種方式:

在命令行執行它以檢查它是否為您提供了 IPs=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`

引用自:https://serverfault.com/questions/820436