[PYTHON] 2014/02/28 Résumé du contenu démo à #ssmjp, partie 1

J'ai présenté que vous pouvez le faire en préparant un fichier pcap avec un ping, une demande d'écho et une réponse d'écho.

J'ai écrit à propos de l'annonce à ssmjp sur le blog http://th0x0472.at.webry.info/201403/article_1.html

Tout d'abord, chargez la bibliothèque.

import dpkt

Ouvrez le fichier pcap.

>>> p=dpkt.pcap.Reader(open("demo.pcap","r"))
>>> p
<dpkt.pcap.Reader object at 0xfc1f10>

Vous pouvez obtenir une liste d'horodatages et de tuples de données de paquets avec readpkts ().

>>> len(p.readpkts())
2
>>> p.readpkts()
[(1393533576.809375, '\x00:\x9d\xbd5\xcc\x08\x00\'\xca\xd8\xe2\x08\x00E\x00\x00T\x17\xcd@\x00@\x01*\xef\xc0\xa8\x01\x10J}\xeb\xb7\x08\x00\xfc\xa1\x1a;\x00\x01\x88\xa2\x0fS\x00\x00\x00\x00~Y\x0c\x00\x00\x00\x00\x00\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'()*+,-./01234567'), (1393533577.117797, '\x08\x00\'\xca\xd8\xe2\x00:\x9d\xbd5\xcc\x08\x00E\x00\x00T\x9c\xfe\x00\x008\x01\xed\xbdJ}\xeb\xb7\xc0\xa8\x01\x10\x00\x00\x04\xa2\x1a;\x00\x01\x88\xa2\x0fS\x00\x00\x00\x00~Y\x0c\x00\x00\x00\x00\x00\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'()*+,-./01234567')]

Vous pouvez accéder à n'importe quel paquet de données comme celui-ci.

>>> p.readpkts()[0][1]
'\x00:\x9d\xbd5\xcc\x08\x00\'\xca\xd8\xe2\x08\x00E\x00\x00T\x17\xcd@\x00@\x01*\xef\xc0\xa8\x01\x10J}\xeb\xb7\x08\x00\xfc\xa1\x1a;\x00\x01\x88\xa2\x0fS\x00\x00\x00\x00~Y\x0c\x00\x00\x00\x00\x00\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'()*+,-./01234567'

Transforme les données par paquets en objet de classe Ethernet.

>>> dpkt.ethernet.Ethernet((p.readpkts()[0][1]))
Ethernet(src="\x08\x00'\xca\xd8\xe2", dst='\x00:\x9d\xbd5\xcc', data=IP(src='\xc0\xa8\x01\x10', off=16384, dst='J}\xeb\xb7', sum=10991, len=84, p=1, id=6093, data=ICMP(sum=64673, data=Echo(id=6715, seq=1, data='\x88\xa2\x0fS\x00\x00\x00\x00~Y\x0c\x00\x00\x00\x00\x00\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'()*+,-./01234567'))))
>>> dpkt.ethernet.Ethernet((p.readpkts()[0][1])).data
IP(src='\xc0\xa8\x01\x10', off=16384, dst='J}\xeb\xb7', sum=10991, len=84, p=1, id=6093, data=ICMP(sum=64673, data=Echo(id=6715, seq=1, data='\x88\xa2\x0fS\x00\x00\x00\x00~Y\x0c\x00\x00\x00\x00\x00\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'()*+,-./01234567')))

Prenez un paquet IP et regardez l'adresse IP source.

>>> req=dpkt.ethernet.Ethernet((p.readpkts()[0][1])).data
>>> req.src
'\xc0\xa8\x01\x10'

C'est difficile à voir à ce rythme, mais il est plus facile de voir si vous utilisez la bibliothèque de sockets.

>>> import socket
>>> socket.inet_ntoa(req.src)
'192.168.1.16'

Recommended Posts

2014/02/28 Résumé du contenu démo à #ssmjp, partie 1
Résumé des connaissances de base de PyPy Partie 1
Contenu de __name__
Résumé de Kaggle: Redhat (Partie 1)
Résumé de Tensorflow / Keras
Obtention du contenu de sosreport
Résumé de l'utilisation de pyenv
Résumé des opérations sur les chaînes
[Note] Contenu de la forme [0], forme [1], forme [2]
Résumé de Kaggle: Redhat (partie 2)
Résumé des arguments Python
Résumé de la méthode d'essai
Comment mélanger une partie de la liste Python (au hasard.shuffle)
Résumé de l'exploration d'image effectuée à la vitesse d'une seconde