实际上,如果我直接在shell_exec()
$mac = shell_exec('arp -a 192.168.0.107');
如果,我从他的系统获取客户端的ip并存储在变量中并调用相同的内容,如下所示,
$mac = shell_exec('arp -a' . escapeshellarg($ip));
输出没有生成。
以下是完整代码:
<?php
$ip = $_SERVER['REMOTE_ADDR'];
$mac = shell_exec('arp -a'. escapeshellarg($ip));
//Working fine when sample client IP is provided...
//$mac = shell_exec('arp -a 192.168.0.107');
$findme = "Physical";
$pos = strpos($mac, $findme);
$macp = substr($mac,($pos+42),26);
if(empty($mac))
{
die("No mac address for $ip not found");
}
// having it
echo "mac address for $ip: $macp";
?>
请注意,为什么escapeshellarg($ip)
在shell_exec()
中不起作用。
答案 0 :(得分:3)
shell_exec('arp '.$ip.' | awk \'{print $4}\'');
来自终端的结果
└──arp10.1.10.26 | awk'{print $ 4}'
<强> A4:5E:60:EE:29:19 强>
答案 1 :(得分:1)
这是正确的格式:
$mac=shell_exec("arp -a ".$ip);
或
$mac=shell_exec("arp -a ".escapeshellarg($ip));
(使用escapeshellarg
电话)
答案 2 :(得分:1)
这对我有用......
$ip=$_SERVER['REMOTE_ADDR'];
$mac_string = shell_exec("arp -a $ip");
$mac_array = explode(" ",$mac_string);
$mac = $mac_array[3];
echo($ip." - ".$mac);
答案 3 :(得分:0)
在'arp -a'.escape ...
中的-a之后缺少一个空格所以它变成了arp -a192.168.0.107
答案 4 :(得分:-1)
shell_exec("arp -a ".escapeshellarg($_SERVER['REMOTE_ADDR'])." | grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}'");