Я хочу создать свою собственную MIB. Я борюсь с этим пару недель. Я следовал этому руководству и использовал net-snmp 5.7.3 . Что я делаю:
Моя установка: у меня две виртуальные машины, обе
Ubuntu 16
, одна - snmp-server с IP: 192.168.5.20, а другая snmp-agent с IP: 192.168.5.21. Я написал MIB, который компилируется без ошибок ( Эта компиляция выполняется только в агентской системе, а не на сервере ). Я уже сделал это:
root@snmp-agent:# MIBS=+MAJOR-MIB
root@snmp-agent:# MIBS=+DEPENDENT-MIB
root@snmp-agent:# export MIBS
root@snmp-agent:# MIBS=ALL
Мои файлы MIB находятся по этому пути: / usr / share / snmp / mibs
, который является путем поиска по умолчанию. Я уже скомпилировал его и успешно сгенерировал файлы .c и .h с помощью команды: mib2c -c mib2c.int_watch.conf objectName
. Затем настроил snmp так:
root@snmp-agent:# ./configure --with-mib-modules="objectName"
root@snmp-agent:# make
root@snmp-agent:# make install
Все работало нормально. После этого, когда я выполняю (на агенте) snmptranslate
, я получаю вывод как
root@snmp-agent:snmptranslate -IR objectName.0
MAJOR-MIB::objectName.0
И с помощью команды snmptranslate -On objectName.0
я получаю вывод как
root@snmp-agent:# snmptranslate -On MAJOR-MIB::objectName.0
.1.3.6.1.4.1.4331.2.1.0
Итак, я получаю ожидаемые результаты в агентской системе. Теперь моя проблема в том, что я не знаю, как получить те же значения с моего сервера!
Когда я запускаю snmpget
с сервера, я получаю следующую ошибку:
root@snmp-server:# snmpget -v2c -c public 192.168.5.21 MAJOR-MIB::objectName.0
MAJOR-MIB::objectName.0 = No Such Instance currently exists at this OID
Вывод при указании OID:
root@snmp-server:# snmpget -v2c -c public 192.168.5.21 .1.3.6.1.4.1.4331.2.1
SNMPv2-SMI::enterprises.4331.2.1 = No Such Instance currently exists at this OID
Вывод, когда я делаю следующее:
root@snmp-server:# snmpget -v2c -c public 192.168.5.21 sysDescr.0
SNMPv2-MIB::sysDescr.0 = STRING: Linux snmp-agent 4.10.0-33-generic #37~16.04.1-Ubuntu SMP Fri Aug 11 14:07:24 UTC 2017 x86_64
root@snmp-server:# snmpwalk -v2c -c public 192.168.5.21 .1.3.6.1.4.1.4331.2.1
SNMPv2-SMI::enterprises.4331.2.1 = No more variables left in this MIB View (It is past the end of the MIB tree)
Я искал его, но все еще поиск, но не повезло. Что я должен делать? Как мне использовать snmpget
с моего сервера в моих собственных MIB? Я имею в виду что-то вроде того, что я делаю с sysDescr.0
с моего сервера.
Я хочу для этого: snmpget 192.168.5.21 myObjectName.0
и получите значения.
РЕДАКТИРОВАТЬ: Я уже видел эти ответы, но не работает. snmp extension не работает и snmp нет такого объекта ...
ОБНОВЛЕНИЕ 2:
Когда я выполняю snmpwalk
на сервере:
snmp-server:# snmpwalk -v 2c -c ncs -m DISMAN-PING-MIB 192.168.5.21 .1.3.6.1.2.1.80
DISMAN-PING-MIB::pingObjects.0 = INTEGER: 1
DISMAN-PING-MIB::pingFullCompliance.15.46.49.46.51.46.54.46.49.46.50.46.49.46.56.48 = STRING: "/bin/echo"
DISMAN-PING-MIB::pingMinimumCompliance.15.46.49.46.51.46.54.46.49.46.50.46.49.46.56.48 = ""
DISMAN-PING-MIB::pingCompliances.4.15.46.49.46.51.46.54.46.49.46.50.46.49.46.56.48 = ""
DISMAN-PING-MIB::pingCompliances.5.15.46.49.46.51.46.54.46.49.46.50.46.49.46.56.48 = INTEGER: 5
DISMAN-PING-MIB::pingCompliances.6.15.46.49.46.51.46.54.46.49.46.50.46.49.46.56.48 = INTEGER: 1
DISMAN-PING-MIB::pingCompliances.7.15.46.49.46.51.46.54.46.49.46.50.46.49.46.56.48 = INTEGER: 1
DISMAN-PING-MIB::pingCompliances.20.15.46.49.46.51.46.54.46.49.46.50.46.49.46.56.48 = INTEGER: 4
DISMAN-PING-MIB::pingCompliances.21.15.46.49.46.51.46.54.46.49.46.50.46.49.46.56.48 = INTEGER: 1
DISMAN-PING-MIB::pingIcmpEcho.1.15.46.49.46.51.46.54.46.49.46.50.46.49.46.56.48 = ""
DISMAN-PING-MIB::pingIcmpEcho.2.15.46.49.46.51.46.54.46.49.46.50.46.49.46.56.48 = ""
DISMAN-PING-MIB::pingIcmpEcho.3.15.46.49.46.51.46.54.46.49.46.50.46.49.46.56.48 = INTEGER: 1
DISMAN-PING-MIB::pingIcmpEcho.4.15.46.49.46.51.46.54.46.49.46.50.46.49.46.56.48 = INTEGER: 0
DISMAN-PING-MIB::pingMIB.4.1.2.15.46.49.46.51.46.54.46.49.46.50.46.49.46.56.48.1 = ""
Когда я делаю snmpget с pingFullCompliance.15.46.49.46.51.46.54.46.49.46.50.46.49.46.56.48
:
root@snmp-server:# snmpget 192.168.5.21 DISMAN-PING-MIB::pingFullCompliance.15.46.49.46.51.46.54.46.49.46.50.46.49.46.56.48
DISMAN-PING-MIB::pingFullCompliance.15.46.49.46.51.46.54.46.49.46.50.46.49.46.56.48 = Wrong Type (should be INTEGER): STRING: "/bin/echo"
Так где я ошибаюсь? И что такое pingFullCompliance.15.46.49.46.51.46.54.46.49.46.50.46.49.46.56.48 ? Почему такой длинный OID?
Где я ошибаюсь? Может кто-то указать мне верное направление? Любые предложения приветствуются.
У меня была точно такая же проблема, Это не работало с 5.6.2.
Как я это решил:
Я обновился до 5.7.3, затем он начал работать. вам необходимо позаботиться о следующем:
настроить пакет (при сборке) для поддержки agentx) с помощью --with-mib-modules = agentx это моя конфигурация:
./ configure --prefix = / usr --build = i386-linux --host = arm-linux --target = arm-linux --with-ar = arm-arago-linux- gnueabi-ar --with-cc = arm-arago-linux-gnueabi-gcc --with-ld = arm-arago-linux-gnueabi-ld --with-cflags = "- O3 -march = armv7-a -mtune = cortex-a8 -mfpu = neon -mfloat-abi = softfp "--with-endianness = big --with-ldflags = -Bstatic --enable-mini-agent --with-mib-modules =" mibII ip-mib if-mib tcp-mib udp-mib ucd_snmp target agent_mibs notification-log-mib snmpv3mibs notification agentx "--without-openssl --without-perl-modules --disable-embedded-perl --disable-shared --with-default -snmp-version = "2" --with-sys-contact = "root" --with-sys-location = "unknown" --with-logfile = "/ var / log / snmpd.log" --with- постоянный каталог = "/ var / net-snmp" --disable-manuals
добавить agentx в snmpd.conf Это мой главный агент snmpd.config
roсообщество публичное rwсообщество частное
com2sec только для чтения по умолчанию общедоступный
com2sec readwrite по умолчанию частный
запустил snmpd с отладкой, чтобы получить более подробную информацию:
snmpd -f -Lo: -Dagentx
Затем запустите приложение agentx
Следующее руководство также помогло:
http://net-snmp.sourceforge.net/wiki/index.php/TUT:Writing_a_Subagent
Поиск имени в MIB работает нормально, запрос работает нормально, но агент отвечает, что такого объекта не существует. Так что проблема на стороне агента.
Как предполагает @ransh в другом ответе, проблема может быть связана с неправильной настройкой agentx — главному агенту необходимо запросить у вашего субагента запрошенный объект, и для этого ему необходимо сопоставление с OID поддерева. к субагенту.
Для скалярных значений, таких как sysDescr.0
, в таблице есть только одна строка и один столбец, а ключ является фиктивным 0
, но для других объектов необходимо адресовать определенный столбец и строка. Номер столбца фиксирован, как он определен в MIB, но строки не нумеруются, так как они не будут постоянными, и вместо этого будет использоваться уникальный первичный ключ.
Например, таблица маршрутизации IPv4 может содержать произвольное количество записей, но никакие две записи не могут иметь одинаковый адрес назначения и сетевую маску, поэтому это используется в качестве уникального индекса (и первичного ключа) для поиска в таблице, а строка адреса генерируются из них, например
.0.0.0.0.0.0.0.0 the default route (destination 0.0.0.0/0)
.192.168.0.0.255.255.255.0 the internal network (destination 192.168.0.0/24)
DISMAN-PING-MIB
использует здесь в качестве индекса строку, которая кодируется как длина и значение -- сначала длина, чтобы более короткая строка случайно не оказалась префиксом более длинной строки. Вы можете заметить, что первый элемент равен 15, а за ним следуют еще 15 элементов.
Чтобы просмотреть таблицу как таблицу, используйте команду snmptable
.