Script shell pour extraire des balises xml

Fermé
isecs Messages postés 12 Date d'inscription mercredi 28 août 2013 Statut Membre Dernière intervention 22 septembre 2013 - 28 août 2013 à 11:50
 mctroubleshooter - 29 août 2013 à 08:47
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
A voir également:

4 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
28 août 2013 à 11:58
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
isecs Messages postés 12 Date d'inscription mercredi 28 août 2013 Statut Membre Dernière intervention 22 septembre 2013
28 août 2013 à 12:14
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
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
Modifié par zipe31 le 28/08/2013 à 12:27
Montres-nous ce que tu as commencé à faire...
0
Utilisateur anonyme
28 août 2013 à 12:45
salut,

pourquoi se contraindre à parser du xml?
tshark peut sortir les données au format txt (peut-être plus pratique).
0
ryko1820 Messages postés 1677 Date d'inscription dimanche 28 avril 2013 Statut Membre Dernière intervention 15 août 2021 276
Modifié par ryko1820 le 28/08/2013 à 12:47
En plus, il est bizarre ce XML, non ?
0
isecs Messages postés 12 Date d'inscription mercredi 28 août 2013 Statut Membre Dernière intervention 22 septembre 2013
28 août 2013 à 13:00
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
isecs Messages postés 12 Date d'inscription mercredi 28 août 2013 Statut Membre Dernière intervention 22 septembre 2013
28 août 2013 à 13:02
Donc mo prob maintenant est de calculer à l'aide d'un script le temps d'interarrivé des requetes succésives ( invite,ack,cancel) :
0
Utilisateur anonyme
28 août 2013 à 13:07
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
isecs Messages postés 12 Date d'inscription mercredi 28 août 2013 Statut Membre Dernière intervention 22 septembre 2013
28 août 2013 à 13:17
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
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
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
28 août 2013 à 19:29
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
mctroubleshooter Messages postés 1 Date d'inscription mercredi 28 août 2013 Statut Membre Dernière intervention 28 août 2013
28 août 2013 à 19:41
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
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
28 août 2013 à 20:03
#!/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
ryko1820 Messages postés 1677 Date d'inscription dimanche 28 avril 2013 Statut Membre Dernière intervention 15 août 2021 276
28 août 2013 à 21:42
Sinon bienvenue mctroubleshooter, en plus c'est cool, j'ai cru comprendre que tu utilisais Gentoo ?
0
mctroubleshooter
29 août 2013 à 08:47
merci.
oui j'ai pas mal utilisé gentoo, maintenant je fais un peu toutes les distribs
0