Следующее - на MacOS High Sierra с Perl v5.28.2. Версия Net :: MA C :: Vendor - 1.265. Этакий повторяющийся пост. В моем предыдущем посте не хватало подробностей.
Я пытаюсь собрать сценарий для вывода списка IP-адресов, адресов MA C и поставщиков в сети. Функция Net :: MA C :: Vendor :: lookup, помимо прочего, возвращает ошибку тайм-аута. Я проверил несколько ссылок IEEE, которые должны были содержать данные OUI, но все они не возвращают никаких данных. Я видел несколько упоминаний о том, что этот файл можно найти в некоторых установках linux. Я выполняю поиск по всему миру и не нашел файла oui.txt в своей системе. Если бы я загрузил копию, я бы не знал, куда ее положить или как я мог бы воспользоваться функцией Net :: MA C :: Vendor, чтобы ее найти. Кроме того, если бы я нашел ссылку, я бы все равно не знал, как указать функцию поиска поставщика для ее использования.
Я получаю следующие ошибки:
Использование неинициализированного значения в конкатенации (.) или строку в /Users/{username}/perl5/perlbrew/perls/perl-5.28.2/lib/site_perl/5.28.2/Net/MAC/Vendor.pm, строка 320. Не удалось получить [ https://services13.ieee.org/RST/standards-ra-web/rest/assignments/download/?registry=MA-L&format=html&text=D8-D7-75] Сообщение о состоянии HTTP [] [Тайм-аут подключения] в строке 23 simplemacvendor.pl. Не удалось получить данные из IEEE! на simplemacvendor.pl строка 23.
The sample code:
#!/usr/bin/perl;
use strict;
use feature qw(say);
use Data::Dumper qw(Dumper);
use Net::MAC::Vendor;
open(ARP, "arp -na|") || die "Failed $!\n";
my @arp_table;
while (<ARP>) {
if ($_ =~ m/incomplet/) {next;}
if ($_ =~ m/Address/) {next;}
my @line = split(' ',$_);
my $computer = {};
$line[1] =~ s/(\()([0-9\.]*)(\))/\2/;
$computer->{ip} = $line[1];
$computer->{mac} = $line[3];
$computer->{if} = $line[5];
say Dumper($computer);
# Get vendor info
my $vendor_info = Net::MAC::Vendor::lookup( $computer->{mac} ); # line 23
$computer->{vendor} = $vendor_info->[0];
push @arp_table , $computer;
}
print "ARP Table with vendors:\n";
for my $i (0 .. $#arp_table) {
print "$arp_table[$i]{ip}\t";
print "$arp_table[$i]{if}\t";
print "$arp_table[$i]{mac}\t";
print "$arp_table[$i]{vendor}";
print "\n";
}