从客户端机器获取 MAC 地址

Get MAC address from client's machine

我是新手,我做了一些搜索,但大多数答案都有相同的结果:MAC 地址输出显示为 "Found."

我的代码如下:

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

啊,老问题exec() vs shell_exec() vs passthru()

查看实际上是什么命令运行,以及实际上return是什么系统,使用 exec(),并分别将 intarray 作为其第二个和第三个参数传递给它,然后在 运行 命令后将它们 var_dump() 都传递给它们。

例如:

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

如果一切顺利,那么 $status 应该为零,$return 可能为空也可能不为空。但是,如果 $status 非零 那么请注意 $return 的值是什么,因为这将是您的系统告诉您发生的事情尝试 运行 你的命令。

提示:将 exec() 完整路径 传递给 arp,如:

#> which arp
/usr/sbin/arp

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

此外,请记住,根据命令所在的位置 运行,REMOTE_ADDR 可能 return 没有任何用处。还有其他几种获取 IP 地址的方法,如果您需要的 IP 地址位于某种代理之后,这些方法特别有用。

我猜我可以将此脚本更进一步.. 请记住,仅适用于您的本地网络。如果无法获取,将 return false。

function GetMAC() { 
    $cmd = "arp -a " . $_SERVER["REMOTE_ADDR"]; 
    $status = 0; 
    $return = []; 
    exec($cmd, $return, $status); 
    if(isset($return[3])) return strtoupper(str_replace("-",":",substr($return[3],24,17))); 
    return false; 
}