Он возвращает список, подобный массиву.
Вы делаете этот массив как пример
var el = getElementsByClassName("elem");
el = Array.prototype.slice.call(el); //this line
el[0].appendChild(otherElem);
Используйте этот класс (https://github.com/BlakeGardner/php-mac-address)
Это класс PHP для обработки MAC-адресов поверх Unix , Linux и Mac OS X. это было написано в первую очередь, чтобы помочь с подделкой для проверок беспроводной безопасности.
Вы можете сделать это легко, используя 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-адрес и имя хоста.
Вы можете использовать следующее решение для решения своей проблемы:
$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;
// Turn on output buffering
ob_start();
//Get the ipconfig details using system commond
system('ipconfig /all');
// Capture the output into a variable
$mycomsys=ob_get_contents();
// Clean (erase) the output buffer
ob_clean();
$find_mac = "Physical";
//find the "Physical" & Find the position of Physical text
$pmac = strpos($mycomsys, $find_mac);
// Get Physical Address
$macaddress=substr($mycomsys,($pmac+36),17);
//Display Mac Address
echo $macaddress;
Это работает для меня в Windows, так как ipconfig /all
является системной командой Windows.
MAC-адрес клиента (в смысле компьютера, выдавшего HTTP-запрос) перезаписывается каждым маршрутизатором между клиентом и сервером.
Клиентский IP-адрес обычно предоставляется сценарию в $_SERVER['REMOTE_ADDR']
. В некоторых сценариях, особенно если ваш веб-сервер находится за прокси-сервером (т. Е. Прокси-сервер кэширования), $_SERVER['REMOTE ADDR']
вернет IP-адрес прокси-сервера , и будет добавлено дополнительное значение, часто $_SERVER['HTTP_X_FORWARDED_FOR']
, который содержит IP исходного клиента запроса.
Иногда, особенно когда вы имеете дело с анонимным прокси, который вы не контролируете, прокси не вернет реальный IP-адрес, и все, на что вы можете надеяться, это IP-адрес прокси-сервера .
В окнах, если пользователь использует ваш скрипт локально, это будет очень просто:
<?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 // это поддельный адрес только для показа.
Вы можете получить IP-адрес сервера с $_SERVER['SERVER_ADDR']
.
Для MAC-адреса вы можете анализировать вывод netstat -ie
в Linux или ipconfig /all
в Windows.
Вы можете получить 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-адрес в PHP, но вы можете получить IP из переменной $_SERVER['REMOTE_ADDR']
.
Для сервера Windows я думаю, что вы можете использовать это:
<?php
echo exec('getmac');
?>
exec
только `echo getmac
– SaidbakR
18 April 2017 в 00:12
под linux с помощью iptables вы можете записывать в файл каждый запрос на веб-сервер с адресом mac и ip. от php lookup last item с ip-адресом и получить адрес mac.
Как указано, помните, что адрес mac от последнего маршрутизатора на трассе.
Все, что вам нужно сделать, это поместить 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
.
arp
является избыточным, www-data
все еще имеет разрешения на выполнение из other
umode.
– deed02392
6 March 2014 в 15:36