версия 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
тоесть либо пустую строку, либо в неверной кодировке, а значит будет пустой.
экспериментирую дальше.
Правильный OID для SNMPGet будет .1.3.6.1.2.1.1.5.0 - instance забыли.
Quote from: Victor Kirhenshtein on August 31, 2012, 08:06:15 PM
Правильный OID для SNMPGet будет .1.3.6.1.2.1.1.5.0 - instance забыли.
хм, возможно, сейчас база данных провериться и опробую
Ну и наверное проще использовать SNMPGetValue вместо SNMPGet. SNMPGet слишком низкоуровневый - он просто дает ответный SNMP varbind - а это происходит и в том случае, если запрашиваемый OID не существует. Просто поле type в этом случае будет равно 0x80 (NO SUCH OBJECT) или 0x81 (NO SUCH INSTANCE).
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);
}
}
}может пригодится кому.