pysnmp - 如何在代理实现期间使用已编译的mib

时间:2018-01-25 20:04:56

标签: mib pysnmp

pysnmp中提供的snmp代理实现示例并未真正利用通过编译mib生成的mib.py文件。是否可以使用此文件来简化代理实施?这样的例子可用于表格。谢谢!

1 个答案:

答案 0 :(得分:0)

你是对的,现有的mibdump.py工具主要是为管理员端MIB编译而设计的。但是,编译的MIB仍然有用,甚至有时对代理实现至关重要。

对于简单标量,您可以使用MibScalar类批量替换MibScalarInstance类。并向其OID添加额外的尾随.0。例如this line

sysDescr = MibScalar((1, 3, 6, 1, 2, 1, 1, 1), DisplayString().subtype(subtypeSpec=ValueSizeConstraint(0, 255))).setMaxAccess("readonly")

会像这样改变:

sysDescr = MibScalarInstance((1, 3, 6, 1, 2, 1, 1, 1, 0), DisplayString().subtype(subtypeSpec=ValueSizeConstraint(0, 255))).setMaxAccess("readonly")

对于SNMP表格来说,它更加琐碎,因为可能有几种情况。如果它是一个永远不会改变其大小的静态表,那么你基本上可以用MibTableColumn替换MibScalarInstance并附加OID的索引部分。例如this line

sysORID = MibTableColumn((1, 3, 6, 1, 2, 1, 1, 9, 1, 2), ObjectIdentifier()).setMaxAccess("readonly")

看起来像这样(注意索引12345):

sysORID = MibScalarInstance((1, 3, 6, 1, 2, 1, 1, 9, 1, 2, 12345), ObjectIdentifier()).setMaxAccess("readonly")

其他MibTable*类可以从MIB.py中删除。

对于因SNMP代理或SNMP管理器修改它们而改变其形状的动态表,您可能需要保留所有MibTable*类并扩展/自定义MibTableColumn类以使其实际管理您的后端资源以响应SNMP调用。

希望相关的example