wake-up-neo.net

Wie kann ich den MAC und die IP-Adresse eines verbundenen Clients in PHP erhalten?

Ich muss den MAC und die IP-Adresse der Connect-Clients kennen. Wie kann ich das in PHP tun?

132
Neveen

Server IP

Sie können die Server-IP-Adresse von $_SERVER['SERVER_ADDR'] Erhalten.

Server-MAC-Adresse

Für die MAC-Adresse können Sie die Ausgabe von netstat -ie Unter Linux oder ipconfig /all Unter Windows analysieren.

Client-IP-Adresse

Sie können die Client-IP von $_SERVER['REMOTE_ADDR'] Erhalten.

Client-MAC-Adresse

Die Client-MAC-Adresse steht Ihnen nur unter folgenden Umständen zur Verfügung: , wenn sich der Client im selben Ethernet-Segment wie der Server befindet.

Wenn Sie also ein LAN-basiertes System erstellen und sich Ihre Clients im selben Ethernet-Segment befinden , können Sie die MAC-Adresse durch Analysieren der ermitteln Ausgabe von arp -n (Linux) oder arp -a (Windows).

Bearbeiten: Sie fragen in Kommentaren, wie die Ausgabe eines externen Befehls erfolgen soll. Eine Möglichkeit ist die Verwendung von Backticks, z.

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

Aber was ist, wenn der Client nicht in einem LAN ist?

Nun, Sie haben kein Glück, es sei denn, Sie können den Kunden bitten, diese Informationen freiwillig zur Verfügung zu stellen und sie auf andere Weise zu übermitteln.

177
Paul Dixon

Die MAC-Adresse eines Clients (im Sinne des Computers, der die HTTP-Anforderung ausgegeben hat) wird von jedem Router zwischen dem Client und dem Server überschrieben.

Client-IP wird dem Skript in $_SERVER['REMOTE_ADDR']. In einigen Szenarien, insbesondere wenn sich Ihr Webserver hinter einem Proxy befindet (d. H. Einem Caching-Proxy) $_SERVER['REMOTE ADDR'] gibt die IP des Proxy zurück, und es gibt einen zusätzlichen Wert, häufig $_SERVER['HTTP_X_FORWARDED_FOR'], das die IP des ursprünglichen Anforderungsclients enthält.

Manchmal, besonders wenn Sie es mit einem anonymisierenden Proxy zu tun haben, den Sie nicht kontrollieren, gibt der Proxy nicht die echte IP-Adresse zurück, und Sie können nur auf die IP-Adresse des Proxys hoffen.

22

Ich glaube nicht, dass Sie in PHP eine MAC-Adresse erhalten können, aber Sie können eine IP von $_SERVER['REMOTE_ADDR'] Variable.

8
RaYell

Alles, was Sie tun müssen, ist, arp in verschiedene Gruppen einzuteilen.

Standard:

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

Mit Befehl:

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

sie erhalten:

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

Und da Apache ein Daemon ist, der unter den Benutzer-WWW-Daten ausgeführt wird, kann er diesen Befehl jetzt ausführen.

Wenn Sie jetzt ein PHP Skript verwenden, z. B .:

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

sie erhalten die Ausgabe von Linux arp -an Befehl.

6
McJ

Für Windows Server denke ich, dass Sie dies verwenden können:

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

Verwenden Sie diese Klasse (https://github.com/BlakeGardner/php-mac-address)

Dies ist eine PHP Klasse für die Manipulation von MAC-Adressen auf Unix-, Linux- und Mac OS X-Betriebssystemen. Sie wurde hauptsächlich geschrieben, um beim Spoofing für drahtlose Sicherheitsüberprüfungen zu helfen.

2
Ali

In Windows ist es sehr einfach, wenn der Benutzer Ihr Skript lokal verwendet:

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