从客户端机器获取 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()
,并分别将 int
和 array
作为其第二个和第三个参数传递给它,然后在 运行 命令后将它们 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;
}
我是新手,我做了一些搜索,但大多数答案都有相同的结果: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()
,并分别将 int
和 array
作为其第二个和第三个参数传递给它,然后在 运行 命令后将它们 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;
}