Как я могу получить MAC и IP-адрес подключенного клиента в PHP?

Мне нужно знать MAC-адрес и IP-адрес подключенных клиентов, как я могу сделать это в PHP?

126

Решение

IP сервера

Вы можете получить IP-адрес сервера от $_SERVER['SERVER_ADDR'],

MAC-адрес сервера

Для MAC-адреса вы можете проанализировать вывод netstat -ie в Linux или ipconfig /all в винде.

IP-адрес клиента

Вы можете получить IP-адрес клиента от $_SERVER['REMOTE_ADDR']

MAC-адрес клиента

Клиентский 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];
}
}

Но что, если клиент не в локальной сети?

Что ж, вам не повезло, если вы не можете заставить клиента добровольно передать эту информацию и передать ее другими способами.

169

Другие решения

MAC-адрес клиента (в смысле компьютера, который выдал HTTP-запрос) перезаписывается каждым маршрутизатором между клиентом и сервером.

Клиентский IP удобно предоставляется сценарию в $_SERVER['REMOTE_ADDR'], В некоторых сценариях, особенно если ваш веб-сервер находится за прокси-сервером (т.е. прокси-сервер кэширования) $_SERVER['REMOTE ADDR'] вернет IP-адрес полномочие, и будет дополнительная ценность, часто $_SERVER['HTTP_X_FORWARDED_FOR'], который содержит IP исходного клиента запроса.

Иногда, особенно когда вы имеете дело с анонимным прокси, который вы не контролируете, прокси не возвращает реальный IP-адрес, и все, на что вы можете надеяться, это IP-адрес прокси.

22

Я не думаю, что вы можете получить MAC-адрес в PHP, но вы можете получить IP от $_SERVER['REMOTE_ADDR'] переменная.

8

Все, что вам нужно сделать, это положить 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 команда.

6

Для Windows Server, я думаю, вы можете использовать это:

<?php
echo exec('getmac');
?>
6

Используйте этот класс (https://github.com/BlakeGardner/php-mac-address)

Это класс PHP для манипулирования MAC-адресами поверх операционных систем Unix, Linux и Mac OS X. это было прежде всего написано, чтобы помочь со спуфингом для беспроводных аудитов безопасности.

2

В 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);
?>
1

Ты можешь получить 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 // это поддельный адрес только для показа.

-1
По вопросам рекламы [email protected]