[Table des matières] - [précédent] - [suivant]
Titre : Utiliser des fichiers PCAP
Option : Sortie graphique 2D
Paquets utiles : pyx
Vous connaissez sans doute un logiciel de capture et de lecture de trames. Si aucun nom ne vous saute au visage voici une petite aide : snoop, tcpdump, ethereal, wireshark...
Une des nombreuses fonctions non documentée de scapy permet de manipuler des fichiers pcap, à la fois en lecture, mais aussi en écriture.
Nous allons commencer par lire un fichier qui contient déjà des enregistrements au format pcap. Nous avons obtenu ce fichier à partir du logiciel wireshark, après avoir effectué une requête ICMP echo request sur l'adresse www.google.fr. La fonction rdpcap prend un unique argument en paramètre : le fichier où se trouve vos enregistrements. Vous trouverez ce fichier ici. Pour notre exemple, nous l'avons stocké dans le répertoire /tmp.
>>> mavariable=rdpcap("/tmp/monpcap.pcap")
Maintenant que le fichier est chargé dans la variable, nous pouvons l'interroger pour voir ce qu'il contient :
>>> mavariable.show <bound method PacketList.show of <monpcap.pcap: UDP:4 ICMP:2 TCP:0 Other:0>>
et de manière plus détaillée :
>>> mavariable.show() 0000 Ether / IP / UDP / DNS Qry "www.google.fr." 0001 Ether / IP / UDP / DNS Ans "www.google.com." 0002 Ether / IP / ICMP 192.168.0.2 > 209.85.129.147 echo-request 0 / Raw 0003 Ether / IP / ICMP 209.85.129.147 > 192.168.0.2 echo-reply 0 / Raw 0004 Ether / IP / UDP / DNS Qry "147.129.85.209.in-addr.arpa." 0005 Ether / IP / UDP / DNS Ans "fk-in-f147.google.com."
Nous sommes en présence d'un fichier composé de six requêtes, quatre concernent le protocole DNS, deux ICMP. On retrouve bien l'assertion initiale, à savoir que nous avons voulu savoir si www.google.fr répondait au ping.
Pour voir le détail d'une des requêtes, il suffit d'interroger la ligne correspondante. Rappelez-vous que Scapy est fortement basé sur le langage python, nous pouvons donc utiliser les tableaux pour appeler la ligne en question :
>>> mavariable[3].show()
###[ Ethernet ]###
dst= 00:15:c5:7d:44:d6
src= 00:07:cb:34:17:c8
type= 0x800
###[ IP ]###
version= 4L
ihl= 5L
tos= 0x0
len= 84
id= 0
flags= DF
frag= 0L
ttl= 245
proto= icmp
chksum= 0x7215
src= 209.85.129.147
dst= 192.168.0.2
options= ''
###[ ICMP ]###
type= echo-reply
code= 0
chksum= 0xaa07
id= 0xd910
seq= 0x1
###[ Raw ]###
load= 'c\x8c\xfeG"\x0f\x0e\x00\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'()*+,-./01234567'
Cette sortie est très complète et renseigne complètement sur le contenu de la trame. Cependant, vous pouvez souhaiter avoir une sortie qui associe la trame en hexadécimale à son explication complète, comme nous l'avons ci-dessus. Pour ce faire, il suffit d'appeler la fonction pdfdump sur la ou les lignes qui vous intéresse :
mavariable[3].pdfdump()
Si aucun nom n'est donné au fichier, scapy générera aléatoirement ce dernier et ouvrira votre éditeur pdf favori pour vous afficher le résultat de son traitement. Voici, pour notre trame ce que cela donne :
On peut s'assurer que nous obtenons le même résultat avec l'affichage en hexadécimal de notre paquet :
>>> hexdump(mavariable[3]) 0000 00 15 C5 7D 44 D6 00 07 CB 34 17 C8 08 00 45 00 ...}D....4....E. 0010 00 54 00 00 40 00 F5 01 72 15 D1 55 81 93 C0 A8 .T..@...r..U.... 0020 00 02 00 00 AA 07 D9 10 00 01 63 8C FE 47 22 0F ..........c..G". 0030 0E 00 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 ................ 0040 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 .......... !"#$% 0050 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 &'()*+,-./012345 0060 36 37
[Table des matières] - [précédent] - [suivant?]
Attachments
- pcap.png (73.1 kB) -
Trame décortiquée par Scapy
, added by JpGaulier on 04/11/08 00:45:44.
![[SCAPY]](/scapydoc-com/chrome/common/trac_banner.png)
