2010-12-10 44 views
0

J'écris un petit renifleur dans le cadre d'un projet personnel. J'utilise Net::Pcap (outil vraiment vraiment génial).Perl network frame/packet parser

Dans la boucle de traitement de paquets j'utilise l'excellent Net::Frame pour déballer tous les en-têtes et obtenir les données. Je m'inquiète que cela ne soit pas terriblement efficace (Net::Frame est génial mais semble être plus que ce dont j'ai besoin pour ce projet). Je n'aime pas non plus que pour certains systèmes Debian je devais compiler manuellement libdumbnet (le paquet fourni dans les dépôts apt officiels ne semblait pas fonctionner, Net-Libdnet-0.92 ne l'a pas aimé).

Tout ce que je veux, c'est obtenir la charge utile dans un segment TCP. Y a-t-il une alternative? Merci.

P.S. Serait-ce vraiment très mauvais (lire "thedailywtf.com digne") si je viens de prendre le paquet et cherché un motif?

+0

Je suppose que unpack() serait une meilleure idée que RE pour traiter les paquets TCP. – Dallaylaen

Répondre

1

J'ai récemment écrit un décompresseur de fichier de vidage PCAP en C, puis j'ai souhaité utiliser les bibliothèques open source à la place (quand j'ai réalisé qu'elles existaient et étaient si faciles à utiliser). Je dois dire que comme c'est un format de fichier binaire, il est probablement plus facile à faire en C que Perl, mais je vais sans aucun doute me faire berner par tous les fanatiques de Perl. Ce que je dirais c'est qu'utiliser du code existant sera plus rapide que de le coder vous-même, mais si vous le voulez vraiment, le format de fichier est disponible gratuitement en ligne et est vraiment très simple. En ce qui concerne la recherche d'un motif, il ne fonctionnera presque certainement pas. C'est un format de fichier binaire et les paquets peuvent être fragmentés et/ou dupliqués, donc le seul moyen fiable de savoir où débute et se termine un message est de déballer les en-têtes, vérifier les drapeaux, lire le contenu, etc. Faire des recherches de modèles peut fonctionner 90% du temps, mais à un moment donné, vous trouverez un journal de capture de paquets qui signifie que vous devez changer votre code. Et puis un peu plus tard trouver un autre paquet qui signifie un autre changement, et ainsi de suite.

+0

Juste curieux: quelles bibliothèques Open Source souhaitez-vous avoir utilisées? – nc3b

+0

libpcap. C'est la bibliothèque PCAP sous-jacente utilisée par tcpdump, Wireshark, etc. C'est probablement aussi la bibliothèque sous-jacente pour Net :: Pcap et Net :: Frame aussi. – AlastairG