Мне нужно знать MAC-адрес и IP-адрес подключенных клиентов, как я могу сделать это в PHP?
Вы можете получить IP-адрес сервера от $_SERVER['SERVER_ADDR']
,
Для MAC-адреса вы можете проанализировать вывод netstat -ie
в Linux или ipconfig /all
в винде.
Вы можете получить IP-адрес клиента от $_SERVER['REMOTE_ADDR']
Клиентский MAC-адрес не будет вам доступен, за исключением одного особого обстоятельства: если клиент находится в том же сегменте Ethernet, что и сервер.
Итак, если вы строите какую-то систему на основе локальной сети и ваши клиенты являются в том же сегменте Ethernet, то вы можете получить MAC-адрес, анализируя вывод arp -n
(Linux) или arp -a
(окна).
редактировать: вы спрашиваете в комментариях, как получить вывод внешней команды — один из способов заключается в использовании обратных галочек, например.
$ipAddress=$_SERVER['REMOTE_ADDR'];
$macAddr=false;
#run the external command, break output into lines
$arp=`arp -a $ipAddress`;
$lines=explode("\n", $arp);
#look for the output line describing our IP address
foreach($lines as $line)
{
$cols=preg_split('/\s+/', trim($line));
if ($cols[0]==$ipAddress)
{
$macAddr=$cols[1];
}
}
Что ж, вам не повезло, если вы не можете заставить клиента добровольно передать эту информацию и передать ее другими способами.
MAC-адрес клиента (в смысле компьютера, который выдал HTTP-запрос) перезаписывается каждым маршрутизатором между клиентом и сервером.
Клиентский IP удобно предоставляется сценарию в $_SERVER['REMOTE_ADDR']
, В некоторых сценариях, особенно если ваш веб-сервер находится за прокси-сервером (т.е. прокси-сервер кэширования) $_SERVER['REMOTE ADDR']
вернет IP-адрес полномочие, и будет дополнительная ценность, часто $_SERVER['HTTP_X_FORWARDED_FOR']
, который содержит IP исходного клиента запроса.
Иногда, особенно когда вы имеете дело с анонимным прокси, который вы не контролируете, прокси не возвращает реальный IP-адрес, и все, на что вы можете надеяться, это IP-адрес прокси.
Я не думаю, что вы можете получить MAC-адрес в PHP, но вы можете получить IP от $_SERVER['REMOTE_ADDR']
переменная.
Все, что вам нужно сделать, это положить ARP в другую группу.
По умолчанию:
-rwxr-xr-x 1 root root 48K 2008-11-11 18:11 /usr/sbin/arp*
С командой:
sudo chown root:www-data /usr/sbin/arp
ты получишь:
-rwxr-xr-x 1 root www-data 48K 2008-11-11 18:11 /usr/sbin/arp*
А поскольку apache — это демон, работающий под пользовательскими данными www, теперь он может выполнять эту команду.
Так что если вы сейчас используете скрипт PHP, например:
<?php
$mac = system('arp -an');
echo $mac;
?>
вы получите вывод linux arp -an
команда.
Для Windows Server, я думаю, вы можете использовать это:
<?php
echo exec('getmac');
?>
Используйте этот класс (https://github.com/BlakeGardner/php-mac-address)
Это класс PHP для манипулирования MAC-адресами поверх операционных систем Unix, Linux и Mac OS X. это было прежде всего написано, чтобы помочь со спуфингом для беспроводных аудитов безопасности.
В Windows, если пользователь использует ваш скрипт локально, это будет очень просто:
<?php
// get all the informations about the client's network
$ipconfig = shell_exec ("ipconfig/all"));
// display those informations
echo $ipconfig;
/*
look for the value of "physical adress" and use substr() function to
retrieve the adress from this long string.
here in my case i'm using a french cmd.
you can change the numbers according adress mac position in the string.
*/
echo substr(shell_exec ("ipconfig/all"),1821,18);
?>
Ты можешь получить MAC Адрес или Физический адрес используя этот код
$d = explode('Physical Address. . . . . . . . .',shell_exec ("ipconfig/all"));
$d1 = explode(':',$d[1]);
$d2 = explode(' ',$d1[1]);
return $d2[1];
Я использовал взорваться много раз, потому что shell_exec («ipconfig / all») вернуть полную информацию о всей сети. поэтому вы должны разделить по одному.
когда вы запустите этот код, то вы получите
ваш MAC-адрес 00 — ## — ## — CV-12 // это поддельный адрес только для показа.