5

我正在编写一个 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”。这对我来说看起来更好。

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

哪个是正确的版本,我怎样才能设法从两个实现中获得相同的版本?

4

2 回答 2

5

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

于 2012-05-29T09:40:21.703 回答
1

如果您在 Windows 上保存 Wireshark 捕获,然后在 Unix 上的 Wireshark 中打开它。然后你可能会看到它显示的类型是什么。Unsigned32 和 Gauge32 在标准中定义是可以互换的,所以在所有的 SNMP 实现中应该没有什么不同。在线路上,它应该传输相同的字节。

于 2012-05-26T10:16:18.227 回答