2010-12-01 40 views
0

J'ai écrit un programme C très simple pour faire une capture de paquets en utilisant pcap. Chose est, il ne reprend que sur un petit sous-ensemble de mon activité réseau. (Je pense que le modèle est qu'il ne prend que sur les nouvelles connexions TCP.)pcap seulement ramasser sur les nouvelles connexions

Par exemple, il ramasse un paquet de paquets quand je fais une requête GET avec un navigateur ou avec wget, ou quand je démarre mon client IRC X-Chat et se connecter. Cependant, lorsque je laisse mon client IRC en cours d'exécution, il ne reprend pas les paquets correspondant aux messages texte. De même, il ne reprend pas les diffusions ARP sur mon réseau domestique, ni les paquets ping lorsque je fais un ping sur un site web.

Je me demande pourquoi ce n'est que sur ce petit sous-ensemble des paquets que j'envoie ou que je reçois. Voici mon code. Je suis reconnaissant pour tout commentaire.

code: http://pastebin.com/QDHRy6jM

Répondre

0

le fixe. Quand je change ma valeur TIMEOUT de -1 à quelque chose d'autre cela fonctionne (c.-à-d. Il ramasse sur toute l'activité de réseau). Je ne sais pas vraiment ce qui se passe là-bas (je n'y ai pas encore pensé), donc si quelqu'un le fait, s'il vous plaît.

0

Ce qui est probablement qui se passe est que vous êtes en cours d'exécution sur une plate-forme où le délai d'attente se comporte comme il le fait avec FPB (* BSD, OS X), Solaris ou Windows avec WinPCAP, dans lequel le mécanisme de capture de paquets sous-jacent pcap n'utilise pas les paquets immédiatement, mais met en mémoire tampon un paquet de paquets et les délivre à pcap soit quand le buffer se remplit, soit quand le timeout expire, et -1 est soit interprété comme "no timeout" ou "très long" temps libre".

Dans ce cas, si suffisamment de paquets arrivent pour remplir le tampon, comme cela peut être le cas si vous obtenez un HTTP get et une réponse suffisamment grande revient, ou si la session IRC implique beaucoup de paquets à connecter, les paquets apparaîtront, mais si seulement des paquets occasionnels arrivent, tels que des paquets ARP sur un réseau principalement silencieux, les paquets resteront dans le tampon jusqu'à ce que suffisamment de paquets arrivent pour remplir le tampon, ce qui pourrait prendre un temps indéfiniment long, ou le très long délai expire, ce qui peut prendre un certain temps. Réduire le délai (tcpdump utilise 1000, soit 1 seconde, et Wireshark utilise 100, c'est-à-dire 1/10 seconde) signifie que les paquets apparaîtront dans un laps de temps raisonnablement court, même s'il n'y a pas assez de paquets pour remplir le tampon.