Intereting Posts

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

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

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 (windows).

Редактировать : вы спрашиваете в комментариях, как получить выход внешней команды – одним из способов является использование обратных ссылок, например

 $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['HTTP_X_FORWARDED_FOR'] прокси), $_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 я думаю, что вы можете использовать это:

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

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

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

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

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

под linux с помощью iptables вы можете записывать в файл каждый запрос на веб-сервер с адресом mac и ip. от php искать последний элемент с IP-адресом и получить MAC-адрес.

Как указано, помните, что адрес mac находится от последнего маршрутизатора на трассе.

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

  //get user real ip function kh_getUserIP(){ $client = @$_SERVER['HTTP_CLIENT_IP']; $forward = @$_SERVER['HTTP_X_FORWARDED_FOR']; $remote = $_SERVER['REMOTE_ADDR']; if(filter_var($client, FILTER_VALIDATE_IP)){ $ip = $client; }elseif(filter_var($forward, FILTER_VALIDATE_IP)){ $ip = $forward; }else{ $ip = $remote; } return $ip; } 
 // 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.