Bonjour,

J'utilise scapy depuis peu dans le but de faire un sniffeur pouvant filtrer un certain type de donné (ici http). J'ai réussis à faire le programme ayant pour but d’afficher les données voulu mais je n'arrive pas à extraire une partie d'une chaine affiché. Voici tout d’abord le programme en question :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
#!/usr/bin/env python
from scapy.all import *
 
def parse(pkt):
        if pkt.haslayer(TCP) and pkt.getlayer(TCP).dport == 80 and pkt.haslayer(Raw):
                pkt.show()
 
pkt = sniff(iface="eth0", filter = "tcp and port(80)",  prn=parse)
Donc pour faire simple le programme sniff sur l'interface eth0 avec pour filtre le protocole tcp sur le port 80 ainsi je filtre par "Parse" les données à affiché.

Le résultat arrive sous cette forme :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 
WARNING: No route found for IPv6 destination :: (no default route?)
###[ Ethernet ]###
  dst       = mac
  src       = mac
  type      = 0x800
###[ IP ]###
     version   = 4L
     ihl       = 5L
     tos       = 0x0
     len       = 515
     id        = 57113
     flags     = DF
     frag      = 0L
     ttl       = 64
     proto     = tcp
     chksum    = 0x13be
     src       = 192.168.1.19
     dst       = 64.14.68.84
     \options   \
###[ TCP ]###
        sport     = 53944
        dport     = http
        seq       = 1966110975
        ack       = 3984368862
        dataofs   = 8L
        reserved  = 0L
        flags     = PA
        window    = 913
        chksum    = 0x4813
        urgptr    = 0
        options   = [('NOP', None), ('NOP', None), ('Timestamp', (43050, 1977702657))]
###[ Raw ]###
           load      = 'GET /html/demo/hello.html HTTP/1.1\r\nHost: www.december.com\r\nUser-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:10.0.12) Gecko/20100101 Firefox/10.0.12 Iceweasel/10.0.12\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\nAccept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3\r\nAccept-Encoding: gzip, deflate\r\nConnection: keep-alive\r\nIf-Modified-Since: Thu, 29 Jun 2006 17:05:33 GMT\r\nIf-None-Match: "299-4175ff09d1140"\r\nCache-Control: max-age=0\r\n\r\n'
None
Le problème arrive maintenant j'aimerais pouvoir n'affichier simplement que ce qu'il se passe dans la partie Raw . J'ai pensé à plusieurs choses notamment transformé le résultat en chaine et tenter de recherche à partir de "###[ Raw ] ###" ainsi que d'afficher à partir de load = mais je doute que ça fonctionne . J'ai recherché s'il y avait un moyen pour extraire via une fonction dans scapy dans ce but sans aucune réponse pour le moment.

Si quelqu'un aurait une idée .
Merci d'avance.