首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何转换从SNMP收到的十六进制值?

如何转换从SNMP收到的十六进制值?
EN

Stack Overflow用户
提问于 2016-02-17 01:32:28
回答 2查看 6.1K关注 0票数 1

我使用PYSNMP作为我处理SNMP的工具。

snmp中的许多OID都由十六进制值表示。

以下是序列号OID的示例:

代码语言:javascript
运行
复制
1.3.6.1.4.1.1602.1.2.1.4.0 = Hex-String: 0115434e443846374d485646

通过将其转换为integerstring,我可以将该十六进制值转换为更易于理解的类型。

问题是我没有办法知道十六进制值的预期类型,无论是字符串还是整数。

例如,十六进制字符串0115434e443846374d485646在转换为string时等于CND8F7MHVF,但在转换为integer时等于335190294349398493576582726

在本例中,如果我想检索正确的结果,则十六进制值应该转换为字符串,但在其他情况下,我可能需要将十六进制值转换为整数以获得正确的结果,因为序列号也可以是整数。

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

EN

回答 2

Stack Overflow用户

发布于 2016-02-17 07:32:04

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

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

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

为了帮助解释基本SNMP类型(尤其是二进制八位数字符串),SNMP有一种称为文本约定的虚拟类型。它定义了八位字节字符串中的八位字节的布局,以便从它自动生成对人类友好的内容。

对于pysnmp,您所需要做的就是加载MIB,其中定义了相关的托管对象,然后让pysnmp通过将.prettyPrint()应用于它返回的对象来完成其余的工作。

票数 1
EN

Stack Overflow用户

发布于 2016-02-17 04:27:48

显然,您这样做是错误的,因为您正在将MAC地址(根据定义,它是基于十六进制的)转换为字符串。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35439244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档