SNMPGet

Started by SKYnv, August 31, 2012, 07:25:28 PM

Previous topic - Next topic

SKYnv


версия netxms 1.2.3-rc4
платформа freebsd
собрано c --enable-unicode

Скрипт

sub main()
{
    transport = CreateSNMPTransport(FindObject("192.168.1.122"));
      if (transport == null)
         return -1;
           
       oid = ".1.3.6.1.2.1.1.5";  // sysname
         sysname = SNMPGet(transport, oid);
           if (sysname == null)
              return -2;
           else
           
           println(sysname->value);
           println(sysname->name);
}


возвращает



Quote
netxmsd: exec TestSNMP

.1.3.6.1.2.1.1.5
INFO: Script finished with rc=0
тоесть либо пустую строку, либо в неверной кодировке, а значит будет пустой.

экспериментирую дальше.

Victor Kirhenshtein

Правильный OID для SNMPGet будет .1.3.6.1.2.1.1.5.0 - instance забыли.

SKYnv

Quote from: Victor Kirhenshtein on August 31, 2012, 08:06:15 PM
Правильный OID для SNMPGet будет .1.3.6.1.2.1.1.5.0 - instance забыли.
хм, возможно, сейчас база данных провериться и опробую

Victor Kirhenshtein

Ну и наверное проще использовать SNMPGetValue вместо SNMPGet. SNMPGet слишком низкоуровневый - он просто дает ответный SNMP varbind - а это происходит и в том случае, если запрашиваемый OID не существует. Просто поле type в этом случае будет равно 0x80 (NO SUCH OBJECT) или 0x81 (NO SUCH INSTANCE).

SKYnv

Quote from: Victor Kirhenshtein on August 31, 2012, 08:15:17 PM
Ну и наверное проще использовать SNMPGetValue вместо SNMPGet. SNMPGet слишком низкоуровневый - он просто дает ответный SNMP varbind - а это происходит и в том случае, если запрашиваемый OID не существует. Просто поле type в этом случае будет равно 0x80 (NO SUCH OBJECT) или 0x81 (NO SUCH INSTANCE).
угу точно, задергался инстанс забыл

скрипт для переименования всех нод на данные с конкретного оида.
EnumerateNodes(FindObject(1));

sub EnumerateNodes(rootObject)
{
    foreach(o : GetObjectChildren(rootObject))
    {
        if (classof(o) == "Node")
        {
            transport = CreateSNMPTransport(o);
      if (transport == null)
         return -1;
           
       oid = ".1.3.6.1.2.1.1.5.0";  // sysname
         sysname = SNMPGetValue(transport, oid);
           if (sysname == null)
              return -2;
           else
               RenameObject(o, o->ipAddr);
               println("Object renamed to ".sysname);
        }
        else if (classof(o) == "NetObj")
        {
            EnumerateNodes(o);
        }
    }
}



скрипт на переименование всех нод на их Ip

EnumerateNodes(FindObject(1));

sub EnumerateNodes(rootObject)
{
    foreach(node : GetObjectChildren(rootObject))
    {
        if (classof(node) == "Node")
        {
               RenameObject(node, node->ipAddr);
               println("Object renamed to ".node->ipAddr);
        }
        else if (classof(node) == "NetObj")
        {
            EnumerateNodes(node);
        }
    }
}


может пригодится кому.