2016-05-20 3 views
0

Je suis nouveau dans ce domaine, et j'ai fait quelques recherches, mais la plupart des réponses ont les mêmes résultats: la sortie de l'adresse MAC est montrée comme "Trouvé".Récupère l'adresse MAC de la machine du client

Mon code est ci-dessous:

$ip = $_SERVER['REMOTE_ADDR']; 
$mac=shell_exec("arp -a ".$ip); 
$mac_string = shell_exec("arp -a $ip"); 
$mac_array = explode(" ",$mac_string); 
$mac = $mac_array[3]; 

if(empty($mac)) { 
    die("No mac address for $ip not found"); 
} 

echo($ip." - ".$mac); 

Répondre

1

Ah, le vieux exec() vs vs shell_exec()passthru() question.

Pour voir ce que la commande est en fait en cours d'exécution, et ce que le système est en fait retour, utilisez exec(), et le faire passer une int et un array comme ses 2e et 3e params respectivement, puis les var_dump() à la fois après l'exécution la commande.

Par exemple:

$cmd = "arp -a " . $ip; 
$status = 0; 
$return = []; 
exec($cmd, $return, $status); 
var_dump($status, $return); 
die; 

Si tout est bien passé, alors $status doit être nul et $return peut ou ne peut pas être vide. Cependant, si $status est non nul alors faites attention à la valeur de $return, car ce sera ce que votre système vous dit quand il essaie d'exécuter votre commande.

Protip: Pass exec() le chemin complet-arp comme dans:

#> which arp 
/usr/sbin/arp 

$cmd = "/usr/sbin/arp -a" . $ip; 

Aussi, gardez à l'esprit, selon l'endroit où la commande est en cours d'exécution, REMOTE_ADDR ne peut pas retourner quelque chose d'utile. Il existe plusieurs autres façons d'obtenir une adresse IP, qui sont particulièrement utiles si l'adresse IP dont vous avez besoin est derrière une sorte de proxy.