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

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

Ответ 1

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];
   }
}

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

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

Ответ 2

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

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

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

<?php
$mac = system('arp -an');
echo $mac;
?>

вы получите вывод команды linux arp -an.

Ответ 7

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

<?php
// get all the informations about the client 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); 
?>

Ответ 8

Мы можем получить MAC-адрес в Ubuntu этим способом в php

$ipconfig =   shell_exec ("ifconfig -a | grep -Po 'HWaddr \K.*$'");  
    // display mac address   
 echo $ipconfig;

Ответ 9

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

Ответ 10

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

$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;

Ответ 11

  //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;
    }

Ответ 12

// 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.

Ответ 13

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

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

Ответ 14

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