2010-12-08 14 views
2

injizierten Pakete erfasst, die derzeit über eine Möglichkeit nachdenken, an der gleichen Schnittstelle zu schnüffeln, indem nur pcap verwendet wird, und auch die Pakete mit pcap_inject injiziert.Verhindern, dass libpcap die mit pcap_inject()

Die Sache leicht gelöst werden kann, indem entweder:

  • persistent Prüfsumme Tracking/große langsame Karte /,
  • Prüfsumme Tracking -, bis alle Daten eingespritzt wurde, sagen wir, eine erste HTTP-Anforderung;
  • BPF/libipq/Netfilter Hacking für jedes echten PHY-Paket zusätzliche Parameter

Aber tragen:

pcap hört eth0/reale Welt Situation ist näher an "pcap hört und fällt über Quelle Magie" /, pcap sendet Pakete über den Handle von eth0, so dass sie weitergeleitet werden können. Was ist die theoretische Grundlage für libpcap, um Pakete nicht zu erfassen, die mit derselben Bibliothek in dieselbe Schnittstelle injiziert wurden - z. B. injizierte Pakete durchlaufen nicht den gesamten Paketfiltercode von Berkeley?

Praxistest TBD.

Antwort

1

Ihre Frage ist schwer zu analysieren, aber wenn ich Sie richtig verstehe, suchen Sie nach einer Möglichkeit, Pakete zu erfassen, die diejenigen ausschließen, die Sie injizieren. Sie können dies tun, indem Sie ein Capture-Filter, das nur an sieht, was auf die entsprechende Schnittstelle auf Ihrem Rechner ...

ether dst aa:bb:cc:dd:ee:ff 

gesendet ... oder dass erfasst alle außer dem, was sich auf der entsprechenden interfance gesendet wird:

Dies wird Auswirkungen auf den Verkehr von Ihrem Computer anders als das, was Sie injizieren, aber wenn Sie erfassen und injizieren dann wahrscheinlich nicht kümmern Sie sich über Ihre eigenen Maschine Pakete sowieso. Wenn Sie etwas Brauchbareres brauchen, sollte es nicht schwer sein, die Pakete zu identifizieren, die Sie gerade in den erfassten Paketen gesendet haben. (Ich nehme an, Sie meinen das mit Prüfsummen, aber ich sehe kein direktes Tabellenproblem.)

+0

Das ist genial einfach :) hab dein Kopfgeld. Andere Leute haben skbuff subsystem wieder erwähnt und gehen jetzt nicht so weit. –

+1

Sie könnten auch 'pcap_setdirection (p, PCAP_D_IN)' verwenden, wenn Sie nur Pakete * empfangen * auf der Schnittstelle sehen wollen. Beachten Sie jedoch, dass dies nicht nur bedeutet, dass Sie keine Pakete sehen, die Sie injizieren. Es bedeutet auch, dass Sie keine Pakete sehen, die Ihr Gerät über den normalen Netzwerkstapel überträgt. Dasselbe gilt jedoch, wenn Sie einen Filter verwenden die Ethernet-Quelladresse. –

1

Möglicherweise ignorieren Sie einfach Pakete mit der Eigenschaft skb->pkt_type == PACKET_OUTGOING im Empfangspfad.

+0

... wenn Sie Linux verwenden. Wenn Sie Linux nicht verwenden, müssen Sie einen anderen Mechanismus verwenden. –