Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Perl: Системное программирование > arp -n | grep $mac |
Автор: Demeo 10.6.2016, 14:08 |
Доброго дня. Есть кусок кода, который вытягивает мак-адрес из базы, и по нему грепает IP-адрес из таблицы ARP $sql="SELECT users.id,users.name,login.mac FROM users,login WHERE users.id = ".$Mid." AND login.mid = ".$Mid." AND login.act = 47$ $sth=&sql($dbh,$sql); while($p=$sth->fetchrow_hashref){ $mac = $p->{'mac'}; $cmd = q(awk '{print($1)}' | sed 's/(//' | sed 's/)//'); $ip_addr = `arp -n | grep $mac | $cmd`; $OUT.=" <tr> <td align=\"left\" width=\"200\"><b>".&Filtr_out($p->{'name'})."</b> (".&Filtr_out($p->{mac}).")</td> <td align=\"left\" width=\"200\"><b>".&Filtr_out($p->{'name'})."</b> (".$ip_addr.")</td> Если в строке строке $ip_addr = `arp -n | grep $mac | $cmd`; стоит $mac - то не работает Если вручную прописываю мак вместо переменной - работает |
Автор: igorold 10.6.2016, 14:54 |
не пробовали записать в лог значение $mac ? Какое значение принимает? А вы когда ручками подставляете значение, вы его кавычками обрамляете? Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/arp-n-grep-yemac-id575a9fcfae201511758b4567#findElement_E7045_575aaa5cae2015a3788b597a_0 |
Автор: Demeo 10.6.2016, 15:07 |
Принимает значение вида 00:00:00:00:00:00 Если в строку <td align=\"left\" width=\"200\"><b>".&Filtr_out($p->{'name'})."</b> (".$ip_addr.")</td> вместо $ip_addr подставить $mac - то мак отображается корректно Нет, кавычками не обрамляю - $ip_addr = `arp -n | grep 11:11:11:11:11:11 | $cmd`; В этом случае все нормально определяется |
Автор: igorold 10.6.2016, 16:09 | ||
Я у себя проверил:
работает ... |
Автор: Demeo 10.6.2016, 16:43 |
так и у меня работает, вопрос почему из базы не берет? |
Автор: ginnie 10.6.2016, 17:50 | ||||
Покажите ваш
|
Автор: igorold 10.6.2016, 19:10 |
Ну так покажите, что вы формируете из базы ... вас не учили пользоваться отладкой? |
Автор: Demeo 10.6.2016, 19:16 |
Все работает. Как оказалось, в арп-таблице тупо не было этих маков |
Автор: _zorn_ 12.6.2016, 10:56 |
Вот только хотел посоветовать в консоле тоже самое набрать ![]() |
Автор: saskuu 7.7.2016, 23:21 |
в свое время стояла аналогичная задача. выяснил, что для более-менее сети (от 500 компов) искать по файлу /proc/net/arp в десятки! раз быстрее, чем пользоваться командой arp |