Networking
Arch Linux - 通過 Web 伺服器將連接的客戶端的 MAC 地址傳遞給 Web 應用程序
我目前有一個執行 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`