Script shell pour extraire des balises xml

isecs Messages postés 12 Date d'inscription   Statut Membre Dernière intervention   -  
 mctroubleshooter -
Bonjour,

svvp,je voulais programmer script shell sous unix qui permet de calculer la durée moyenne d'inter-arrivé des requètes sip.

Durée moyenne = ? (Temps_arrivé -req - Temps_arrivé_req-1 ) / (Nombre total des requêtes).
pour cela à partir d'un fichier xml (test.xml) capturé à 'aide de la commande tshark,je voulaisà l'aide d'un scrip unix :
1) extraire les champs temps d'arrivé ( section.Time)et requète correspondante(section.info).
2) calculer la durée d'inter-arrivée entre deux requètes sip.

le fichier test.xml est le suivant:
<?xml version="1.0"?>
<psml version="0" creator="wireshark/1.8.2">
<structure>
<section>No.</section>
<section>Time</section>
<section>Source</section>
<section>Destination</section>
<section>Protocol</section>
<section>Length</section>
<section>Info</section>
</structure>

<packet>
<section>9</section>
<section>27.127176000</section>
<section>192.168.245.1</section>
<section>192.168.245.142</section>
<section>SIP/SDP</section>
<section>949</section>
<section>Request: INVITE sip:6002@192.168.245.142, with session description</section>
</packet>

<packet>
<section>12</section>
<section>27.159294000</section>
<section>192.168.245.142</section>
<section>192.168.245.1</section>
<section>SIP</section>
<section>606</section>
<section>Status: 401 Unauthorized</section>
</packet>

<packet>
<section>13</section>
<section>27.160358000</section>
<section>192.168.245.1</section>
<section>192.168.245.142</section>
<section>SIP</section>
<section>370</section>
<section>Request: ACK sip:6002@192.168.245.142</section>
</packet>

.......
</psml>

svvvvvvvvvvvp c'est trés urgent........:)
merci d'avance

