Script shell pour extraire des balises xml
isecs
Messages postés
12
Date d'inscription
Statut
Membre
Dernière intervention
-
mctroubleshooter -
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
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:
- Script shell pour extraire des balises xml
- Extraire une video youtube - Guide
- Classic shell - Télécharger - Personnalisation
- Xml download - Télécharger - Édition & Programmation
- Extraire le son d'une vidéo - Guide
- Script vidéo youtube - Guide
4 réponses
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.
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.
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 :(
salut,
pourquoi se contraindre à parser du xml?
tshark peut sortir les données au format txt (peut-être plus pratique).
pourquoi se contraindre à parser du xml?
tshark peut sortir les données au format txt (peut-être plus pratique).
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
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
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).
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).
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
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
#!/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'