Как получить доступ к MAC-адресу с помощью php? [Дубликат]

Вот еще один неинтуитивный способ. Красота - вы можете циклически перебирать несколько значений, а не только две [0,1]

Для двух значений (переключение)

>>> x=[1,0]
>>> toggle=x[toggle]

Для нескольких значений (скажем, 4)

>>> x=[1,2,3,0]
>>> toggle=x[toggle]

Я не ожидал, что это решение будет почти самым быстрым

>>> stmt1="""
toggle=0
for i in xrange(0,100):
    toggle = 1 if toggle == 0 else 0
"""
>>> stmt2="""
x=[1,0]
toggle=0
for i in xrange(0,100):
    toggle=x[toggle]
"""
>>> t1=timeit.Timer(stmt=stmt1)
>>> t2=timeit.Timer(stmt=stmt2)
>>> print "%.2f usec/pass" % (1000000 * t1.timeit(number=100000)/100000)
7.07 usec/pass
>>> print "%.2f usec/pass" % (1000000 * t2.timeit(number=100000)/100000)
6.19 usec/pass
stmt3="""
toggle = False
for i in xrange(0,100):
    toggle = (not toggle) & 1
"""
>>> t3=timeit.Timer(stmt=stmt3)
>>> print "%.2f usec/pass" % (1000000 * t3.timeit(number=100000)/100000)
9.84 usec/pass
>>> stmt4="""
x=0
for i in xrange(0,100):
    x=x-1
"""
>>> t4=timeit.Timer(stmt=stmt4)
>>> print "%.2f usec/pass" % (1000000 * t4.timeit(number=100000)/100000)
6.32 usec/pass
117
задан hakre 18 May 2012 в 23:07
поделиться

12 ответов

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

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

1
ответ дан Ali 27 August 2018 в 04:24
поделиться

Вы можете сделать это легко, используя openWRT. Если вы используете скрытый портал, вы можете смешивать php и openWRT и устанавливать связь между IP и маком.

Вы можете написать простой PHP-код, используя:

 $localIP = getHostByName(getHostName()); 

Позже , используя openWRT, вы можете перейти к /tmp/dhcp.leases, вы получите что-то с формой:

 e4:a7:a0:29:xx:xx 10.239.3.XXX DESKTOP-XXX 

Там у вас есть mac, IP-адрес и имя хоста.

-2
ответ дан Bernat Pedrol Vozmediano 27 August 2018 в 04:24
поделиться

Вы можете использовать следующее решение для решения своей проблемы:

$mac='UNKNOWN';
foreach(explode("\n",str_replace(' ','',trim(`getmac`,"\n"))) as $i)
if(strpos($i,'Tcpip')>-1){$mac=substr($i,0,17);break;}
echo $mac;
0
ответ дан Grant Miller 27 August 2018 в 04:24
поделиться
-3
ответ дан Kevin Guan 27 August 2018 в 04:24
поделиться

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

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

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

21
ответ дан Michał T 27 August 2018 в 04:24
поделиться

В окнах, если пользователь использует ваш скрипт локально, это будет очень просто:

<?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
ответ дан Mirtov 27 August 2018 в 04:24
поделиться

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

0
ответ дан Pankaj Kumar 27 August 2018 в 04:24
поделиться

Сервер IP

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

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

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

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

Но что, если клиент не включен LAN?

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

156
ответ дан Paul Dixon 27 August 2018 в 04:24
поделиться

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

8
ответ дан RaYell 27 August 2018 в 04:24
поделиться
6
ответ дан Simos 27 August 2018 в 04:24
поделиться
-2
ответ дан TexWiller 27 August 2018 в 04:24
поделиться

Все, что вам нужно сделать, это поместить arp в другую группу.

По умолчанию:

-rwxr-xr-x 1 root root 48K 2008-11-11 18:11 /usr/sbin/arp*

С командой:

sudo chown root:www-data /usr/sbin/arp

вы будете get:

-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
ответ дан user527987 27 August 2018 в 04:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: