使用八位字节字符串的SNMP表索引

使用八位字节字符串的SNMP表索引,snmp,net-snmp,asn.1,mib,Snmp,Net Snmp,Asn.1,Mib,我正在使用NetSNMP开发一个SNMP代理,并为表中的数据开发一个MIB 我正在考虑使用基于大约15位小数的字符串的表键 将其实现为八位字节字符串索引是否合理 即使我每八位元编码2个数字,它也大约有8个八位元长 使用八位字节字符串索引,每个八位字节将作为节点添加到OID中 我知道我可以将其转换为整数,但十进制数字可以有前导零 对此有何看法或建议 提前谢谢。您可以将零放入八位字节字符串中,所以可以这样做。八位字节字符串可以包含二进制数据,并作为简单的数字编码到OID中。Net SNMP API不

我正在使用NetSNMP开发一个SNMP代理,并为表中的数据开发一个MIB

我正在考虑使用基于大约15位小数的字符串的表键

将其实现为八位字节字符串索引是否合理

即使我每八位元编码2个数字,它也大约有8个八位元长

使用八位字节字符串索引,每个八位字节将作为节点添加到OID中

我知道我可以将其转换为整数,但十进制数字可以有前导零

对此有何看法或建议


提前谢谢。

您可以将零放入八位字节字符串中,所以可以这样做。八位字节字符串可以包含二进制数据,并作为简单的数字编码到OID中。Net SNMP API不仅接受指向char*的指针,还接受返回数据的长度。这是特别的,因为它是完全合法的八进制字符串,其中编码了空值

在OID方面,如果字符串由字符A、B 0、D组成,则通常将其编码为:

废话,废话4.65.66.0.67

其中4是字符串的长度。如果八位字节字符串被标记为隐式,那么4将被忽略

您正在将十进制数字编码到字符串中,因此您的值将更接近0x15、0x04、0x42等值。这些值也很好(您正在构建一个二进制字符串)


您是否应该这样做,或者您是否应该在字符串中插入整数本身是有争议的,但这取决于您正在做什么,以及环境的带宽限制等。

我不确定八位字节字符串的长度(在上面的示例中为4)是否真的是必要的,即使存在零值八位字节(0x00),或者即使八位字节(或数字)的数量是可变的,OID和八位字节字符串也具有与实际值相关联的长度,即,它们与C以null结尾的字符串不同。此外,索引节点位于OID序列的末尾,因此只要知道OID的词干是什么(在上面的示例中为blah.blah),就可以知道OID的哪些部分构成索引。我想有人可以对部分索引进行编码,但那是不正确的?OID的编码方式是非常标准化的。如果索引仅指定为八位字节字符串,则长度(4)必须在OID中(snmpwalk之类的工具将需要它)。如果将索引指定为隐式八位字节字符串,则它必须是最后一个索引,且长度必须忽略。是否有可下载的SNMP代理使用索引为OID中多个节点(如八位字节字符串)的表?我想测试SNMP获取/设置等,包括添加和删除行(使用rowStatus列)。理想情况下,如果有一个代理,我可以下载并运行。。。以最少的配置和工作量。当我向Linux机箱上的Net SNMP的snmpd(5.7.2版)发送请求,请求任何具有“多节点”索引的RFC 1213表时,我从ireasoning MIB浏览器中获得“无可用数据”。或者我需要配置一些东西才能使其工作?出于安全原因,是的,您必须配置Net SNMP的代理,然后它才会返回任何数据。我假设您使用的是v1或v2c,社区字符串为“public”。运行
snmpconf-gbasic\u安装程序,它将引导您完成配置文件的创建。