2010-11-28 4 views
5

私はlibpcapで2つのデバイスをリッスンしようとしていますが、やり方はまだ分かりません。私はデバイスを "any"に設定しようとしましたが、動作していません。私はeth0とeth1でリッスンする必要があるので、DHCPリレーエージェントを作成しようとしています。libpcapで一度に2つのデバイスをリッスンする

デバイスとハンドラがそれぞれ異なる2つのpcap_loopsを作成しようとしましたが、最初のpcap_loopだけが動作し、2つ目は無視されます。

これを行う方法はありますか、またはlibpcapを残して、rawソケットを使用してみる必要がありますか?

答えて

3

pcap_loop()を別々のスレッドで実行する必要があります。それぞれのインターフェイスごとに1つずつ実行する必要があります。

libpcapの一部はatleast pcap_setfilter()なのでスレッドセーフではありません。そのため、独自のロックを用意してください。

スレッドを使用したくない場合は、イベント・ループを自分で提供する必要があります。そこでは、選択/ポーリングまたは同様の方法で各デバイスのファイル記述子を監視します。 pcap_get_selectable_fd()でデバイスハンドルのファイル記述子を取得できます。

+0

ありがとう:)私はソケットを使用して終了しました:) – Pirozek

関連する問題