Perl, ARP, BASH SHELL, AWK и регулярные выражения
+7 (495) 556-2804, +7 (916) 237-8022
info@tchelp.ru

Perl, ARP, BASH SHELL, AWK и регулярные выражения

Появилась задачка — в локальной сети по IP-адресу узнать MAC-адрес клиента и обратная — по MAC-адресу узнать IP-адрес, при этом MAC-адрес поступает из вышестоящей системы без двоеточий в формате aabbccddeeff…
#Исходный MAC-адрес
my $mac = ‘0015657f9fd3′;

#Приведём в нормальный формат aa:bb:cc:dd:ee:ff
my $mac2 = $mac;
$mac2 =~ s/[\da-fA-F]{2}(?!$)/$&:/gs;

#Вернём формат в исходный
my $mac3 = $mac2;
$mac3 =~ s/\://gs;

#Попробуем найти MAC-адрес в таблице ARP (если где и есть IP-адрес клиента, то в ARP-таблице на текущем сервере — условие в задаче)
my $ip = `/usr/sbin/arp -n | grep \»$mac2\» | awk -F ‘ ‘ ‘{print \$1}’`

Если DHCP-сервер доступен, то можно спросить у него:
my $ip$ = `cat /var/lib/dhcp/dhcpd.leases | grep -E «lease|hardware ethernet» | sed ‘N;s/\n//’ | awk -F ‘ ‘ ‘{print $2,$6}’ | awk -F ‘;’ ‘{print $1}’ | grep «$1″ | awk -F ‘ ‘ ‘{print $1}’`

Согласен, что использовать SHELL в PERL — пошло, но задействовать ради такой мелочи CPAN-модули — не рационально.