157 votes

Comment puis-je obtenir l'adresse MAC et l'adresse IP d'un client connecté en PHP ?

J'ai besoin de connaître le MAC et l'adresse IP des clients connectés, comment puis-je faire cela en PHP ?

0 votes

L'adresse IP de quoi ? Du client qui est connecté ?

2 votes

Adresse du serveur ou d'un visiteur ?

14 votes

Dans quel but voulez-vous l'adresse MAC ? Savez-vous qu'elle peut être modifiée par l'utilisateur ?

207voto

Paul Dixon Points 122033

IP du serveur

Vous pouvez obtenir l'adresse IP du serveur à partir de $_SERVER['SERVER_ADDR'] .

Adresse MAC du serveur

Pour l'adresse MAC, vous pourriez analyser la sortie de netstat -ie sous Linux, ou ipconfig /all dans Windows.

Adresse IP du client

Vous pouvez obtenir l'IP du client à partir de $_SERVER['REMOTE_ADDR']

Adresse MAC du client

L'adresse MAC du client ne sera pas disponible pour vous, sauf dans une circonstance particulière : si le client est sur le même segment ethernet que le serveur.

Donc, si vous construisez une sorte de système basé sur un réseau local et que vos clients sont sur le même segment Ethernet, alors vous pourriez obtenir l'adresse MAC en analysant la sortie de arp -n (linux) ou arp -a (Windows).

Modifier Vous demandez dans les commentaires comment obtenir la sortie d'une commande externe - l'une des façons est d'utiliser des backticks, par exemple

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

Mais que faire si le client n'est pas sur un réseau local ?

Eh bien, vous n'avez pas de chance, à moins que le client ne vous donne volontairement cette information et ne la transmette par d'autres moyens.

3 votes

Comment obtenir la sortie de arp -a en utilisant php ?

1 votes

@paulDixon Bonjour, c'est un vieux post, et je me demande s'il y a un nouveau moyen d'obtenir l'adresse Mac ?

0 votes

@jcho360 Il n'est toujours pas possible d'obtenir l'adresse MAC d'un client. Je ne m'attends pas à ce que cela se produise de toute façon, car l'adresse MAC n'a pas de valeur de communication et ne sera donc pas préservée dans l'en-tête de requête het.

25voto

Pies Points 463

L'adresse MAC d'un client (au sens de l'ordinateur qui a émis la requête HTTP) est écrasée par chaque routeur entre le client et le serveur.

L'IP du client est commodément fourni au script dans $_SERVER['REMOTE_ADDR'] . Dans certains cas, notamment si votre serveur web se trouve derrière un proxy (c'est-à-dire un proxy de mise en cache) $_SERVER['REMOTE ADDR'] renverra l'adresse IP de la proxy et il y aura une valeur supplémentaire, souvent $_SERVER['HTTP_X_FORWARDED_FOR'] qui contient l'adresse IP du client de la demande originale.

Parfois, notamment lorsque vous avez affaire à un proxy anonyme que vous ne contrôlez pas, le proxy ne renvoie pas la véritable adresse IP, et tout ce que vous pouvez espérer est l'adresse IP du proxy.

10voto

Peter G Mac. Points 120

Il ne faut jamais dire jamais :) Vous pouvez faire le lien entre le client et le serveur avec javascript.

Regardez ce lien Recherche de MAC en Javascript

En utilisant le code javascript ci-dessus et en modifiant les autorisations de sécurité. Mettez le résultat dans une variable, et envoyez la valeur MAC par (avec Jquery), Ajax à votre fichier PHP `.

var detected= "00:FF:AB:CC:DD" ;

$.post("MAC-log.php", { id : detected} ) ;

9voto

RaYell Points 26761

Je ne pense pas que vous puissiez obtenir l'adresse MAC en PHP, mais vous pouvez obtenir l'IP à partir de $_SERVER['REMOTE_ADDR'] variable.

0 votes

Vous pouvez obtenir l'adresse MAC, je pense :)

0 votes

L'adresse mac n'est visible que sur les réseaux locaux, vous pouvez accéder à l'adresse mac de n'importe quel appareil en dehors de son réseau local, par exemple votre adresse mac sera stockée et visible dans votre routeur wifi local, et en dehors de celui-ci, tous les appareils de votre réseau utiliseront et communiqueront avec la même adresse IP, que le routeur traduira en adresse mac et enverra en interne.

7voto

McJ Points 41

Tout ce que vous avez à faire est de placer arp dans des groupes différents.

Par défaut :

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

Au commandement :

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

vous obtiendrez :

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

Et comme apache est un démon fonctionnant sous l'utilisateur www-data, il est maintenant capable d'exécuter cette commande.

Donc si vous utilisez maintenant un script PHP, par exemple :

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

vous obtiendrez la sortie de linux arp -an commandement.

7 votes

Cela ne vous donnera que les adresses MAC des appareils de votre réseau local.

1 votes

Changer le groupe de la arp binaire est redondant, www-data a toujours les droits d'exécution du other umode.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X