2010-11-28 25 views
5

Ich versuche auf zwei Geräten mit libpcap zu hören, aber ich kann immer noch nicht herausfinden, wie man den Trick macht. Ich habe versucht, das Gerät auf "Any" zu stellen, aber es funktioniert nicht. Ich versuche, Dhcp-Relay-Agent zu schreiben, also muss ich auf eth0 und eth1 hören.Hören auf zwei Geräten gleichzeitig mit libpcap

Ich habe versucht, zwei pcap_loops, jeweils mit anderen Gerät und Handler, aber nur erste pcap_loop funktioniert, zweite wird ignoriert.

Gibt es eine Möglichkeit, dies zu tun, oder sollte ich libpcap verlassen und versuchen, es mit rohen Sockets zu tun?

Antwort

3

Sie müssen Ihre pcap_loop() in separaten Threads ausführen, einen für jede Schnittstelle, wir tun das, und es funktioniert.

Einige Teile von libpcap, ist nicht threadsicher, zumindest pcap_setfilter(), also stellen Sie Ihr eigenes Locking zur Verfügung.

Wenn Sie keine Threads verwenden möchten, müssen Sie selbst eine Ereignisschleife bereitstellen, in der Sie die Dateideskriptoren jedes Geräts mit select/poll oder ähnlichem überwachen. Sie können den Dateideskriptor für ein Geräte-Handle mit pcap_get_selectable_fd() abrufen.

+0

Danke :) Ich endete mit Sockets :) – Pirozek

Verwandte Themen