arp -n | grep $mac

 
0
 
Perl
ava
Demeo | 10.06.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 - то не работает
Если вручную прописываю мак вместо переменной - работает
Ответы (9)
ava
igorold | 10.06.2016, 14:54 #
не пробовали записать в лог значение $mac ?
Какое значение принимает?

А вы когда ручками подставляете значение, вы его кавычками обрамляете?
ava
Demeo | 10.06.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`;
В этом случае все нормально определяется
ava
igorold | 10.06.2016, 16:09 #
Я у себя проверил:


#!/usr/bin/perl
use strict;

my $mac = '00:07:e9:5b:f0:53';
my $cmd = q(awk '{print($1)}' | sed 's/(//' | sed 's/)//');
my $ip_addr = `arp -n | grep $mac | $cmd`;

print $ip_addr."\n";



работает ... 
ava
Demeo | 10.06.2016, 16:43 #
так и у меня работает, вопрос почему из базы не берет?
ava
ginnie | 10.06.2016, 17:50 #
Цитата


так и у меня работает, вопрос почему из базы не берет? 


Покажите ваш

print "arp -n | grep $mac | $cmd";
ava
igorold | 10.06.2016, 19:10 #
Цитата (Demeo @  10.6.2016,  16:43 findReferencedText)
так и у меня работает, вопрос почему из базы не берет?


Ну так покажите, что вы формируете из базы ... вас не учили пользоваться отладкой?
ava
Demeo | 10.06.2016, 19:16 #
Все работает. Как оказалось, в арп-таблице тупо не было этих маков
ava
_zorn_ | 12.06.2016, 10:56 #
Вот только хотел посоветовать в консоле тоже самое набрать smile
ava
saskuu | 07.07.2016, 23:21 #
в свое время стояла аналогичная задача.
выяснил, что для более-менее сети (от 500 компов) искать по файлу /proc/net/arp в десятки! раз быстрее, чем пользоваться командой arp
Зарегистрируйтесь или войдите, чтобы написать.
Фирма дня
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Участники
ava  igorold   _zorn_   ginnie   Demeo   saskuu
advanced
Отправить