0

私が望んでいるのは、ネットワーク機器の 1 つが行うのと同じように、snmp トラップを送信することです。トラップには DataTime の名前値が含まれており、HEX 文字列のようなものです。

e.g. 1.3.6.1.4.1.193.82.1.8.1.4.0 : 07:de:07:10:0a:0c:1e:00:2b:08:00

snmptrapのコマンドを使用してトラップを送信すると、ネットワーク機器から実際のトラップを取得したようにnet-snmp、トラップ デコーダーが 16 進文字列を正常に解析してdateandtimeformat( ) に変換できます。YYYY-MM-HH hh:mm:ss

私が使用するコマンドは次のようなものです。

sudo /usr/local/net-snmp/bin/snmptrap -v 2c -c LI_OSS 10.184.74.66:162 "" 1.3.6.1.4.1.193.82.2.0.1 1.3.6.1.4.1.193.82.1.8.1.4.0 x "07de07100a0c1e002b0800"

x文字列 " 07de07100a0c1e002b0800" がある種の 16 進形式であることを意味します。

pysnmp を使用して同じタスクを完了しようとすると、トラップ デコーダ プログラムはトラップを受信しましたが、日付と時刻の解析に失敗します。トラップを送信するために使用するコードは次のとおりです。これは pysnmp の公式の例です

ホストと以下の部分のみを変更しました。

ntfOrg.sendNotification(
    snmpEngine,
    # Notification targets
    'my-notification',
    # Trap OID (SNMPv2-MIB::coldStart)
    (1,3,6,1,4,1,193,82,2,0,1),
    # ( (oid, value), ... )
    (
      ('1.3.6.1.4.1.193.82.1.8.1.4.0', rfc1902.OctetString('07de07100a0c1e002b0800'))

)
)

違いを理解するために、WireShark を使用してトラップを送信するパッケージをキャプチャしました。ここに違いがありsnmptrapます。pysnmp私は同じ TRAP OID を使用していませんが、現象は同じままであることに注意してください。

最初の写真は snmptrap を使用してトラップを送信したもので、もう 1 つは pysnmp を使用した場合です。オクテット ストリングスはまったく異なります。なぜこれが起こったのか誰か知っていますか?また、私の状況でpysnmpを使用してトラップを送信するにはどうすればよいですか? よろしくお願いします! snmptrap を使用してトラップを送信する場合pysnmp を使用してトラップを送信する場合

4

1 に答える 1

3

OctetString() オブジェクト初期化子として ASCII 文字列を渡しました。初期化子が 16 進文字列として解釈されることを OctetString コンストラクターに示す必要があります。これは、hexValue キーワード パラメータを使用して実行できます。検討:

>>> str(univ.OctetString('07de07100a0c1e002b0800'))
'07de07100a0c1e002b0800'
>>> str(univ.OctetString(hexValue='07de07100a0c1e002b0800'))
'\x07\xde\x07\x10\n\x0c\x1e\x00+\x08\x00'
于 2014-09-25T21:36:04.010 に答える