让我先说明这一点,我对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。这就是我所需要的一切。是否有解包这个的命令,或者我是否需要通过蛮力解析它?
答案 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