我使用PYSNMP作为我处理SNMP的工具。
snmp中的许多OID都由十六进制值表示。
以下是序列号OID的示例:
1.3.6.1.4.1.1602.1.2.1.4.0 = Hex-String: 0115434e443846374d485646
通过将其转换为integer或string,我可以将该十六进制值转换为更易于理解的类型。
问题是我没有办法知道十六进制值的预期类型,无论是字符串还是整数。
例如,十六进制字符串0115434e443846374d485646
在转换为string时等于CND8F7MHVF
,但在转换为integer时等于335190294349398493576582726
。
在本例中,如果我想检索正确的结果,则十六进制值应该转换为字符串,但在其他情况下,我可能需要将十六进制值转换为整数以获得正确的结果,因为序列号也可以是整数。
我应该如何转换十六进制字符串以接收十六进制字符串的目标值?
发布于 2016-02-17 07:32:04
在SNMP中,十六进制值通常与八位字节字符串类型关联,而不是与整数关联。
当SNMP将一个整数放入数据包中时,它会被清楚地标记为整数。在接收端,你总是知道它是整数,所以你可以将它转换成你想要的任何基数,这不会改变它的语义或值。
八位字节字符串类型可容纳一系列字节。它可能表示可打印的字符串或MAC地址,也可能表示特定于应用程序的内容。无论内容如何,线路中的值都被标记为相同的值(例如,在数据包级)。因此,弄清楚如何解释特定八位字节字符串值的惟一方法是查看与该值关联的OID (通过MIB中的对象类型定义)。
为了帮助解释基本SNMP类型(尤其是二进制八位数字符串),SNMP有一种称为文本约定的虚拟类型。它定义了八位字节字符串中的八位字节的布局,以便从它自动生成对人类友好的内容。
对于pysnmp,您所需要做的就是加载MIB,其中定义了相关的托管对象,然后让pysnmp通过将.prettyPrint()应用于它返回的对象来完成其余的工作。
发布于 2016-02-17 04:27:48
显然,您这样做是错误的,因为您正在将MAC地址(根据定义,它是基于十六进制的)转换为字符串。
通常,SNMP中确切的类型是在MIB-s中定义的,这些类型是基于SMIv1/SMIv2类型的有限子集,不应该有任何误解。
https://stackoverflow.com/questions/35439244
复制相似问题