2016-05-20 4 views
0

Ich bin neu, und ich habe einige Suche, aber die meisten der Antworten haben die gleichen Ergebnisse: Die MAC-Adresse ausgegeben wird als "gefunden."Holen MAC-Adresse von Client-Rechner

Mein Code ist unten:

$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); 

Antwort

1

Ah, das alte exec() vs shell_exec() vs passthru() Frage.

sehen, welcher Befehl tatsächlich abgearbeitet wird, und das, was das System tatsächlich Rückkehr verwenden exec(), und es ein int und ein array als 2. und 3. params jeweils passieren, var_dump() sie dann beide nach dem Laufen der Befehl.

Zum Beispiel:

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

Wenn alles in Ordnung geht, dann sollte $status Null und $return können oder nicht leer sein können. Aber wenn $status ist nicht null dann achten Sie darauf, was der Wert von $return ist, wie dies sein wird, was Ihr System sagt Ihnen passiert, wenn es versucht, Ihren Befehl auszuführen.

Protip: Pass exec() der vollständige Pfad-arp as-in:

#> which arp 
/usr/sbin/arp 

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

Auch bedenken Sie, je nachdem, wo der Befehl ausgeführt sein wird, REMOTE_ADDR nützlich zurückkehren kann nichts. Es gibt mehrere andere Möglichkeiten, eine IP-Adresse zu erhalten, die besonders nützlich sind, wenn die IP-Adresse, die Sie benötigen, hinter einer Art Proxy steht.