L'analyse du ppce de fichiers avec dpkt (Python)
Je suis en train d'analyser préalablement trace capturée pour les en-têtes HTTP en utilisant la dpkt module:
import dpkt
import sys
f=file(sys.argv[1],"rb")
pcap=dpkt.pcap.Reader(f)
for ts, buf in pcap:
eth=dpkt.ethernet.Ethernet(buf)
ip=eth.data
tcp=ip.data
if tcp.dport==80 and len(tcp.data)>0:
try:
http=dpkt.http.Request(tcp.data)
print http.uri
except:
print 'issue'
continue
f.close()
Bien qu'il semble effectivement analyser la plupart des paquets, je reçois un NeedData("fin prématurée de les en-têtes") exception sur certains. Ils semblent être valide paquets dans WireShark, donc je suis un peu confus quant à pourquoi les exceptions sont lancés.
Certaines de sortie:
/ec/fd/ls/GlinkPing.aspx?IG=4a06eefebcc1495f8f4de7cb41f0ce5c&CID=2265e1228f3451ff8011dcbe5e0cdff7&ID=API.YAds%2C5037.1&1307036510547
issue
issue #misses one packet here, two exceptions
/?ld=4vyO5h1FkjCNjBpThUTGnzF50sB7QUGL0Ok8YefDTWNmO6RXghgDqHXtcp1OqeXATbCAHliIkglLj95-VEwG6ZJN3fblgd3Lh5NvTp4mZPcBGXUyKqXn9FViBAsmt1T96oumpCL5gm7gZ3qlZqSdLNUWjpML_9I8FvB2TLKPSYcJmb_VwwvJhiHpiUIvrjRdzqdVVnuQZVjQmZIIlfaMq0LOmgew_plopjt7hYvOSzBi3VJl4bqOBVk3zdhIvgZK0SfJp3kEWTXAr2_UU_q9KHBpSTnvuhY2W1xo3K2BOHKGk1VAlMiWtWC_nUaJdZmhzzWfb6yRAmY3M9YkUzFGs9z10-70OszkkNpVMSS3-p7xsNXQnC3Zpaxks
Aide est très appréciée; peut-être une alternative bibliothèque recommandation est nécessaire.
- Vous devriez comparer la "longueur capturé" par rapport à la "longueur d'origine." Par défaut ppce va tronquer long de paquets, de sorte que vous pouvez peut-être pas certains de l'origine des données, sauf si vous modifiez vos options lors de la capture.
- Si la requête HTTP est divisé en deux ou plusieurs paquets, votre décodeur correctement le déchiffrer? Je pense que le code est en faisant l'hypothèse que la demande de tenir dans un seul paquet.
- Ah, j'ai mis le snaplen à 0 lors de la capture à l'aide de tcpdump et qui a résolu mon problème. Merci.
Vous devez vous connecter pour publier un commentaire.
J'ai rencontré le même problème, tout en travaillant avec des Requêtes HTTP et dpkt.
Le problème est que le dpkt en-têtes HTTP analyseur utilise fausse logique. Cette exception est levée lorsque le HTTP ne prend pas fin avec
\r\n\r\n
. (Et comme vous le dites, il y a beaucoup de bons paquets sans\r\n\r\n
à la fin.)Ici est la rapport de bug à votre problème.
Dans votre code python, avant affectation ip=eth.les données vérifier que si l'Ethernet est de type IP ou non. Si le Ethernet type n'est pas ip ne rien faire pour le paquet. Et de vérifier si le protocole IP est le protocole TCP
modifié le code de votre programme
comme
en ce qui concerne
Irengbam Tilokchan Singh
J'ai ajouté un exemple de dpkt qui traite et affiche les en-Têtes HTTP. La documentation peut être trouvée ici: http://dpkt.readthedocs.io/en/latest/print_http_requests.html et le code de l'exemple peut être trouvé dans dpkt/examples/print_http_requests.py
Exemple De Sortie