В настоящее время у меня есть Raspberry Pi, работающий под управлением Arch Linux, который действует как точка доступа Wi-Fi. На Pi работает веб-сервер с веб-приложением LAN (PHP).
Я хочу, чтобы мое веб-приложение знало MAC-адрес пользователя, отправляющего запрос.Могу ли я получить MAC-адрес подключающегося пользователя, отправить его в lighttpd и передать его как переменную среды?
Веб-сервер будет знать IP-адрес LAN запрашивающего пользователя. Можно ли это использовать для получения MAC-адреса от системы?
Спасибо
Это можно легко сделать. Сначала я покажу вам список всех пар 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`