Python 如何转换从SNMP接收的十六进制值?

Python 如何转换从SNMP接收的十六进制值?,python,hex,snmp,pysnmp,Python,Hex,Snmp,Pysnmp,我使用SNMP作为我的工具。 snmp中的许多OID由十六进制值表示。 以下是序列号OID的示例: 1.3.6.1.4.1.1602.1.2.1.4.0 = Hex-String: 0115434e443846374d485646 我可以将这个十六进制值转换为更容易理解的类型,方法是将其转换为或。 问题是我无法知道十六进制值的预期类型,无论是字符串还是整数。 因此,例如十六进制字符串0115434E4438463744D485646,当转换为equalsCND8F7MHVF时,但当转换为equ

我使用SNMP作为我的工具。
snmp中的许多OID由十六进制值表示。
以下是序列号OID的示例:

1.3.6.1.4.1.1602.1.2.1.4.0 = Hex-String: 0115434e443846374d485646
我可以将这个十六进制值转换为更容易理解的类型,方法是将其转换为或。
问题是我无法知道十六进制值的预期类型,无论是字符串还是整数。
因此,例如十六进制字符串
0115434E4438463744D485646
,当转换为equals
CND8F7MHVF
时,但当转换为equals
335190294349398493576582726时
在本例中,如果我想检索正确的结果,十六进制值应转换为字符串,但在其他情况下,我可能需要将十六进制值转换为整数以获得正确的结果,因为序列号也可以是整数。

我应该如何转换十六进制字符串以接收十六进制字符串的预期值?

显然,您在将MAC地址(定义为十六进制)转换为字符串时犯了错误


通常,SNMP中的确切类型在MIB-s中定义,这些类型基于SMIv1/SMIv2类型的有限子集,不应存在任何误解

在SNMP中,十六进制值通常与八位字节字符串类型关联,而不是与整数关联

当SNMP将整数放入数据包中时,它会清楚地标记为整数。在接收端,你们总是知道它是整数,所以你们可以把它转换成你们想要的任何基,这不会改变它的语义或值

八进制字符串类型容纳字节序列。可能表示可打印字符串或MAC地址或可能特定于应用程序的内容。无论内容如何,导线中的值都被标记为相同的(例如,在数据包级别)。因此,了解如何解释特定八位字节字符串值的唯一方法是查看与该值关联的OID(通过MIB中的对象类型定义)

为了帮助解释基本SNMP类型(特别是八位字节字符串),SNMP有一个称为text-CONVENTION的虚拟类型。它定义了八位字节字符串中的八位字节布局,以自动生成人性化的内容


在pysnmp的情况下,您只需在定义了相关托管对象的位置加载MIB,然后让pysnmp对其返回的对象应用.prettyPrint()。

mac地址只是一个示例,有时它是一个序列号或IP地址或几乎任何东西。如果我遗漏了某些类型,那么你能给我一些代码来检索正确的SMIv1/SMIv2类型吗?为了避免混淆,我编辑了我的问题以引用序列号而不是mac地址。找到包含定义的原始MIB文档。那么,为什么要以这种方式定义一个类型就再清楚不过了。如果您只是检查返回的值,您当然会感到困惑。