Ich muss den MAC und die IP-Adresse der Verbindungsclients kennen. Wie kann ich das in PHP tun?
Ich muss den MAC und die IP-Adresse der Verbindungsclients kennen. Wie kann ich das in PHP tun?
Antworten:
Sie können die Server-IP-Adresse von erhalten $_SERVER['SERVER_ADDR']
.
Für die MAC-Adresse können Sie die Ausgabe unter netstat -ie
Linux oder ipconfig /all
Windows analysieren .
Sie können die Client-IP von erhalten $_SERVER['REMOTE_ADDR']
Die Client-MAC-Adresse steht Ihnen nur unter bestimmten Umständen zur Verfügung: Wenn sich der Client im selben Ethernet-Segment wie der Server befindet.
Wenn Sie also eine Art LAN-basiertes System erstellen und Ihre Clients sich im selben Ethernet-Segment befinden, können Sie die MAC-Adresse erhalten, indem Sie die Ausgabe von arp -n
(Linux) oder arp -a
(Windows) analysieren .
Bearbeiten : Sie fragen in Kommentaren, wie Sie die Ausgabe eines externen Befehls erhalten. Eine Möglichkeit besteht darin, Backticks zu verwenden, 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];
}
}
Nun, Sie haben kein Glück, es sei denn, Sie können den Kunden diese Informationen freiwillig zur Verfügung stellen und auf andere Weise übermitteln lassen.
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.
Die Client-IP wird dem Skript in bequem zur Verfügung gestellt $_SERVER['REMOTE_ADDR']
. In einigen Szenarien, insbesondere wenn sich Ihr Webserver hinter einem Proxy befindet (dh einem Caching-Proxy), $_SERVER['REMOTE ADDR']
wird die IP des Proxys zurückgegeben , und es gibt häufig einen zusätzlichen Wert, der $_SERVER['HTTP_X_FORWARDED_FOR']
die IP des ursprünglichen Anforderungsclients enthält.
Manchmal, insbesondere wenn Sie mit einem anonymisierenden Proxy arbeiten, den Sie nicht kontrollieren, gibt der Proxy nicht die tatsächliche IP-Adresse zurück, und Sie können nur auf die IP-Adresse des Proxys hoffen.
Ich glaube nicht, dass Sie MAC-Adresse in PHP erhalten können, aber Sie können IP von $_SERVER['REMOTE_ADDR']
Variable erhalten.
Für Windows Server denke ich, dass Sie dies verwenden können:
<?php
echo exec('getmac');
?>
exec
nur `echogetmac
Alles was Sie tun müssen, ist arp in eine andere Gruppe 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 dem Benutzer www-data ausgeführt wird, kann er diesen Befehl jetzt ausführen.
Wenn Sie jetzt ein PHP-Skript verwenden, z.
<?php
$mac = system('arp -an');
echo $mac;
?>
Sie erhalten die Ausgabe des Linux- arp -an
Befehls.
arp
Binärdatei ist redundant und www-data
verfügt weiterhin über Ausführungsberechtigungen von der other
Umode.
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. Es wurde hauptsächlich geschrieben, um beim Spoofing für drahtlose Sicherheitsüberprüfungen zu helfen.
Wenn der Benutzer in Windows Ihr Skript lokal verwendet, ist dies sehr einfach:
<?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);
?>
Sie können die folgende Lösung verwenden, um Ihr Problem zu lösen:
$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;
Abrufen der MAC-Adresse mithilfe von PHP: (Getestet in Ubuntu 18.04) - Update 2020
Hier ist der Code:
<?php
$mac = shell_exec("ip link | awk '{print $2}'");
preg_match_all('/([a-z0-9]+):\s+((?:[0-9a-f]{2}:){5}[0-9a-f]{2})/i', $mac, $matches);
$output = array_combine($matches[1], $matches[2]);
$mac_address_values = json_encode($output, JSON_PRETTY_PRINT);
echo $mac_address_values
?>
Ausgabe:
{
"lo": "00:00:00:00:00:00",
"enp0s25": "00:21:cc:d4:2a:23",
"wlp3s0": "84:3a:4b:03:3c:3a",
"wwp0s20u4": "7a:e3:2a:de:66:09"
}
Möglicherweise ist das Abrufen der Mac-Adresse nicht der beste Ansatz, um den Computer eines Clients über das Internet zu überprüfen. Verwenden Sie stattdessen ein Token, das durch die Anmeldung eines Administrators im Browser des Clients gespeichert wird.
Daher kann der Client dieses Token nur haben, wenn der Administrator es ihm über seinen Browser gewährt. Wenn das Token nicht vorhanden oder gültig ist, ist der Computer des Clients ungültig.
Mit diesem Code können Sie die MAC- Adresse oder die physische Adresse abrufen
$d = explode('Physical Address. . . . . . . . .',shell_exec ("ipconfig/all"));
$d1 = explode(':',$d[1]);
$d2 = explode(' ',$d1[1]);
return $d2[1];
Ich habe explode oft verwendet, weil shell_exec ("ipconfig / all") vollständige Details des gesamten Netzwerks zurückgibt . Sie müssen also eins nach dem anderen teilen. Wenn Sie diesen Code ausführen, erhalten Sie
Ihre MAC-Adresse 00 - ## - ## - CV-12 // Dies ist eine gefälschte Adresse, die nur angezeigt werden soll.
// 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;
Dies funktioniert für mich unter Windows, ebenso ipconfig /all
wie der Windows-Systembefehl.
Unter Linux mit iptables können Sie jede Anfrage an einen Webserver mit Mac-Adresse und IP in einer Datei protokollieren. von PHP Lookup letzten Artikel mit IP-Adresse und Mac-Adresse erhalten.
Denken Sie daran, dass die Mac-Adresse vom letzten Router in der Ablaufverfolgung stammt.
Sie können dies einfach mit openWRT tun. Wenn Sie ein Captive-Portal verwenden, können Sie PHP und OpenWRT mischen und eine Beziehung zwischen der IP und dem Mac herstellen.
Sie können einen einfachen PHP-Code schreiben mit:
$localIP = getHostByName(getHostName());
Wenn Sie später openWRT verwenden /tmp/dhcp.leases
, erhalten Sie etwas mit dem Formular:
e4:a7:a0:29:xx:xx 10.239.3.XXX DESKTOP-XXX
Dort haben Sie den Mac, die IP-Adresse und den Hostnamen.