2008-11-04 23 views
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陷阱。WinSNMP v1traps

一切工作正常,除了两(可能有关)的东西。

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

第二个问题是,虽然我指定一个IP地址,并在HSNMP_ENTITYSnmpStrToEntitySnmpSetPort一个端口,我用这个HSNMP_ENTITYSnmpSendMsg功能陷阱还是会从其他端口发送(某处动态端口范围)。

在这里有谁有一个想法如何解决这个问题或谁可以告诉我,如果这是可能的?

回答

1

一对夫妇的思路:

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

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