Getting Network Client MAC address, Syntax issue u

2019-03-22 04:41发布

Actually the below coding is working fine, if I provide the ip address directly inside the shell_exec()

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

If, I get the ip of the client from his system and stored in a variable and call the same, as given below,

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

The output is not generating.

Here is the Full code:

<?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";

?>

Please advise, why escapeshellarg($ip) does not work in the shell_exec().

5条回答
淡お忘
2楼-- · 2019-03-22 05:04

This is the correct format:

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

or

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

(using the escapeshellarg call)

查看更多
放我归山
3楼-- · 2019-03-22 05:07

This is working for me...

$ip=$_SERVER['REMOTE_ADDR'];
$mac_string = shell_exec("arp -a $ip");
$mac_array = explode(" ",$mac_string);
$mac = $mac_array[3];
echo($ip." - ".$mac);
查看更多
唯我独甜
4楼-- · 2019-03-22 05:09

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


Result from Terminal

└── arp 10.1.10.26 | awk '{print $4}'

a4:5e:60:ee:29:19

查看更多
萌系小妹纸
5楼-- · 2019-03-22 05:14

A space is missing just after the -a in 'arp -a'.escape...

So it turns into arp -a192.168.0.107

查看更多
【Aperson】
6楼-- · 2019-03-22 05:25
shell_exec("arp -a ".escapeshellarg($_SERVER['REMOTE_ADDR'])." | grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}'");
查看更多
登录 后发表回答