2009-05-06 8 views
3

Ich habe Regeln eingerichtet, um UDP/TCP-Pakete mit übereinstimmenden Strings zu löschen. Jedoch ist mein Programm, das Paket mit libpcap erfasst, immer noch in der Lage, dieses Paket zu sehen.iptables und libpcap

Warum ist das /, was sollten die iptable-Regeln sein, um Pakete fallen zu lassen, bevor sie von libpcap erkannt werden?

Gibt es trotzdem, vielleicht andere als iptables Regeln, um dieses Paket fallen zu lassen, bevor es von libpcap/tcpdump erkannt wird?

Antwort

7

Yes, libpcap sees all the packets.. Sie werden erfasst, bevor sie vom netfilter verarbeitet werden.

+0

danke, jede andere Möglichkeit, abgesehen von iptables, diese Pakete fallen zu lassen, bevor sie libpcap erreichen? – Kazoom

+0

Wenn das nicht-LAN-Pakete sind, können Sie sie auf dem Router ablegen. –

+0

Auch mit libpcap-basierten Programmen können Sie normalerweise einen Filter im Standardformat tcpdump bereitstellen. –

-2

Es gibt keine Möglichkeit für libpcap, die Pakete vor netfilter zu sehen, netfilter ist ein Kernelmodul und verarbeitet alle Pakete, bevor sie den Benutzermodus erreichen, sie können sogar die Pakete sehen, bevor der Kernel sie sieht. Könnten Sie das weiter erklären? Es ist möglich, dass libpcap Hooks auf netfilter setzt, die die in iptables überschreiben. Das eigentliche Problem ist, dass das Suchen und Festlegen von Hooks auf Netfilter alles andere als trivial ist und nur im Kernel-Modus erfolgen kann. Untersuchen Sie, wie libpcap die Pakete abruft.

+0

libpcap verwendet keine Netfilter-Hooks, um die Pakete zu erfassen. libpcap erfasst Pakete, bevor sie an den TCP/IP-Stack übergeben werden – codingfreak

0

Haben Sie versucht, die Priorität des verwendeten Netfilter-Hooks zu ändern? Wenn Sie versuchen, für eingehende Pakete die höchste Priorität einzunehmen, wird das Paket vor dem Packet-Socket-Kernel-Code abgerufen. Dies ist die Art und Weise, wie libpcap Pakete erfasst.

* Ich nehme an, Sie Linux verwenden *

EDIT: Libpcap verschiedene Arten verwendet, um Pakete zu erfassen - entsprechend dem Betriebssystem. Unter Linux verwendet es Packet-Socket, das im Kernel-Code unter Verwendung des netfilter-Frameworks implementiert ist.