11
votes

Comment filtrer un fichier PCAP par protocole spécifique à l'aide de Python?

J'ai des fichiers PCAP et je veux filtrer par protocole, c'est-à-dire si je veux filtrer par protocole HTTP, tout sauf les paquets HTTP resteront dans le fichier PCAP.

Il y a un outil appelé OpendPI , et c'est parfait pour ce dont j'ai besoin, mais il n'y a pas d'emballage pour langue python.

Quelqu'un sait-il des modules Python pouvant faire ce dont j'ai besoin?

merci

Edit 1:

Le filtrage HTTP n'était qu'un exemple, il y a beaucoup de protocoles que je veux filtrer.

edit 2:

J'ai essayé Scapy, mais je ne trouve pas comment filtrer correctement. Le filtre n'accepte que l'expression du filtre de paquets Berkeley, c'est-à-dire que je ne peux pas appliquer de MSN, ni http, ou un autre filtre spécifique de la couche supérieure. Quelqu'un peut-il m'aider?


0 commentaires

8 Réponses :


3
votes

Essayez PYLIBPCAP .


3 commentaires

Mais je ne veux pas analyser chaque paquet pour vérifier le protocole que je veux, je veux une solution simple (comme OpendPI). De plus, je ne veux pas m'inquiéter du "numéro magique" de tous les protocoles existant. S'il n'y a pas de solution, je devrai le faire. Merci


A pensées couple: 1. la plupart des bibliothèques pcap python vous permettent de définir un filtre FPB sur les paquets capturés. HTTP est un filtre facile port tcp 80 . 2. Vous pouvez utiliser Wireshark ou une interface graphique similaire pour isoler les paquets que vous voulez, sauver ceux à un pylibpcap de dumpfile et de l'utilisation ou d'une autre de ces bibliothèques pour fonctionner sur eux.


Il n'y a pas moyen d'être "analysant chaque paquet". Vous pouvez avoir un programme qui le fait dans les coulisses pour vous, c'est tout ce que vous pouvez espérer.



4
votes

quelque chose sur les lignes de xxx

en utilisant

http://oss.coresecurity.com/projects/impacket.html


1 commentaires

Erreur dans l'exemple. Deuxième enfant devrait être = enfant.child () non = paquet.child ()



19
votes

Un exemple rapide utilisant Scapy, car je viens d'écrire un: xxx

qui filtrera des paquets qui ne sont ni http ni smtp. Si vous voulez tous les paquets mais http et smtp, la troisième ligne doit être: xxx


0 commentaires

1
votes

Pour filtrer dans / OUT un protocole spécifique Vous devez faire une analyse par paquets, sinon vous pourriez manquer du trafic HTTP sur un port non conventionnel qui circule dans votre réseau. Bien sûr, si vous voulez un système en vrac, vous pouvez vérifier uniquement pour le numéro de port de source et de destination, mais que vous ne vous donnerez pas de résultats exacts. Vous devez rechercher une caractéristique spécifique d'un protocole comme Get, Post, Tête Mots-clés pour HTTP et autres pour un autre protocole et consultez chaque paquets TCP.


1 commentaires

Ouais, ce n'est pas une chose magique et facile comme je pensais initialement. Scapy résoudra mon problème spécifique aussi loin que je me souvienne. Merci



13
votes

Je sais que c'est une question super-vieille, mais je viens de courir à travers elle pensait fournir mon . C'est un problème que j'ai rencontré à plusieurs reprises au fil des ans et je continue à me retrouver à rester revenir à dpkt < / a>. À partir du très capable Dugsong , DPKT est avant tout une bibliothèque de création / analyse de paquets. J'ai le sens que l'analyse PCAP a été une réflexion après coup, mais elle s'avère très utile, car une analyse PCAP, IP, TCP et et TCP est simple. Il analyse tous les protocoles de niveau supérieur qui deviennent le temps couler! (J'ai écrit ma propre bibliothèque d'analyse PCAP Papap avant de trouver DPKT)

La documentation sur l'utilisation de la fonctionnalité d'analyse PCAP est un peu mince. Voici un exemple de mes fichiers: xxx

espère que cela aide le prochain gars à courir sur ce post!


2 commentaires

On dirait que dpkt n'est plus maintenu. code.google.com/p/dpkt/issues/list toute autre suggestion Pour analyser le fichier PCAP? Ce qui n'est pas un pita pour installer sur Mac et Linux?


Un paquet comme DPKT n'est jamais "complet" - l'environnement est trop dynamique. Vous devez être prêt à creuser lorsque vous devez. Je n'ai jamais eu de problème avec l'installation sur Mac ou Linux, même dans les deux derniers mois: juste python setup.py installer . Vérifiez vos hypothèses, quelque chose d'autre est probablement très bonky quelque part.



1
votes

J'ai essayé la même méthode @nmichaels, mais elle devient fastidieuse lorsque je veux y introduire sur plusieurs protocoles. J'ai essayé de trouver des moyens de lire le fichier .pcap, puis de le filtrer, mais je n'ai trouvé aucune aide. Fondamentalement, lorsque l'on lit un fichier .pcap, il n'ya aucune fonction en Scapy, ce qui permet de filtrer ces paquets, d'autre part à l'aide d'une commande comme, xxx

aide à filtrer mais uniquement en reniflant.

Si quelqu'un connaît une autre méthode dans laquelle nous pouvons utiliser une syntaxe BPF au lieu de la déclaration pour la déclaration?


1 commentaires

Vous pouvez généraliser ma méthode pour utiliser un générateur réel au lieu d'une expression génératrice. Cela devrait faire un code relativement effacé.



3
votes

sniff prend en charge une option hors ligne dans laquelle vous pouvez fournir le fichier PCAP en entrée. De cette façon, vous pouvez utiliser les avantages de filtrage de la commande Sniff sur le fichier PCAP.

>>> packets = sniff(offline='mypackets.pcap')
>>>
>>> packets
<Sniffed: TCP:17 UDP:0 ICMP:0 Other:0>


0 commentaires

0
votes

Voici mon Exemple d'analyse de PCAP à l'aide de Scapy. Il possède également un code pertinent pour les tests de performance et d'autres autres.


0 commentaires