4 réponses

  1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

    svvvvvvvvvvvp c'est trés urgent........:)

    En cas d'urgence absolue, un seul réflexe : 3615 SOS !

    Le reste n'est que broutille superfétatoire ;-\

    Traduction : Ce site n'est pas tenu par des robots ou des professionnels mais par des bénévoles. Ces derniers répondent dans la limite de leurs compétence et du temps qu'ils peuvent consacrer à vos problèmes. Pour les urgences, s'adresser à des professionnels.
    0
  2. isecs Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
     
    Bon j m'excuse infinément je sais que ce n'est pas facile ce que je demande :) j'espère que je recevais des réponses qui résoud mon prob parceque vraiment chui plantée :(
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Montres-nous ce que tu as commencé à faire...
      0
  3. Utilisateur anonyme
     
    salut,

    pourquoi se contraindre à parser du xml?
    tshark peut sortir les données au format txt (peut-être plus pratique).
    0
    1. ryko1820 Messages postés 1633 Date d'inscription   Statut Membre Dernière intervention   310
       
      En plus, il est bizarre ce XML, non ?
      0
    2. isecs Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
       
      en fait avec tshark j'ai exporté la trace sous 2 formes:pdml et psml
      trace psml:
      ?xml version="1.0"?>
      <psml version="0" creator="wireshark/1.8.2">
      <structure>
      <section>No.</section>
      <section>Time</section>
      <section>Source</section>
      <section>Destination</section>
      <section>Protocol</section>
      <section>Length</section>
      <section>Info</section>
      </structure>

      <packet>
      <section>9</section>
      <section>27.127176000</section>
      <section>192.168.245.1</section>
      <section>192.168.245.142</section>
      <section>SIP/SDP</section>
      <section>949</section>
      <section>Request: INVITE sip:6002@192.168.245.142, with session description</section>
      </packet>

      trace pdml:
      <?xml version="1.0"?>
      <?xml-stylesheet type="text/xsl" href="pdml2html.xsl"?>
      <!-- You can find pdml2html.xsl in /usr/share/wireshark or at http://anonsvn.wireshark.org/trunk/wireshark/pdml2html.xsl. -->
      <pdml version="0" creator="wireshark/1.8.2" time="Fri Aug 23 21:41:11 2013" capture_file="/home/serveur4/Desktop/xml-packet-wireshark/cap-okk">
      <packet>
      <proto name="geninfo" pos="0" showname="General information" size="709">
      <field name="num" pos="0" show="1" showname="Number" value="1" size="709"/>
      <field name="len" pos="0" show="709" showname="Frame Length" value="2c5" size="709"/>
      <field name="caplen" pos="0" show="709" showname="Captured Length" value="2c5" size="709"/>
      <field name="timestamp" pos="0" show="Aug 23, 2013 21:37:00.335476000 CEST" showname="Captured Time" value="1377286620.335476000" size="709"/>
      </proto>
      ................................................
      </proto>
      <proto name="sip" showname="Session Initiation Protocol" size="667" pos="42">
      <field name="sip.Request-Line" showname="Request-Line: SUBSCRIBE sip:asterisk@192.168.245.142:5060 SIP/2.0" size="51" pos="42" show="SUBSCRIBE sip:asterisk@192.168.245.142:5060 SIP/2.0" value="530">
      <field name="sip.Method" showname="Method: SUBSCRIBE" size="9" pos="42" show="SUBSCRIBE" value="535542534352494245"/>
      <field name="sip.r-uri" showname="Request-URI: sip:asterisk@192.168.245.142:5060" size="33" pos="52" show="sip:asterisk@192.168.245.142:5060" value="7369703a617374657269736b403139322e3136382e3234352e3134323a35303630">
      <field name="sip.r-uri.user" showname="Request-URI User Part: asterisk" size="8" pos="56" show="asterisk" value="617374657269736b"/>
      <field name="sip.r-uri.host" showname="Request-URI Host Part: 192.168.245.142" size="15" pos="65" show="192.168.245.142" value="3139322e3136382e3234352e313432"/>
      <field name="sip.r-uri.port" showname="Request-URI Host Port: 5060" size="4" pos="81" show="5060" value="35303630"/>
      </field>
      ........................................
      </proto>

      avec tshark j'ai pu extraite le temps et le type de requète :
      tshark -eth0 -T fiels -e frame.time et sip.Request-Line -z sip,stat > test2.txt
      j'au le fichier test2.txt suivant :

      Aug 27, 2013 23:06:46.205544000
      Aug 27, 2013 23:06:47.334270000 INVITE
      Aug 27, 2013 23:06:47.335045000 SIP/2.0 401 Unauthorized
      Aug 27, 2013 23:06:47.336897000 ACK
      Aug 27, 2013 23:06:47.350187000 INVITE
      Aug 27, 2013 23:06:47.351728000 SIP/2.0 100 Trying
      Aug 27, 2013 23:06:47.354311000 INVITE
      Aug 27, 2013 23:06:47.500954000 SIP/2.0 180 Ringing
      Aug 27, 2013 23:06:47.504776000 SIP/2.0 180 Ringing
      Aug 27, 2013 23:06:48.415368000 CANCEL
      Aug 27, 2013 23:06:48.416001000 SIP/2.0 487 Request Terminated
      Aug 27, 2013 23:06:48.416193000 SIP/2.0 200 OK
      Aug 27, 2013 23:06:48.416522000 CANCEL
      Aug 27, 2013 23:06:48.424779000 ACK
      Aug 27, 2013 23:06:48.590352000 SIP/2.0 200 OK
      Aug 27, 2013 23:06:48.590370000 SIP/2.0 487 Request Terminated
      Aug 27, 2013 23:06:48.595704000 ACK

      ===================================================================
      SIP Statistics

      Number of SIP messages: 16
      Number of resent SIP messages: 0

      * SIP Status Codes in reply packets
      SIP 401 Unauthorized : 1 Packets
      SIP 180 Ringing : 2 Packets
      SIP 200 OK : 2 Packets
      SIP 487 Request Terminated : 2 Packets
      SIP 100 Trying : 1 Packets

      * List of SIP Request methods
      INVITE : 3 Packets
      ACK : 3 Packets
      CANCEL : 2 Packets

      * Average setup time 593364750 ms
      Min 2 ms
      Max 1802658152 ms
      0
    3. isecs Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
       
      Donc mo prob maintenant est de calculer à l'aide d'un script le temps d'interarrivé des requetes succésives ( invite,ack,cancel) :
      0
    4. Utilisateur anonyme
       
      calculer à l'aide d'un script le temps d'interarrivé des requetes succésives

      quel serait la sortie (le résultat) après traitement à partir de l'échantillon que tu donnes en exemple ?
      0
    5. isecs Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
       
      la sortie serais une valeur (réelle) ,l'obectif final est calculer la durée moyenne:
      donc iil faut commencer à calculer la durée d'inter-arrivée des requètes sucessives ,deux par deux c àd la durée entre chaque requète en cours et celle qui la précède ( Temps_arrivé -req - Temps_arrivé_req-1 ) et ensuite on :
      Durée moyenne = ? (Temps_arrivé -req - Temps_arrivé_req-1 ) / (Nombre total des requêtes).
      0
  4. mctroubleshooter
     
    Bonjour,
    J'ai fais un script qui répond à votre première demande, vous le trouverez ici :

    http://mathieu.coavoux.free.fr/index.php?title=Commande#Exemple_sed_et_awk
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Salut,

      Merci pour lui, mais il eut été plus simple de copier/coller le code ici plutôt que de poster un lien (non cliquable qui plus est du fait que vous n'êtes pas inscrit), qui rend la compréhension difficile du fait qu'il ne soit pas direct sur le script ;-(
      0
    2. mctroubleshooter Messages postés 1 Date d'inscription   Statut Membre Dernière intervention  
       
      désolé, je viens de m'inscrire.

      je me suis dis que le code serait plus lisible sur le wiki et les caractères ne risque pas d'être changés
      0
    3. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      #!/bin/bash
      MONFICHIER=test.xml
      TOTALLIGNE='cat $MONFICHIER|wc -l'
      LIGNEHEADER=11
      LIGNEALIRE='expr $TOTALLIGNE - $LIGNEHEADER' #Soustrait les lignes d en-tete et le nombre de ligne pour garder les donnees
      tail -n $LIGNEALIRE $MONFICHIER |tr '\n' ';'|awk '{gsub(/<.?packet> ;/,"\n");print $0}'|awk 'FS=";" {print $2"\n"$7}'|sed -e 's/<section>//' -e 's/<\/section>//' -e '/^ *$/d'
      0
    4. ryko1820 Messages postés 1633 Date d'inscription   Statut Membre Dernière intervention   310
       
      Sinon bienvenue mctroubleshooter, en plus c'est cool, j'ai cru comprendre que tu utilisais Gentoo ?
      0
    5. mctroubleshooter
       
      merci.
      oui j'ai pas mal utilisé gentoo, maintenant je fais un peu toutes les distribs
      0