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 トラップを送信できるようにします。

2つの(おそらく関連する)ものを除いて、すべてが正常に機能しています。

トラップの agent-addrフィールドは常に 0.0.0.0 です (バインディング リストに snmpTrapAddress oid(1.3.6.1.6.3.18.1.3.0) を追加しようとしましたが、うまくいきませんでした)。このフィールドに送信元の IP アドレスを含めたいと思います。

2 番目の問題は、 andで IP アドレスとポートを指定HSNMP_ENTITYし、関数でこれを使用しても、トラップが別のポート (動的ポート範囲のどこか) から送信されることです。SnmpStrToEntitySnmpSetPortHSNMP_ENTITYSnmpSendMsg

これを修正する方法を知っている人、またはこれが可能かどうか教えてくれる人はいますか?

4

1 に答える 1

1

いくつかのアイデア:

  • agent-addr、下位層によってネットワーク アダプタの IP アドレスに設定される場合があります。特定のアダプタを SNMP に関連付けるオプションはありますか?

  • トラップの送信元ポートを設定する必要があるのはなぜですか? SNMP は、トラップが UDP ポート 162 に送信されることのみを必要とします。特定のアプリケーションに追加の要件がない限り、ソースは無関係です。(SNMP の詳細については、RFC 1067 を参照してください。)

于 2008-11-08T04:36:40.103 に答える