IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Parsing PDML (Wireshark xml)


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2003
    Messages : 15
    Par défaut Parsing PDML (Wireshark xml)
    Bonjour à tous,

    Je dois analyser des requêtes DNS afin d'en faire des statistiques sur des champs spécifiques, j'ai à ma disposition des fichiers pdml, fichiers xml exporté par wireshark ou tshark. le fichier est assez conséquent (~500MB)

    Quel librairie est la plus adaptée, afin de parcourir ce fichier afin d'en faire des statistiques, la première étape serait pour moi de parcourir les "packet" et s'il ont un enfant proto name="dns" et un enfant proto name=tcp, ajouter 1 à un compteur (pour la première étape basique)

    Cette question est un peu générale désolé, juste une petite indication de la direction à prendre m'aiderais à éviter de partir dans la mauvaise
    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
     
    <pdml version="0" creator="wireshark/1.2.7">
    <packet>
    <proto name="geninfo" pos="0" showname="General information" size="68">
    <field name="timestamp" pos="0" show="Jun 29, 2010 12:00:00.221254000" showname="Captured Time" value="1277805600.221254000" size="68"/>
    </proto>
     
    <proto name="frame" showname="Frame 1 (68 bytes on wire, 68 bytes captured)" size="68" pos="0">
    <field name="frame.coloring_rule.string" showname="Coloring Rule String: udp" size="0" pos="0" show="udp"/>
    </proto>
     
    <proto name="raw" showname="Raw packet data" size="0" pos="0">
    <field name="" show="No link information available" size="0" pos="0" value=""/>
    </proto>
     
    <proto name="ip" showname="Internet Protocol, Src: xx.xxx.xx.x.x (xxx.xxx.xxx.xxx), Dst: xxx.xx.xx.xx (xxx.xx.1.xxx)" size="20" pos="0">
    <field name="ip.host" showname="Source or Destination Host: xx.xxx.xxx" hide="yes" size="4" pos="16" show="xxx.xx.xx.xx" value="8xx150"/>
    </proto>
     
    <proto name="udp" showname="User Datagram Protocol, Src Port: 41637 (41637), Dst Port: domain (53)" size="8" pos="20">
    <field name="udp.srcport" showname="Source port: xxxx (xxxxx)" size="2" pos="20" show="xxxx" value="xxxx"/>
    <field name="udp.length" showname="Length: 48" size="2" pos="24" show="48" value="0030"/>
    </proto>
     
    <proto name="dns" showname="Domain Name System (query)" size="40" pos="28">
    <field name="dns.flags" showname="Flags: 0x0000 (Standard query)" size="2" pos="30" show="0x0000" value="0000">
    <field name="dns.flags.response" showname="0... .... .... .... = Response: Message is a query" size="2" pos="30" show="0" value="0" unmaskedvalue="0000"/>
    </proto>
    </packet>

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Ben
    Ce sont de gros fichiers XML, pour les analyser je passerais par l'interface SAX de lxml (libxml). Mais cela ne permettra que de décortiquer les infos.
    Après,
    1. soit vous savez ce que vous voulez et vous accumuler des informations au passage,
    2. sinon vous mettez cela "en base" et vous triez après.


    La deuxième option signifie la création de différentes 'tables' pour y mettre les informations avec un minimum de colonnes contruites à partir des attributs/elements du XML pour faire des recherches 'intérressantes'.
    C'est beaucoup de boulot côté conception et pas mal de connaissances à maitriser pour passer de XML à 'tables'.

    Il serait peut être sage d'aller voir dans les forums réseaux WireShark s'il n'existe pas déjà des outils pour cela.

    S'il faut le faire à la main, j'aurais peut être de quoi faire cela 'vite' mais pas avant septembre/octobre.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2003
    Messages : 15
    Par défaut
    Merci de votre réponse,

    Je vais étudier cette librairie, vu que je ne dois que récolter des infos, cela devrait suffire, enfin j'espère, je n'ai pas plus de 3 jours à disposition pour faire fonctionner ce script...

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Salut
    La base simple se réduit à cela et je ne sais pas si je ne vous ai pas induit en erreur en vous faisant regarder la lxml
    - W
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    XML = '''\
    <pdml version="0" creator="wireshark/1.2.7">
    <packet>
    <proto name="geninfo" pos="0" showname="General information" size="68">
    <field name="timestamp" pos="0" show="Jun 29, 2010 12:00:00.221254000" showname="Captured Time" value="1277805600.221254000" size="68"/>
    </proto>
     
    <proto name="frame" showname="Frame 1 (68 bytes on wire, 68 bytes captured)" size="68" pos="0">
    <field name="frame.coloring_rule.string" showname="Coloring Rule String: udp" size="0" pos="0" show="udp"/>
    </proto>
     
    <proto name="raw" showname="Raw packet data" size="0" pos="0">
    <field name="" show="No link information available" size="0" pos="0" value=""/>
    </proto>
     
    <proto name="ip" showname="Internet Protocol, Src: xx.xxx.xx.x.x (xxx.xxx.xxx.xxx), Dst: xxx.xx.xx.xx (xxx.xx.1.xxx)" size="20" pos="0">
    <field name="ip.host" showname="Source or Destination Host: xx.xxx.xxx" hide="yes" size="4" pos="16" show="xxx.xx.xx.xx" value="8xx150"/>
    </proto>
     
    <proto name="udp" showname="User Datagram Protocol, Src Port: 41637 (41637), Dst Port: domain (53)" size="8" pos="20">
    <field name="udp.srcport" showname="Source port: xxxx (xxxxx)" size="2" pos="20" show="xxxx" value="xxxx"/>
    <field name="udp.length" showname="Length: 48" size="2" pos="24" show="48" value="0030"/>
    </proto>
     
    <proto name="dns" showname="Domain Name System (query)" size="40" pos="28">
    <field name="dns.flags" showname="Flags: 0x0000 (Standard query)" size="2" pos="30" show="0x0000" value="0000"/>
    <field name="dns.flags.response" showname="0... .... .... .... = Response: Message is a query" size="2" pos="30" show="0" value="0" unmaskedvalue="0000"/>
    </proto>
    </packet>
    </pdml>
    '''
     
    import StringIO
    from xml.sax import make_parser, handler
     
    class Packet(handler.ContentHandler):
        def __init__(self):
            handler.ContentHandler.__init__(self)
            self._dns = 0
            self._tcp = 0
     
        def startElement(self, name, attrs):
            v_name = 'v_%s' % name
            if hasattr(self, v_name):
                getattr(self, v_name)(name, attrs)
     
        def v_proto(self, name, attrs):
            type_ = attrs['name']
            if  type_ == 'dns':
                self._dns += 1
            elif type_ == 'tcp':
                self._tcp += 1
            else: pass
     
        def endDocument(self):
            print 'dns: ', self._dns
            print 'tcp: ', self._tcp
     
    f = StringIO.StringIO(XML)            
    parser = make_parser()
    parser.setContentHandler(Packet())
    parser.parse(f)
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Java] probleme d'espace cree lors du parsing d'un xml en sax
    Par kayenne77 dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 13/07/2009, 05h26
  2. [SAX] Probème de parse d'un Xml avec des contenus mixtes
    Par franck2008 dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 30/06/2008, 10h39
  3. [SAX] Resultat d'un parsing de fichier XML
    Par t.n.b.g dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 07/03/2008, 16h12
  4. [CDATA]Parse d' un xml string
    Par namnam1981 dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 01/12/2007, 11h15
  5. Parsing de fichier XML en C
    Par longbeach dans le forum XML
    Réponses: 12
    Dernier message: 12/12/2006, 16h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo