2

我在 C++ 中使用 WinSNMP 来发送 snmp 陷阱。为了向后兼容,我需要发送 v1 snmp 陷阱。WinSNMP 与 v2 陷阱一起使用,但能够在发送陷阱时将这些 v2 陷阱转换为 v1。我用SnmpSetTranslateMode(SNMPAPI_UNTRANSLATED_V1)它来做到这一点。我还在绑定列表的开头添加了 sysUpTime oid (1.3.6.1.2.1.1.3.0)、snmpTrapOID (1.3.6.1.6.3.1.1.4.1.0) 和 enterpriseOID (1.3.6.1.6.3. 1.1.4.3.0) 在绑定列表的末尾,以便可以发送 v1 陷阱。

除了两个(可能相关的)事情之外,一切都很好。

陷阱中的 agent-addr字段始终为 0.0.0.0(我尝试将 snmpTrapAddress oid(1.3.6.1.6.3.18.1.3.0) 添加到绑定列表,但没有奏效)。我希望此字段包含源的 IP 地址。

HSNMP_ENTITY第二个问题是,尽管我在with SnmpStrToEntityand中指定了一个 IP 地址和一个端口,SnmpSetPort并且我HSNMP_ENTITYSnmpSendMsg函数中使用了它,但陷阱仍然从另一个端口(在动态端口范围内的某个位置)发送。

这里有没有人知道如何解决这个问题,或者谁能告诉我这是否可能?

4

1 回答 1

1

几个想法:

  • agent-addr可以由下层设置为网络适配器的IP地址。是否可以选择将一个特定的适配器与 SNMP 相关联?

  • 为什么需要设置trap的源端口?SNMP 只要求将陷阱发送到 UDP 端口 162;除非您的特定应用程序有其他要求,否则源无关紧要。(有关 SNMP 详细信息,请参阅 RFC 1067。)

于 2008-11-08T04:36:40.103 回答