我是新手,我做了一些搜索,但大多数答案都有相同的结果: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()
问题。
要查看实际运行的命令以及系统实际返回的内容,请使用exec()
,并分别将int
和array
作为其第2和第3个参数传递给var_dump()
,然后在运行命令后$cmd = "arp -a " . $ip;
$status = 0;
$return = [];
exec($cmd, $return, $status);
var_dump($status, $return);
die;
。
例如:
$status
如果一切顺利,那么$return
应为零,$status
可能是空的,也可能不是。但是,如果$return
非零,那么请注意exec()
的值是什么,因为这将是您的系统在尝试运行命令时告诉您正在发生的事情。
Protip:将arp
传递给#> which arp
/usr/sbin/arp
$cmd = "/usr/sbin/arp -a" . $ip;
的完整路径:
REMOTE_ADDR
另外,请记住,根据命令的运行位置,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;
}
可能不会返回任何有用的内容。还有其他几种获取IP地址的方法,如果您需要的IP地址落后于某种代理,这些方法尤其有用。
我猜我可以把这个脚本更进一步..记住,只适用于你的本地网络。如果不能得到,将返回false。
qazxswpoi