-1

我在 Visual Studio 中有一个 C++ 应用程序,它在某些条件下将 SNMP 陷阱发送到远程机器。两台机器都禁用了防火墙。

我使用 Windows API SnmpSendMsg 来发送陷阱。

远程机器没有收到所有的陷阱。例如,如果我的应用程序发送 6 个陷阱,有时远程机器会收到 4 个陷阱,有时会收到 5 个。

我正在使用“iReasoning MIB Browser”陷阱接收器来接收陷阱。在使用wireshark进行调试并在我的应用程序中添加日志时,我发现我的应用程序使用SnmpSendMsg发送了6个陷阱,并且每次返回的状态都是1(SNMPAPI_SUCCESS)。但是,wireshark 每次只能捕获 4-5 个陷阱。

我的假设是,windows 不会以某种方式发送陷阱。

我不确定如何进一步调试此问题。

谢谢

4

2 回答 2

0

这是协议调试101:在发送系统和接收系统上运行wireshark来诊断数据包丢失的位置。

于 2017-08-04T13:56:35.223 回答
0

SNMP 使用 UDP 作为传输协议。UDP 在以下意义上是不可靠的:

  • UDP数据包可能会丢失
  • UDP 协议没有提供机制来判断数据包是否丢失或重新发送。

我建议使用 SNMP INFORM(SNMPv2C 或 SNMPv3)而不是 SNMP TRAP。他们得到承认。

于 2017-08-04T13:28:05.727 回答