Добрый день!
Кто нибудь сталкивался с такой ситуацией. В нашей организации внутренняя сеть типа X.X.0.0/16. Сеть многоуровневая, есть территориально удаленные резервный и основной вычислительные комплексы.
Оборудования в сети сами понимаете, не мало. Есть задача просканировать все сеть с маской /16 на поиск оборудования. Пока интересует только Cisco.
На всех железках есть SNMP comunity на чтение.
Меня интересует сл. информация. модель, серийный номер, версия IOS. Можно ли такуб информацию получить по SNMP, и какой программой (можно NIX или Windows).
Пробовал NetSNMP, но там не всю инфу мне показывает.
Может кто сталкивался с чем-то подобным.
Конечно все оборудование я знаю где стоит, и есть мониторинг всего с помощью WhatsUP, но тут надо будет заходит в каждое оборудование и выполнять команду sh ver. Кол-во оборудования оставляет желать лучшего!
>[оверквотинг удален]
>с маской /16 на поиск оборудования. Пока интересует только Cisco.
>На всех железках есть SNMP comunity на чтение.
>Меня интересует сл. информация. модель, серийный номер, версия IOS. Можно ли такуб
>информацию получить по SNMP, и какой программой (можно NIX или Windows).
>
>Пробовал NetSNMP, но там не всю инфу мне показывает.
>Может кто сталкивался с чем-то подобным.
>Конечно все оборудование я знаю где стоит, и есть мониторинг всего с
>помощью WhatsUP, но тут надо будет заходит в каждое оборудование и
>выполнять команду sh ver. Кол-во оборудования оставляет желать лучшего!Ситуация возникала. Для решения писался скрипт на перле, который по ssh коннектился к девайсам, собирал нужную инфу и парсил ее. Был еще вариант. Есть пакет, называется rancid. Изначально сделан для бекапирования и фиксирования изменений в конфигах. Там скрипты написаны на Expect. Механизм работы - подключения по ssh к устройству, ввод необходимых комманд и их парсинг. Я точно уже не помню, но эти скрипты вроде тоже удалось приспособить под сбор серийников, моделей и версий.
Так то у меня была такая идея. Выгрузить всю базу с WhatsUP по DNS именам и IP в текстовый файл, потом на перле написать скрипт, который по текстовому файлу пробежит, зайдет в каждое железо по rsh и выполнит команду sh ver. Результат запишет в текстовый файл, например по <днс имя>.txt. Но нам же сисадминам хочется простого решения.
Вот, думал может кто что нить подскажет. А так думаю придется писать скрипт.
Спасибо за совет!
>Так то у меня была такая идея. Выгрузить всю базу с WhatsUP по DNS именам и IP в текстовый файл, потом на перле написать скрипт, который по текстовому файлу пробежит, зайдет в каждое железо по rsh и выполнит команду sh ver. Результат запишет в текстовый файл, например по <днс имя>.txt. Но нам же сисадминам хочется простого решения.
>Вот, думал может кто что нить подскажет. А так думаю придется писать
>скрипт.
>Спасибо за совет!Если нет предубеждения перед пиратским софтом, возьмите SolarWinds Engineer's toolset, там готовое решение.
Спасибо конечно, но я уже на Perl написал скрипт. Если кому надо могу выложить!>>Так то у меня была такая идея. Выгрузить всю базу с WhatsUP по DNS именам и IP в текстовый файл, потом на перле написать скрипт, который по текстовому файлу пробежит, зайдет в каждое железо по rsh и выполнит команду sh ver. Результат запишет в текстовый файл, например по <днс имя>.txt. Но нам же сисадминам хочется простого решения.
>>Вот, думал может кто что нить подскажет. А так думаю придется писать
>>скрипт.
>>Спасибо за совет!
>
>Если нет предубеждения перед пиратским софтом, возьмите SolarWinds Engineer's toolset, там готовое
>решение.
Скрипт такой, правда используется библиотека Net::Telnet. С Net::SSH::Perl есть проблемы, он под виндой не работает, под *nix пожалуйста.
Формат входного файла такой
Название\tDNS имя\tIP address\tТип оборудования\tLocation
Cisco 3745 aaa.cisco.com 192.168.1.1 Router г. Москва
Catalyst 6513 camp01.cisco.com 192.168.0.12 Switch г. МоскваСобственное сам скрипт:
#!c:Perl/bin/perl
use Net::Telnet;
use Net::Ping;
use Term::ReadKey;
#------------------------------------------------
$out_f='result.txt';if ($#ARGV != 0){
die "Usage: net-telnet.pl <input textfile with <tab> delimiter>\n";
}
$inp_f=$ARGV[0];
#----------------------------------------------------------------
open(INP,"<$inp_f") || die "Error opening input file\n";
open(OUT,">$out_f") || die "Error opening output file\n";
#------------------------------------------------
$cmd='sh ver | i Proc';
#Запрос пользователя
print "login as: ";
my $username = ReadLine;
chomp $username;
print 'password: ';
ReadMode 'noecho';
my $password = ReadLine;
ReadMode 'normal';
chomp $password;
print "\r\n";
#------------------------------------------------
while (<INP>) {
($sDisplayName,$sNetworkName,$sNetworkAddress,$sName,$sValue)=split("\t",$_);
$p = Net::Ping->new('icmp');
if ($p->ping($sNetworkAddress,5)){
print "Connecting to $sNetworkName\n";
$conn = new Net::Telnet (Timeout => 5,binmode=>1);
$conn->open($sNetworkAddress);
$conn->waitfor('/Username.*$/');
$conn->print($username);
#print ($conn->get);
$conn->waitfor('/Password.*$/');
$conn->print($password);
#print ($conn->get);
if ($conn){
$conn->print($cmd);
$conn->getline;
$conn->getline;
$conn->getline;
$ser_text=$conn->get;
$ser_text=~/.*?Processor board ID\s([A-Z0-9]+).*/;
$ser=$1;
chop($ser);
print OUT "$sDisplayName\t$sNetworkName\t$sNetworkAddress\t$ser\t$sName\t$sValue";
}
$conn->print('exit');
close $conn;
}
else{
print OUT "$sDisplayName\t$sNetworkName\t$sNetworkAddress\tNO READING\t$sName\t$sValue";
}
$p->close();
}
close(INP);
close(OUT);
Поищите на xgu, там была пара статей по CDP - это как раз то, что вам нужно.
>Поищите на xgu, там была пара статей по CDP - это как
>раз то, что вам нужно.Спасибо, пока нет необходимости. Я уже решил данную задачу.
Кусок от скрипта я выложил где он берет серийные номера оборудования. Есть также готовый скрипт который берет все (серийник, версию ИОСа, наименование оборудования). Только она написана под SUSE 11 (Используется библиотека NET::SSH::Perl)
Также если статья написана для использования протокола CDP, то в моем случае он не поможет, так как на всех железках CDP выключен (служба безопасности не разрешает его включать)!