什么是正确的snmptrap命令格式?

Kir*_*han 5 snmp net-snmp

以下哪项是snmptrap(net-snmp)命令的正确格式?

snmptrap -v 2c -c public host "" NET-SNMP-EXAMPLES-MIB::netSnmpExampleHeartbeatNotification \
       netSnmpExampleHeartbeatRate i 123456
Run Code Online (Sandbox Code Playgroud)

即,在变量绑定中是否带有".0"

实际上这两种格式都有效,但哪一种是正确的还是有什么区别?

k1e*_*ran 8

这取决于陷阱中是否引用了"标量"或"表行"相关的varbinds.

http://www.net-snmp.org/wiki/index.php/TUT:snmptrap说明:

请注意,此命令还包括VARIABLES子句中列出的varbinds的(OID,类型,值)三元组(与snmpset命令的方式相同).

表行示例.

snmptrap -v 2c -c public host:162 .1.3.6.1.6.3.1.1.5.3 .1.3.6.1.6.3.1.1.5.3    \
        ifIndex i 2 ifAdminStatus i 1 ifOperStatus i 1
Run Code Online (Sandbox Code Playgroud)

以供参考 :

snmptranslate -m +ALL -Pu .1.3.6.1.6.3.1.1.5.3
IF-MIB::linkDown
Run Code Online (Sandbox Code Playgroud)

变量绑定中没有".0",因为id由第一个精确定位行的ifIndex处理.

标量行示例.

http://www.net-snmp.org/wiki/index.php/TUT:snmptrap显示示例

snmptrap -v 1 -c public host UCD-TRAP-TEST-MIB::demotraps "" 6 17 "" \
       SNMPv2-MIB::sysLocation.0 s "Just here"
Run Code Online (Sandbox Code Playgroud)

'SNMPv2-MIB :: sysLocation.0'是一个标量.

与上面的IF-MIB :: linkDown示例不同,它与ifIndex所标识的表行有关,这里最后的".0" 指向标量(就像你设置它时一样)

来自原始问题的Netsnmp示例

.0 状态

netSnmpExampleHeartbeatRate OBJECT-TYPE
    SYNTAX      Integer32
    MAX-ACCESS  accessible-for-notify
    STATUS      current
    DESCRIPTION
        "A simple integer object, to act as a payload for the
         netSnmpExampleHeartbeatNotification.  The value has
         no real meaning, but is nominally the interval (in
         seconds) between successive heartbeat notifications."
::= { netSnmpExampleNotificationObjects 1 }
Run Code Online (Sandbox Code Playgroud)

即它不是真正可识别或可访问的标量,因此不使用".0".

  • k1eran解释说第一个是正确的 - 你可以接受它的答案 (2认同)