C# SNMP数据包格式

C# SNMP数据包格式,c#,udp,snmp,packet,C#,Udp,Snmp,Packet,我已经尝试了解SNMP数据包格式有一段时间了,但我仍然不确定我是否了解它。以下是一些我认为正确的观察结果,但我不确定: 每个数据包是一组不同类型的嵌套数据原语,由一个类型、一个长度和一些数据组成 OID的前两个部分总是1.3,并被编码为单个字节 如果后续部分的数值小于128,则将其编码为每个字节 大于127的OID部分被编码成多个字节,其值由7个最低有效位确定,最高有效位设置为1,但最后一个字节除外 有些数据类型ID是官方的(整数、字符串等),但有些是专有的和特定于设备的 我真的不明白的一点是,

我已经尝试了解SNMP数据包格式有一段时间了,但我仍然不确定我是否了解它。以下是一些我认为正确的观察结果,但我不确定:

  • 每个数据包是一组不同类型的嵌套数据原语,由一个类型、一个长度和一些数据组成
  • OID的前两个部分总是
    1.3
    ,并被编码为单个字节
  • 如果后续部分的数值小于128,则将其编码为每个字节
  • 大于127的OID部分被编码成多个字节,其值由7个最低有效位确定,最高有效位设置为1,但最后一个字节除外
  • 有些数据类型ID是官方的(整数、字符串等),但有些是专有的和特定于设备的
  • 我真的不明白的一点是,如果一个特定值的长度超过255字节,该值的长度是如何编码的。使用Wireshark,我发现长度在256以下时,长度字段为1字节,但长度大于256时,字段被拆分为多个字节。但是,在较大的OID零件号中使用的编码似乎不适用

    我在RFC中找不到任何关于这一点的帮助(至少有30个)


    有人能帮我澄清一下吗?我上面的观察结果是否正确?

    SNMP是使用。有一种描述它的方法;X.690涵盖了基本的二进制编码。

    这些文章中的信息非常模糊和混乱,因此我提出了一个问题要求澄清。您似乎错过了SNMP使用ASN.1的关键点,特别是BER编码。Wikipedia文章I链接到了this:,它链接到this:,它给出了编码的详细概述,以及各种数据类型的示例编码。