Snmp 请求id是否已编码为asn.1?

Snmp 请求id是否已编码为asn.1?,snmp,wireshark,asn.1,Snmp,Wireshark,Asn.1,我星期一把这个贴到了网络snmp邮件列表上,但没有得到回复,所以我在这里尝试。 我很困惑,希望有人能帮我 我正在为Cortex M4应用程序编写SNMP代理。 我买的SNMP书籍和我在网上读到的内容表明,所有数据字段都应该是ASN.1编码的。我知道OID是ASN.1编码的。我不确定这是否适用于请求ID等其他字段 查看网络snmp发送的snmp命令,请求ID字段似乎是一个简单的(4字节)32位整数。 下面是一个屏幕截图,显示了通过Wireshark监控的snmpget事务: 它显示请求ID为17

我星期一把这个贴到了网络snmp邮件列表上,但没有得到回复,所以我在这里尝试。 我很困惑,希望有人能帮我

我正在为Cortex M4应用程序编写SNMP代理。 我买的SNMP书籍和我在网上读到的内容表明,所有数据字段都应该是ASN.1编码的。我知道OID是ASN.1编码的。我不确定这是否适用于请求ID等其他字段

查看网络snmp发送的snmp命令,请求ID字段似乎是一个简单的(4字节)32位整数。 下面是一个屏幕截图,显示了通过Wireshark监控的snmpget事务:

它显示请求ID为1750020546(十进制)和0x684F31C2(十六进制)。Wireshark中的数据字段也显示为“68 4f 31 c2”

这不是ASN.1编码,否则前3个字节的位7将设置为1,最后一个字节的位7将设置为0,这意味着前3个值将大于0x7F,最后一个值应小于0x80


ASN.1是否不用于RequestID字段?

我添加了wireshark标记,因为这纯粹是wireshark的问题


请求ID字段严格采用ASN.1 BER格式,即
02 04 68 4f 31 c2

您应该小心Wireshark太聪明了,无法解析数据并隐藏一些细节

请检查突出显示了
68 4f 31 c2
的botton面板。Wireshark高亮显示它们,但故意忽略前面的
02 04
。这就是问题所在


正如@GuyHarris在评论中指出的,这种Wireshark行为是可配置的。其他数据包分析器(如Microsoft Network Monitor)在同一场景中的行为可能不同。

“请求ID字段严格采用ASN.1格式,即
02 04 68 4f 31 c2
”,即ASN.1基本编码规则(BER)格式;ASN.1没有指定编码(还有压缩编码规则)。“您应该注意Wireshark太聪明了,无法解析数据并隐藏某些细节。”如果启用Wireshark对BER协议的“显示内部BER封装令牌”首选项,它将向您显示这些细节;这不是默认的。谢谢,但这不是我的问题。02 04 68 4f 31 c2似乎不是ASN.1 BER编码。ASN.1 BER的定义是,如果该值大于127,则第一个字节包含7个LSB上的数据,第7位设置为1,其余字节在下一个字节上编码。例如,值42564应该编码为0x82、0xCC、0x44,或者如果您包括头0x02、0x03、0x82、0xCC、0x44。网络snmp似乎只是将整数值编码为4字节,而不考虑其值。例如,我还没有找到一种方法来强制net snmp发出1或2的请求ID值。例如,这就是OID字段中整数的编码方式。这个编码规则似乎只适用于OID,这可能是我的错误。进一步说明,我似乎混淆了BER(请求ID等数据字段的编码方式)和PER(用于OID字段)。Guy,感谢您提供有关打开Wireshark的“显示内部BER封装令牌”的提示。线鲨是野兽:)