Я новичок в этом, и я провел поиск, но большинство ответов имеют те же результаты: вывод MAC-адреса отображается как «Найдено».
Мой код ниже:
$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()
против shell_exec()
против 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
Это то, что ваша система сообщает вам, когда она пытается выполнить вашу команду.
Protip: Pass exec()
полный путь в arp
как в:
#> which arp
/usr/sbin/arp
$cmd = "/usr/sbin/arp -a" . $ip;
Кроме того, имейте в виду, в зависимости от того, где команда запускается, REMOTE_ADDR
может не вернуть ничего полезного. Есть несколько других способов получения IP-адреса, которые особенно полезны, если нужный вам IP-адрес находится за каким-то прокси-сервером.
Других решений пока нет …