我需要 unwrap/parse snmp 结果

I need to unwrap/parse snmp results

让我先声明一下,我对 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。这就是我所需要的。是否有解包命令,或者我是否需要通过暴力解析它?

谈到 SNMP,您通常会处理所谓的 variable-binding 或 OID-value 对。这在概念上类似于您可能在其他应用程序中遇到的 key-value 对。

所以你的 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