Snmpwalk 随机 returns 少变量(以 SNMPv2-MIB::snmpSetSerialNo.0 结尾)
Snmpwalk randomly returns less variables (ending with SNMPv2-MIB::snmpSetSerialNo.0)
我正在创建新的 MiB,其中包括对象 groupProcessInfo,其任务是 return X 应用程序进程的状态,其中 X 替换为应用程序的名称。
MiB中的每个进程都是这样定义的:
appXState OBJECT-TYPE
SYNTAX OCTET STRING (SIZE(0..255))
MAX-ACCESS read-only
STATUS current
DESCRIPTION "X service"
::= { groupProcessInfo 10 1 }
appXMemUsage OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-only
STATUS current
DESCRIPTION "X service"
::= { groupProcessInfo 10 2 }
并分配给对象:
groupProcessInfo OBJECT IDENTIFIER ::= { myMIB 1 }
有一个主要的 bash 脚本,它使用实用程序或另一个 bash 脚本找出进程的状态,这些脚本需要不同的时间,所以当 snmpwalk 或 snmpget 时,我需要指定更大的超时 (-t)。
主 bash 脚本被传递给 snmpd.conf 使用命令:
pass .1.3.6.1.4.1.x.y.3.10 /etc/snmp/scripts/process.sh
当我尝试使用 snmpget 或 snmpgetnext 获取 appXState 或 appXMemUsage 的值时,它可以正常工作,并且始终 returned 正确值,但 snmpwalk 无法按预期工作。
当我运行这个命令时:
$ snmpwalk -Cp -Ct -v 2c -t 20 -m +MY-MIB -c testing localhost groupProcessInfo
有时 return 变量更少,遍历时间明显更少。
备注:
1。 Snmpwalk 跟踪模式
当这种情况发生在跟踪模式 (-D all) 中时,snmpagent returns 作为最后一个变量 SNMPv2-MIB::snmpSetSerialNo.0,它不在OID 树。当树中的所有变量都被正确 returned 时,这不会在 运行s 中发生。
跟踪模式输出:
trace: snmp_comstr_parse(): snmp_auth.c, 130:
dumph_recv: SNMP version
dumpx_recv: 02 01 01
dumpv_recv: Integer: 1 (0x01)
trace: snmp_comstr_parse(): snmp_auth.c, 142:
dumph_recv: community string
dumpx_recv: 04 07 74 65 73 74 69 6E 67
dumpv_recv: String: testing
trace: _snmp_parse(): snmp_api.c, 4142:
dumph_recv: PDU
trace: snmp_pdu_parse(): snmp_api.c, 4362:
dumpv_recv: Command RESPONSE
trace: snmp_pdu_parse(): snmp_api.c, 4447:
dumph_recv: request_id
dumpx_recv: 02 04 0E 5E DD 9C
dumpv_recv: Integer: 241098140 (0xE5EDD9C)
trace: snmp_pdu_parse(): snmp_api.c, 4458:
dumph_recv: error status
dumpx_recv: 02 01 00
dumpv_recv: Integer: 0 (0x00)
trace: snmp_pdu_parse(): snmp_api.c, 4469:
dumph_recv: error index
dumpx_recv: 02 01 00
dumpv_recv: Integer: 0 (0x00)
trace: snmp_pdu_parse(): snmp_api.c, 4487:
dumph_recv: VarBindList
trace: snmp_pdu_parse(): snmp_api.c, 4503:
dumph_recv: VarBind
trace: snmp_parse_var_op(): snmp.c, 164:
dumph_recv: Name
dumpx_recv: 06 0A 2B 06 01 06 03 01 01 06 01 00
dumpv_recv: ObjID: SNMPv2-MIB::snmpSetSerialNo.0
trace: snmp_pdu_parse(): snmp_api.c, 4512:
dumph_recv: Value
dumpx_recv: 02 04 12 55 CB EF
dumpv_recv: Integer: 307612655 (0x1255CBEF)
trace: _sess_process_packet(): snmp_api.c, 5244:
sess_process_packet: received message id#0 reqid#241098140 len 50
trace: snmp_synch_input(): snmp_client.c, 183:
snmp_synch: Response (ReqID: 241098140 - Cmd 162)
Variables found: 11
Total traversal time = 7.302387 seconds
2。 strace snmpwalk
当上面的命令 运行 使用 strace 实用程序时,当更少的变量被 returned 时,它的行为就像所有变量都被 returned 并且脚本结束时没有错误。
exit_group(0) = ?
+++ exited with 0 +++
感谢您的提示。
我设法仅使用一个默认 public 社区、一个用户和一个组来解决问题。该组只能访问一个具有多个 OID 子树定义的视图:
com2sec notConfigUser default public
社区只定义在 com2sec 线上,其他地方都没有。
view all included .1.3.6.1.4.1.x.y
view all included .1.3.6.1.4.1.2021
view all included .1 80
view systemview included .1.3.6.1.2.1.1
view systemview included .1.3.6.1.2.1.25.1.1
view systemview included .1.3.6.1.4.1
定义了一个视图到多个子树,但视图不超过"all"和"systemview"。
access notConfigGroup "" any noauth exact all none none
notConfigGroup 有权访问 "all" 视图。
我正在创建新的 MiB,其中包括对象 groupProcessInfo,其任务是 return X 应用程序进程的状态,其中 X 替换为应用程序的名称。
MiB中的每个进程都是这样定义的:
appXState OBJECT-TYPE
SYNTAX OCTET STRING (SIZE(0..255))
MAX-ACCESS read-only
STATUS current
DESCRIPTION "X service"
::= { groupProcessInfo 10 1 }
appXMemUsage OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-only
STATUS current
DESCRIPTION "X service"
::= { groupProcessInfo 10 2 }
并分配给对象:
groupProcessInfo OBJECT IDENTIFIER ::= { myMIB 1 }
有一个主要的 bash 脚本,它使用实用程序或另一个 bash 脚本找出进程的状态,这些脚本需要不同的时间,所以当 snmpwalk 或 snmpget 时,我需要指定更大的超时 (-t)。
主 bash 脚本被传递给 snmpd.conf 使用命令:
pass .1.3.6.1.4.1.x.y.3.10 /etc/snmp/scripts/process.sh
当我尝试使用 snmpget 或 snmpgetnext 获取 appXState 或 appXMemUsage 的值时,它可以正常工作,并且始终 returned 正确值,但 snmpwalk 无法按预期工作。
当我运行这个命令时:
$ snmpwalk -Cp -Ct -v 2c -t 20 -m +MY-MIB -c testing localhost groupProcessInfo
有时 return 变量更少,遍历时间明显更少。
备注:
1。 Snmpwalk 跟踪模式
当这种情况发生在跟踪模式 (-D all) 中时,snmpagent returns 作为最后一个变量 SNMPv2-MIB::snmpSetSerialNo.0,它不在OID 树。当树中的所有变量都被正确 returned 时,这不会在 运行s 中发生。
跟踪模式输出:
trace: snmp_comstr_parse(): snmp_auth.c, 130:
dumph_recv: SNMP version
dumpx_recv: 02 01 01
dumpv_recv: Integer: 1 (0x01)
trace: snmp_comstr_parse(): snmp_auth.c, 142:
dumph_recv: community string
dumpx_recv: 04 07 74 65 73 74 69 6E 67
dumpv_recv: String: testing
trace: _snmp_parse(): snmp_api.c, 4142:
dumph_recv: PDU
trace: snmp_pdu_parse(): snmp_api.c, 4362:
dumpv_recv: Command RESPONSE
trace: snmp_pdu_parse(): snmp_api.c, 4447:
dumph_recv: request_id
dumpx_recv: 02 04 0E 5E DD 9C
dumpv_recv: Integer: 241098140 (0xE5EDD9C)
trace: snmp_pdu_parse(): snmp_api.c, 4458:
dumph_recv: error status
dumpx_recv: 02 01 00
dumpv_recv: Integer: 0 (0x00)
trace: snmp_pdu_parse(): snmp_api.c, 4469:
dumph_recv: error index
dumpx_recv: 02 01 00
dumpv_recv: Integer: 0 (0x00)
trace: snmp_pdu_parse(): snmp_api.c, 4487:
dumph_recv: VarBindList
trace: snmp_pdu_parse(): snmp_api.c, 4503:
dumph_recv: VarBind
trace: snmp_parse_var_op(): snmp.c, 164:
dumph_recv: Name
dumpx_recv: 06 0A 2B 06 01 06 03 01 01 06 01 00
dumpv_recv: ObjID: SNMPv2-MIB::snmpSetSerialNo.0
trace: snmp_pdu_parse(): snmp_api.c, 4512:
dumph_recv: Value
dumpx_recv: 02 04 12 55 CB EF
dumpv_recv: Integer: 307612655 (0x1255CBEF)
trace: _sess_process_packet(): snmp_api.c, 5244:
sess_process_packet: received message id#0 reqid#241098140 len 50
trace: snmp_synch_input(): snmp_client.c, 183:
snmp_synch: Response (ReqID: 241098140 - Cmd 162)
Variables found: 11
Total traversal time = 7.302387 seconds
2。 strace snmpwalk
当上面的命令 运行 使用 strace 实用程序时,当更少的变量被 returned 时,它的行为就像所有变量都被 returned 并且脚本结束时没有错误。
exit_group(0) = ?
+++ exited with 0 +++
感谢您的提示。
我设法仅使用一个默认 public 社区、一个用户和一个组来解决问题。该组只能访问一个具有多个 OID 子树定义的视图:
com2sec notConfigUser default public
社区只定义在 com2sec 线上,其他地方都没有。
view all included .1.3.6.1.4.1.x.y
view all included .1.3.6.1.4.1.2021
view all included .1 80
view systemview included .1.3.6.1.2.1.1
view systemview included .1.3.6.1.2.1.25.1.1
view systemview included .1.3.6.1.4.1
定义了一个视图到多个子树,但视图不超过"all"和"systemview"。
access notConfigGroup "" any noauth exact all none none
notConfigGroup 有权访问 "all" 视图。