2012-05-04 4 views
1

私はlibpcapを使っていくつかの "ネットワークインタフェース"(ループバックを含む)を盗もうとしています。私のパケットがどのpcapフィルタから来たのかを知る

私のアプリケーションでは、ポート1234,1235、および1236のループバックからのパケットがあります。libpcapはこれらのアドレスから来るパケットのみを、libpcap_setfilter()を使ってフィルタリングする方法をすでに見つけました。これらのパケットをそれに対応するアドレス/ポートに転送します(たとえば、127.0.0.1/1234からのパケットはeth0インターフェイスを経由し、127.0.0.1/1235からのパケットはeth1経由で転送されます)。 127.0.0.1/1236から来て、eth2経由で転送することができます)。

私の質問です:コンテンツを見ることなく、これらのパケットがどのポートから来たのか正確に知る方法はありますか?たとえば、多くのフィルタを設定したり、パケットをフィルタリングしたフィルタが何であるかを何らかの形で知ることができますか?

私は既に多くのドキュメントとチュートリアルを読んでいますが、今までは役に立たなかったようです。答えが "それは不可能"であれば、私はまたOKです。

ありがとうございます。

答えて

1

libpcapが実行されるキャプチャメカニズムは1つのフィルタしかサポートしないため、libpcapには複数のフィルタを設定するAPIがありません。

ただし、同じネットワークインターフェイスに対して複数のpcap_tを開いて、異なるフィルタを適用することはできます。ただし、複数のpcap_tからの読み取りは、プラットフォームに依存する可能性があります。私は "eth0"、 "eth1"、 "eth2"からLinuxであると推測しているので、のpcap_get_selectable_fd()の戻り値にはselect()またはpoll()または...を使用できるはずです。select()またはpoll()または...指定されたディスクリプタが読み込み可能であると、対応するpcap_tpcap_dispatch()を呼び出して、それに対応するパケットを処理します。pcap_t

関連する問題