0

いくつかの SNMP トラップ (メッセージ) を受信して​​解析する必要があります。OS X マシンで動作しているコードを取得するためのアドバイスをいただければ幸いです。net-snmp を使用して、Windows で実行される Java コードをいくつか受け取りました。Java コードを開発マシンで実行するか、Python コードを作成して同じことを行いたいと考えています。

私の OS X マシンで Java コードをコンパイルすることができました。問題なく動作し、ソケット 8255 にバインドできなかった場合にスローされると予想される例外もありませんでした。 SNMP トラップ。本当にソケットを読み取れるのか疑問に思います。ソケットにバインドする Java プログラムからコードを収集すると、次のようになります。

DatagramChannel dgChannel1=DatagramChannel.open();
Selector mux=Selector.open();
dgChannel1.socket().bind(new InetSocketAddress(8255));
dgChannel1.configureBlocking(false);
dgChannel1.register(mux,SelectionKey.OP_READ);
while(mux.select()>0) {
    Iterator keyIt = mux.selectedKeys().iterator();
    while (keyIt.hasNext()) {
        SelectionKey key = (SelectionKey) keyIt.next();
        if (key.isReadable()) {
            /* processing */
        }
    }
}

私は Java を知らず、Python をいじるのが好きなので、libsnmpをインストールして、それを機能さeasy_installせようとしました。サンプル プログラムtraplistener.pytrapsender.pyは互いに通信するのに問題はありませんがtraplistener.py、自分自身の SNMP 信号を待って実行すると、何も受信できません。sudoソケットへのアクセス許可を得るには、python プログラムを実行する必要があったことに注意してください。sudo 経由で Java プログラムを実行しても効果はありませんでした。

これらすべてのことから、両方のプログラムが OS X とそのソケット、おそらくそれらのパーミッションに問題を抱えていると思われます。たとえば、/dev/bpfWireshark を機能させるには、デバイスのアクセス許可を変更する必要がありました。もう 1 つの考えは、eth0 (Wireshark のおかげでトラップ メッセージが表示されるイーサネット) と eth1 (wifi) を含む、複数のネットワーク アダプターが有効になっている私のマシンに関係があるということです。これが問題でしょうか?

ご覧のとおり、私はソケットや SNMP についてほとんど知識がありません。

更新:lsof (正確には)を使用sudo lsof -i -n -Pすると、トラップ送信者が IPv4 を使用している場合、Java プログラムが IPv6 でのみリッスンすることが問題のようです。IPv6 を無効にして ( sudo ip6 -x)、Java に IPv4 を使用するように指示してみました ( java -jar bridge.jar -Djava.net.preferIPv4Stack=true) が、IPv6 を使用しているプログラムが引き続き見つかります。何かご意見は?

java      16444          peter   34u  IPv6 0x12f3ad98      0t0    UDP *:8255

更新 2: OK、Java パラメータの順序が間違っていたと思います:java -Djava.net.preferIPv4Stack=true -jar bridge.jarプログラムを IPv4 に配置します。ただし、私のプログラムは、そこにあることがわかっているパケットを受信する兆候をまだ示していません。

4

2 に答える 2

0

SNMP トラップの標準ポート番号は 162 です。

別のポート番号を指定している理由はありますか? 通常、トラップが送受信されるポート番号は変更できますが、明らかに両端が一致している必要があります。だから、これがあなたの問題かどうか疑問に思っています。

于 2009-07-16T09:57:36.777 に答える
0

OK、コードを機能させるための解決策は、プログラムを実行しjava -Djava.net.preferIPv4Stack=true -jar bridge.jar、SNMP トラップ送信者の電源を入れ直すことでした。助けてくれてありがとう、ブライアン。

于 2009-07-16T18:41:53.877 に答える