我需要打开/解析snmp结果

时间:2017-01-27 21:47:19

标签: snmp pysnmp

让我先说明这一点,我对SNMP几乎一无所知,但我正在学习。我试图从打印机获取设备名称。 我得到'1.3.6.1.2.1.1.5.0'OID。但它有很多额外的信息,我认为它是某种类型的包装,但我不知道如何打开它。

以下是我的结果

varBinds=[ObjectType(ObjectIdentity(ObjectName('1.3.6.1.2.1.1.5.0')), DisplayString(b'OFHP1', subtypeSpec=ConstraintsIntersection(ConstraintsIntersection(ConstraintsIntersection(ConstraintsIntersection(), ValueSizeConstraint(0, 65535)), ValueSizeConstraint(0, 255)), ValueSizeConstraint(0, 255))))]

打印机名称为OFHP1。这就是我所需要的一切。是否有解包这个的命令,或者我是否需要通过蛮力解析它?

1 个答案:

答案 0 :(得分:0)

对于SNMP,您通常会处理所谓的变量绑定或OID值对。这在概念上类似于您在其他应用程序中可能遇到的键值对。

所以你的varBinds是一个对象列表,每个对象代表一个ket-value对。要获得所需的值,请将其遍历到您需要的组件:

varBind = varBinds[0]  # first var-bind
oid, value = varBind   # unpack var-bind into OID and value

现在,SNMP中的值是键入和约束的(它们实际上是ASN.1类型)。这就是为什么它们不仅仅是基础Python类型,而是专用对象。但您可以删除它们携带的额外信息,并从任何SNMP标量中获取纯Python字符串(或int):

py_value = str(value)           # turn SNMP value object into Python str
py_value = value.prettyPrint()  # turn SNMP value object into a MIB-guided, human friendly representation