Comment faire pour capturer le paquet HTTP avec SharpPcap
Je voudrais capturer tous les paquets HTTP de ma machine. Pour le faire, je suis en utilisant SharpPcap qui est un WinPcap wrapper.
SharpPcap fonctionne très bien, mais il capture les paquets TCP et c'est trop bas niveau pour faire ce que je veux. Personne ne sait comment je peux facilement obtenir toutes les requêtes HTTP/réponses de tous ces paquets TCP ?
Grâce
OriginalL'auteur Michael Alves | 2009-12-07
Vous devez vous connecter pour publier un commentaire.
SharpPcap est déjà en mesure de capturer les paquets de la même manière que wireshark (juste dans le code plutôt que d'une interface graphique (GUI). Et vous pouvez soit les analyser directement ou vous pouvez les exporter vers le lecteur dans la commune .ppce format de fichier.
Les étapes pour analyser une capture sont:
Si vous êtes en train de lire .ppce les fichiers de vidage, le processus est presque le même sauf que vous appelez hors ligne capture lecteur, n'a pas besoin de choisir une interface, et n'ont pas besoin de définir le mode promiscuous. Tous les filtres standard que wireshark, tcpdump, et la plupart des autres Ppce cadres d'utilisation sont pris en charge dans SharpPcap. Pour faire référence à ces vérifiez le tcpdump homme.
Actuellement, il n'existe pas de support de l'analyse HTTP directement, mais l'analyse des paquets TCP est vraiment facile.
Lorsque vous recevez les paquets bruts (non analysé) faire:
L'Packet.Net (Un composant de SharpPcap) analyseur est capable de sortir de la TCP partie directement, même si la communication est encapsulé par VPN, PPoE, ou PPP.
Une fois que vous avez la TCPPacket analysée, il suffit de saisir paquet.PayloadBytes de la charge utile dans un tableau d'octets qui doit contenir l'en-tête HTTP dans raw octets qui peuvent être convertis au bon format texte (je ne suis pas vraiment sûr si les en-têtes HTTP utiliser l'UTF-8 ou le codage ASCII à ce niveau). Il devrait y avoir beaucoup de librement disponible bibliothèques/outils pour analyser les en-têtes HTTP.
Pour extraire le paquet HTTP TCP:
Vous avez besoin de collecter les paquets tcp de la connexion comme ils viennent, et si les données sont fragmentées (plus de 1500 octets) vous avez besoin de ré-assembler les pièces dans la mémoire. Afin de découvrir les pièces dans quel ordre vous devez surveiller soigneusement la séquence/reconnaissance des nombres.
C'est un non-trivial de le faire avec des SharpPcap parce que vous travaillez avec beaucoup moins de la partie de la pile, et re-montage de la connexion manuellement.
Wireshark a un article intéressant sur la façon d'accomplir ceci dans C.
De plein droit maintenant, SharpPcap ne prend pas en charge le protocole TCP charge de l'analyse.
Si vous êtes à la recherche de facile-à-suivent des exemples d'utilisation de SharpPcap télécharger la source de l'arbre et regardez l'exemple des projets inclus. Il y a aussi un tutoriel pour SharpPcap sur codeproject.
Si vous avez plus de questions et/ou vous voulez faire des demandes de fonctionnalités au projet, n'hésitez pas à poster sur le projet sur SourceForge. Il est loin d'être morte et continue de faire l'objet d'un développement actif.
Remarque: Chris Morgan est le chef de projet et je suis l'un des développeurs pour SharpPcap/Paquet.Net.
Mise à jour: Le projet didacticiel sur le code du projet est maintenant à jour pour correspondre à l'API actuelle.
GetEncapsulated
est égal àPacket.ParsePacket(e.Packet.LinkLayerType, e.Packet.Data);
droit?OriginalL'auteur Evan Plaice
Décodage d'un flux TCP HTTP paires de demande/réponse est non trivial. Des outils comme WireShark faire cela avec un effort considérable.
J'ai écrit un WireShark wrapper pour Ruby (non que ça peut vous aider), mais avant je l'ai écrit j'ai essayé d'utiliser tshark (la version ligne de commande de WireShark). Qui n'a pas résolu mon problème, mais il peut travailler pour vous. Voici comment:
De capturer les paquets et de les écrire dans un fichier pcap (SharpPcap a probablement un moyen de le faire). À un certain point, fermer le bouchon de fichiers et d'en lancer un autre, puis sur l'ancien exécuter tshark avec un filtre pour le trafic HTTP, et un drapeau indiquant que vous voulez de la sortie dans les PDML format. Vous trouverez ce est un format XML, facilement analysée avec le System.Xml des outils, qui contient la valeur de chaque champ HTTP dans une variété de formats. Vous pouvez écrire du code C# pour frayer tshark, et de rediriger sa sortie standard (StdOut) flux dans un lecteur XML de sorte que vous obtenez les paquets de tshark à mesure de leur apparition. Je ne recommande pas l'utilisation de DOM parser comme le PDML de sortie pour un grand fichier de capture pouvez obtenir fou très rapidement.
À moins que vos besoins sont complexes (comme le mien), ce peut être tout ce dont vous avez besoin.
Avez-vous le code posté quelque part (ex GitHub). Si oui, j'aimerais prendre un coup d'oeil à un certain point. J'aimerais voir comment beaucoup de code, de l'effort qu'il a fallu pour gérer le protocole TCP re-étape du montage.
Je ne sais pas si PDML est une norme ou quelque chose de spécifique à wireshark, en tout cas elle est facile à traiter.
Le code de mon Ruby extension est à github.com/anelson/rcapdissector. Notez que cela a été construit avec une version de WireShark à partir d'un il ya quelques années; il ne sera probablement pas compiler sans modification à l'aide de la dernière WireShark sources.
Merci. Je n'ai pas besoin de compiler. J'aimerais juste voir comment elle fonctionne de la curiosité personnelle. J'ai passé beaucoup de temps à lire les Rfc et la mise en œuvre des analyseurs j'ai donc une appréciation pour le travail de (ambigu) spécifications utilisable pour code.
OriginalL'auteur anelson
Je pense que vous êtes proche de la solution: si vous avez les paquets TCP à partir du trafic HTTP, vous n'avez qu'à extraire le TCP charge utile afin de reconstruire la requête/réponse HTTP. Voir ce AINSI l'entrée sur un possible moyen de le faire.
OriginalL'auteur Laurent Etiemble