nombre - ¿Cómo puedo obtener el MAC y la dirección IP de un cliente conectado en PHP?
obtener mac address jquery (10)
Servidor IP
Puede obtener la dirección IP del servidor desde $_SERVER[''SERVER_ADDR'']
.
Dirección MAC del servidor
Para la dirección MAC, puede analizar la salida de netstat -ie
en Linux, o ipconfig /all
en Windows.
Dirección IP del cliente
Puede obtener la IP del cliente desde $_SERVER[''REMOTE_ADDR'']
Dirección MAC del cliente
La dirección MAC del cliente no estará disponible para usted, excepto en una circunstancia especial: si el cliente está en el mismo segmento de ethernet que el servidor.
Entonces, si está construyendo algún tipo de sistema basado en LAN y sus clientes están en el mismo segmento de ethernet, entonces puede obtener la dirección MAC analizando la salida de arp -n
(linux) o arp -a
(windows).
Editar : se pregunta en los comentarios cómo obtener la salida de un comando externo. Una forma es usar los trazos, por ejemplo
$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];
}
}
Pero, ¿y si el cliente no está en una LAN?
Bueno, no tienes suerte a menos que puedas hacer que el cliente ofrezca voluntariamente esa información y la transmita por otros medios.
Necesito saber el MAC y la dirección IP de los clientes de conexión, ¿cómo puedo hacer esto en PHP?
En Windows, si el usuario está usando su script localmente, será muy simple:
<?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);
?>
La dirección MAC de un cliente (en el sentido de la computadora que emitió la solicitud HTTP) es sobrescrita por cada enrutador entre el cliente y el servidor.
Client IP se proporciona convenientemente a la secuencia de comandos en $_SERVER[''REMOTE_ADDR'']
. En algunos escenarios, especialmente si su servidor web está detrás de un proxy (es decir, un proxy de almacenamiento en caché) $_SERVER[''REMOTE ADDR'']
devolverá la IP del proxy , y habrá un valor adicional, a menudo $_SERVER[''HTTP_X_FORWARDED_FOR'']
, que contiene la IP del cliente de solicitud original.
En ocasiones, especialmente cuando se trata de un proxy anónimo que no se controla, el proxy no devuelve la dirección IP real y todo lo que se puede esperar es la dirección IP del proxy.
No creo que puedas obtener la dirección MAC en PHP, pero puedes obtener la variable IP desde $_SERVER[''REMOTE_ADDR'']
.
Para el servidor de Windows, creo que puedes usar esto:
<?php
echo exec(''getmac'');
?>
Puedes hacerlo fácilmente usando openWRT. Si utilizas un portal cautivo, puedes mezclar php y openWRT y establecer una relación entre el IP y el mac.
Puedes escribir un código PHP simple usando:
$localIP = getHostByName(getHostName());
Más tarde, usando openWRT puede ir a /tmp/dhcp.leases
, obtendrá algo con la forma:
e4:a7:a0:29:xx:xx 10.239.3.XXX DESKTOP-XXX
Allí, tienes el mac, la dirección IP y el nombre de host.
Todo lo que necesitas hacer es poner arp en un grupo diferente.
Defecto:
-rwxr-xr-x 1 root root 48K 2008-11-11 18:11 /usr/sbin/arp*
Con comando:
sudo chown root:www-data /usr/sbin/arp
conseguirás:
-rwxr-xr-x 1 root www-data 48K 2008-11-11 18:11 /usr/sbin/arp*
Y como apache es un daemon que se ejecuta bajo el usuario www-data, ahora puede ejecutar este comando.
Entonces, si ahora usa un script PHP, por ejemplo:
<?php
$mac = system(''arp -an'');
echo $mac;
?>
obtendrá la salida de linux arp -an
comando.
bajo linux usando iptables puede registrar en un archivo cada solicitud al servidor web con mac address e ip. desde el último elemento de búsqueda php con dirección IP y obtener la dirección MAC.
Como se indicó, recuerde que la dirección MAC es del último enrutador del seguimiento.
Use esta clase (https://github.com/BlakeGardner/php-mac-address)
Esta es una clase PHP para la manipulación de direcciones MAC sobre los sistemas operativos Unix, Linux y Mac OS X. fue escrito principalmente para ayudar con la suplantación de las auditorías de seguridad inalámbricas.
// 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;
Esto funciona para mí en Windows, ya que ipconfig /all
es el comando del sistema de Windows.