5

libpcap を使用して 2 つのデバイスでリッスンしようとしていますが、その方法がわかりません。デバイスを「任意」に設定しようとしましたが、機能しません。dhcp リレー エージェントを作成しようとしているので、eth0 と eth1 でリッスンする必要があります。

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

これを行う方法はありますか、それとも libpcap を離れて raw ソケットで実行する必要がありますか?

4

1 に答える 1

3

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

libpcapの一部はスレッドセーフではありませんが、少なくともpcap_setfilter()なので、その周りに独自のロックを提供します。

スレッドを使用したくない場合は、自分でイベントループを提供する必要があります。このループでは、select/pollなどを使用して各デバイスのファイル記述子を監視します。pcap_get_selectable_fd()を使用して、デバイスハンドルのファイル記述子を取得できます。

于 2010-11-28T22:54:11.720 に答える