如何将BITS数据类型转换为HEX STRING数据类型? (如
0x80
)HEX STRING
分别代表(0)、(1)、(2)BITS
? DEFVAL 为 '00'h
。
Composed Type: Bits
Base Type: BITS
Value List:
large (0)
mid-size (1)
compact (2)
您可能已经在“snmpset”的手册页上找到了十六进制和位数据的正确语法: http://www.net-snmp.org/docs/man/snmpset.html
因此,将位值设置为大(0)就像使用语法一样完成
snmpset <flags,host etc> <oid> b 0
要设置多个标志,例如中型和紧凑型,请使用
snmpset <flags,host etc> <oid> b 1,2
我认为后一种语法没有详细记录。我在 net-snmp 的邮件列表档案中找到了它。
就像我在评论中写的那样,SNMP 中没有“HEX STRING”数据类型。如果您想传输二进制数据,例如 OCTET STRING 值,那么您需要在命令行上以某种方式表示它。 Net-snmp 提供了一种名为“HEX STRING”的输入格式,它将使用以下语法接受十六进制输入:
snmpset <flags,host etc> <oid> x 60
顺便说一句,十六进制的“60”与 SNMP 编码“位 1,2”的方式相同(第二位和第三位,MSB 在前)。
有关 SNMP 如何编码和解码 BITS 值的描述可以在 RFC1906 第 8 节中找到。有了这些知识,您只需要了解十六进制转换是如何工作的,这很容易通过 google 搜索到。
编辑:我想这就是你要找的:
0 -> 0x80
1 -> 0x40
2 -> 0x20
与正常 (LSB) 字节编码相比,这有点落后,但请再次阅读 RFC1906 以了解其工作原理。
应该注意的是,如果您尝试在 BITS 变量上设置 OCTET STRING 值,您可能会期望 SNMP 代理返回类型错误。然而,由于 BITS 只是基于 OCTET STRING 类型的 SMI 宏,因此它们实际上以相同的方式进行编码。所以,代理应该愉快地设置该值。
使用 Net-SNMP,您不需要计算位值,您可以编写以下代码来设置一个或多个位:
snmpset -v2c -c public 192.168.100.1 $ObjectId = "medium compact"
对这个帖子的回复很晚,但我面临着同样的问题。 要使用 SNMP 设置某些内容,我需要放入具有 BITS 语法的 OctetString。 这是可能性:
BITS {interface1(0),
interface2(1),
interface3(2),
interface4(3),
interface5(4),
interface6(5),
interface7(6),
interface8(7)
}
并且组合是可能的。 我不知道如何仅设置interface5或interface2、interface3和interface5在一起,或者如何将它们全部设置在一起。
有人可以帮助我吗?
谢谢你