获取网络客户端MAC地址,使用PhP进行语法问题

时间:2014-07-24 08:52:35

标签: php networking syntax mac-address shell-exec

实际上,如果我直接在shell_exec()

内提供IP地址,下面的编码工作正常
$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()中不起作用。

5 个答案:

答案 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}'");