2010-12-08 40 views
2

actuellement en train de penser à une possibilité de renifler à la même interface en utilisant seulement pcap et aussi d'injecter les paquets en utilisant pcap_inject.empêchant libpcap de capturer les paquets injectés avec pcap_inject()

La chose peut être résolu facilement en utilisant soit:

  • suivi total de contrôle persistante/grande carte lente /,
  • suivi de contrôle - jusqu'à ce que toutes les données ont été injecté, par exemple, une première demande de http;
  • hacking bpf/libipq/Netfilter pour transporter paramètre supplémentaire pour chaque vrai paquet de couche physique

Mais:

PPCE écoute situation eth0/RealWorld est plus proche de "PPCE écoute et tombe par la magie source" /, pcap envoie un paquet via le handle de eth0 afin qu'ils puissent être routés. Quelle est la base théorique pour libpcap de ne pas capturer les paquets qui ont été injectés à la même interface en utilisant la même bibliothèque - par exemple, les paquets injectés ne traversent pas tout le code de filtrage de paquets de Berkeley?

Test pratique à déterminer.

Répondre

1

Votre question est difficile à analyser, mais si je vous comprends bien, vous cherchez un moyen de capturer les paquets qui exclut ceux que vous injectez. Vous pouvez le faire en utilisant un filtre de capture qui ne regarde que ce qui est envoyé à l'interface pertinente sur votre machine ...

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

... ou qui capture tout sauf ce qui est envoyé sur le interfance concerné:

not ether src aa:bb:cc:dd:ee:ff 

Ceci affectera le trafic provenant de votre ordinateur autre que celui que vous injectez, mais si vous capturez et injectez, vous ne vous souciez probablement pas des paquets de votre propre machine. Si vous avez besoin de quelque chose de plus personnalisé, il ne devrait pas être difficile d'identifier les paquets que vous venez d'envoyer dans les paquets capturés. (Je suppose que c'est ce que vous voulez dire par checksumming, mais je ne vois pas de problème de table immédiat.)

+0

C'est génialement simple :) avoir votre générosité. Autre type a encore mentionné le sous-système skbuff, ne va pas si loin maintenant .. –

+1

Vous pouvez également utiliser 'pcap_setdirection (p, PCAP_D_IN)' si vous voulez voir seulement les paquets * reçus * sur l'interface. Notez toutefois que cela ne signifie pas que vous ne verrez pas les paquets que vous injectez, mais que vous ne verrez pas non plus les paquets que votre machine transmet via la pile de réseau normale. Il en va de même si vous utilisez un filtre sur l'adresse de la source Ethernet. –

1

Ignorez éventuellement les paquets avec la propriété dans le chemin de réception.

+0

... si vous utilisez Linux. Si vous n'exécutez pas Linux, vous devrez utiliser un autre mécanisme. –