1

libpcap を使用して、いくつかの「ネットワーク インターフェイス」(ループバックを含む) をスニッフィングしようとしています。

サンプル アプリケーションでは、ポート 1234、1235、および 1236 のループバックからのパケットがあります。libpcap_setfilter() を使用して、これらのアドレスからのパケットのみを libpcap フィルター処理する方法を既に見つけました。私の目標は、これらのパケットを適切に転送することでした。送信元のアドレス/ポート (たとえば、127.0.0.1/1234 からのパケットは eth0 インターフェイスを通過できます。127.0.0.1/1235 からのパケットは eth1 を介して転送され、127.0.0.1/1235 からのパケットは eth1 を介して転送されます。 0.1/1236 は eth2 経由で転送できます)。

私の質問は次のとおりです。これらのパケットの内容を確認せずに、これらのパケットがどのポートから来たかを正確に知る方法はありますか? たとえば、多くのフィルターを設定して、どのフィルターからパケットをフィルター処理したかをどうにかして知ることはできますか?

私はすでに多くのドキュメントとチュートリアルを読みましたが、これまでのところ役に立たなかったようです。「できない」という回答でもOKです。

前もって感謝します。

4

1 に答える 1

1

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

pcap_tただし、同じネットワーク インターフェイスに対して複数の を開き、それらに異なるフィルタを適用することはできます。ただし、複数の からの読み取りpcap_tは、プラットフォームに依存する可能性があります。「eth0」、「eth1」、および「eth2」から、これは Linux であると推測されるので、select()またはpoll()または... の戻り値に対して、pcap_get_selectable_fd()およびpcap_tselect()またはpoll()または...は、指定された記述子が読み取り可能であることを示し、その のプロセス パケットにpcap_dispatch()対応するを呼び出します。pcap_tpcap_t

于 2012-05-05T00:13:24.660 に答える