【问题标题】:is request id asn.1 encoded?请求 id asn.1 编码了吗?
【发布时间】:2014-06-05 14:17:02
【问题描述】:

我星期一把它发到了 net-snmp 邮件列表,但没有得到回复,所以我在这里尝试。 我很困惑,希望有人能提供帮助。

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

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

http://www.ko4bb.com/net-snmp/RequestID.png

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

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

那么 ASN.1 不是用于 RequestID 字段吗?

【问题讨论】:

    标签: snmp wireshark asn.1


    【解决方案1】:

    我添加了 Wireshark 标记,因为这纯粹是 Wireshark 问题。

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

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

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

    正如@GuyHarris 在评论中指出的那样,这种 Wireshark 行为是可配置的。其他数据包分析器(例如 Microsoft 网络监视器)在同一场景中的行为可能会有所不同。

    【讨论】:

    • "请求 ID 字段,严格采用 ASN.1 格式,即02 04 68 4f 31 c2。"那是 ASN.1 基本编码规则 (BER) 格式; ASN.1 没有指定编码(还有打包编码规则)。 “你应该小心,Wireshark 太聪明了,无法解析数据并隐藏一些细节。”如果您为 BER 协议启用 Wireshark 的“显示内部 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。似乎 net-snmp 只是将整数值编码为 4 个字节,而不管值如何。例如,我还没有找到强制 net-snmp 发出请求 ID 值为 1 或 2 的方法。
    • 例如,这是整数在 OID 字段中编码的方式。看来此编码规则仅适用于 OID,这可能是我的错误。
    • 进一步说明,我似乎混淆了 BER(请求 ID 等数据字段的编码方式)和 PER(用于 OID 字段)。
    • 伙计,感谢您提供有关打开 Wireshark 的“显示内部 BER 封装令牌”的提示。 Wireshark 是一头野兽 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-27
    • 2022-01-22
    • 2012-04-11
    • 2018-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多