SNMP 类型无符号32 的正确编码是什么

What is the correct encoding for SNMP type Unsigned32?

本文关键字:编码 是什么 类型 无符号 SNMP      更新时间:2023-10-16

我正在编写一个SNMP代理,MIB定义包括一个类型为Unsigned32的OID。

代理的 Unix 实现使用 Net-SNMP 并将 OID 设置为 ASN_UNSIGNED 类型,因为它没有ASN_UNSIGNED32。当我用Wireshark查看GET响应时,它将其解码为"Gauge32"值。乍一看这是有道理的,因为根据 RFC 1902,Unsigned32 和 Gauge32 是相同的。

Windows

实现基于Windows的SnmpAPI.lib,并将OID设置为ASN_UNSIGNED32,当我使用Wireshark查看GET响应时,它将其解码为"Unsigned32"。这对我来说看起来更好。

为什么这两种实现在网上产生不同的结果?

哪个是正确的版本,我如何设法从两个实现中获得相同的版本?

事实证明,Net-SNMP使用的是当前的RFC 1902编码,其中Unsigned32和Gauge32是相同的,而Windows使用过时的RFC 1442编码,其中Unsigned32和Gauge32具有不同的编码。

如果你在Windows上保存Wireshark捕获,然后在Unix上的Wireshark中打开它。然后,您可能会看到它显示的类型。Unsigned32 和 Gauge32 是可互换的,由标准定义,因此在所有 SNMP 实现中应该没有任何区别。在网络上,它应该传输相同的字节。