blog by ficti0n: Простейший мониторинг портов Cisco (Delphi 7, мои программы)

понедельник, 28 декабря 2015 г.

Простейший мониторинг портов Cisco (Delphi 7, мои программы)

Наверное каждый администратор, сталкиваясь с сетевым оборудованием, задается вопросом о мониторинге. На моей работе так сложилось, что провода не всегда промаркированы и висят огромным "пауком". Да и вообще, я по натуре ленив и бегать, лазить, искать "концы" - это меня напрягает. Есть много различных программ и целых проектов для мониторинга. Но они либо сложно настраиваются, либо слишком громоздки (90% функционала мне не нужно). Мне нужно было получать информацию о включении и отключении портов, об access и voice vlan на портах.
Пример: я послал инженера в серверную и попросил выдернуть из сервера патч. Он дернул - я увидел в какой порт он приходит, какие vlan на нем.
https://yadi.sk/i/jU1fc2pMmZEU3



Теперь к сути и по шагам.
1. Настраиваем community на Cisco (у меня 99% оборудования cisco и поэтому писал под них).
    Я создал комъюнити "mycommun" и разрешил к нему доступ с двух ip адресов.
 configure terminal
snmp-server community mycommun RO 5
snmp-server location MyCity
access-list 5 permit 10.0.0.250
access-list 5 permit 10.0.5.215
end
wri


2. В файлике device.txt добавляем устройства для мониторинга.
 Пример:
10.0.111.55 - Офис 1,  (стек из 7)
10.0.111.60 - Офис 2, 10 каб 


Можно в файл ничего не добавлять и запускать из командной строки:
ciscomon.exe /ip:10.0.111.55

3. Я тестировал на Cisco 3750, так что если oid не совпадают, то можно поковырять файл "OID.txt"

4. Все, запускаем и наблюдаем. Желтым цветом надписей выделяются гигабитные порты.Опрос идет раз в минуту, либо по кнопке "Refresh". Информация падает в Memo и соответственно отображается графически. При наведениии на порт показывается информация о vlan.  Работает со стеками. Рисует графики загрузки CPU, Memory, Temperature.

5. Скачать 

6. Исходники, если кому нужно вышлю на почту. А так вот пример одной из процедуры:

Procedure GetMySNMPinfo(host,commun,oid:string;var SP:TStringList);
   var
      i:integer;
      SNMP:TidSNMP;
begin
   SNMP:=TIdSNMP.Create(Form1);
   SP.Clear;
   SNMP.Community := commun;
   SNMP.Host := host;
   SNMP.Query.Clear;
   SNMP.Query.MIBAdd(OID, '');
   SNMP.Query.PDUType := PDUGetNextRequest;
   //While port162 do
  //  sleep(100);
 //  port162:=true;
   while SNMP.SendQuery do
     begin
       if (Copy(SNMP.Reply.MIBOID[0], 1, Length(OID)) <> OID)  then
         Break;
       for I := 0 to SNMP.Reply.ValueCount - 1 do
        SP.Append(SNMP.Reply.ValueOID[i]+' = '+IntToStr(SNMP.Reply.ValueType[i]) +' : '+ SNMP.Reply.Value[I]);
       SNMP.Query.Clear;
       SNMP.Query.MIBAdd(SNMP.Reply.ValueOID[0], '');
       SNMP.Query.PDUType := PDUGetNextRequest;
     end;
    SNMP.Destroy;
  //  port162:=false;
end;



Комментариев нет:

Отправить комментарий