2014-07-24 20 views
2

其实下面的编码工作正常,如果我直接提供shell_exec()获取网络客户端的MAC地址,使用PHP

$mac = shell_exec('arp -a 192.168.0.107'); 

内部IP地址。如果,我从他的系统,获取客户端的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

你得到答案了吗?如果没有,我可以帮助你。 – ihue

回答

0

的空间只是在“ARP -a'.escape的-a后失踪......

所以它变成ARP -a192.168.0.107

+0

不,我已经删除并添加空间,并尝试了几次,但它不工作。 – Vijay

+0

相应地更新您的答案,因为在您的代码中,缺少一个空格! –

+0

你试过做var_dump(escapeshellarg($ ip)); ? –

1

这是正确的格式:

$mac=shell_exec("arp -a ".$ip); 

$mac=shell_exec("arp -a ".escapeshellarg($ip)); 

(使用escapeshellarg呼叫)

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

shell_exec('arp '.$ip.' | awk \'{print $4}\'');


结果从终端

└──命令arp 10.1.10.26 | AWK '{打印$ 4}'

A4:5E:60:EE:29:19

+0

当人们开始正确使用awk命令时,总会让我微笑! – Wes

-1
shell_exec("arp -a ".escapeshellarg($_SERVER['REMOTE_ADDR'])." | grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}'");