PySNMP 查询特定接口列表

1 投票
1 回答
1084 浏览
提问于 2025-04-18 02:49

我想获取一组特定接口的所有信息。目前我有一个变量 oid_base

oid_base = ['1.3.6.1.2.1.2.2.1.1.', 
            '1.3.6.1.2.1.2.2.1.2.', 
            '1.3.6.1.2.1.2.2.1.3.', 
            ...,
            '1.3.6.1.2.1.2.2.1.22.']

还有一个接口列表(我想查询其中大约20个,虽然总共有几百个)。

interfaces = ['35', '37', '94']

为了获取我想要的数据,我正在遍历这些接口,并为每个接口创建一个 oid_args,然后分别传递给 cmdgen.getCmd 来获取信息:

for interface in snmpif.interfaces():
  oid_args = [str(b + interface) for b in oid_base]
  ei, es, ein, var_binds = cmd_gen.getCmd(sec_obj, trans, *oid_args)
  # Handle errors and output of `var_binds`

有没有办法一次性查询所有接口,并返回一个表格呢?

我试着使用 cmdgen.bulkCmd,但我搞不清楚怎么选择这些接口。

1 个回答

1

假设你想要优化SNMP通信的数量,你可以使用getBulk()这个方法,但要针对相邻的接口。例如,如果你需要查询接口2、3和4,你可以对接口1使用getBulk(),并把maxRepetitions和maxRows这两个参数设置为3(也就是你要查询的接口数量)。

那些“孤立”的接口可以单独查询,只需把它们放在oid_args的开头,并相应地设置getBulk的nonRepeaters选项。

无论你使用什么类型的SNMP请求,你都可以在请求中放入尽可能多的OID,只要SNMP数据包能容纳得下,而不一定要只包含某一个接口的OID。

撰写回答