我正在使用 net-snmp 开发 SNMP 代理,并为表中保存的数据开发 MIB。
我正在考虑使用基于大约 15 个十进制数字的字符串的表键。
将其实现为 OCTET STRING 索引是否合理?
即使我对每个八位字节编码 2 位数字,它也会有大约 8 个八位字节长。
使用 OCTET STRING 索引,每个八位字节将作为一个节点添加到 OID。
我知道我可以将其转换为整数,但十进制数字可能有前导零。
对此有何看法或建议?
提前致谢。
您可以将零放入八进制字符串,所以是的,您可以这样做。OCTET STRINGS 可以包含二进制数据,并且被简单地编码为 OID 中的数字。Net-SNMP API 不仅接受指向 char * 的指针,还接受返回数据的长度。这特别是因为在其中编码空值的 OCTET STRINGS 是完全合法的。
在 OID 方面,如果您的字符串由字符 A、B 0、D 组成,则通常将其编码为:
废话.废话.4.65.66.0.67
其中 4 是字符串的长度。如果 OCTET STRING 被标记为 IMPLICIT,那么 4 将被忽略。
您将十进制数字编码到字符串中,因此您的值将更接近于 0x15、0x04、0x42 等。这些也很好(您正在构建二进制字符串)。
您是否应该这样做,或者您是否应该将整数本身放入字符串中,这是有争议的,但取决于您在做什么,以及环境的带宽限制等。