A propos | Laboratoire | Voisinage | Meilleurs articles | Nous aider | Forums

Panoramisk / Le druide de la VoIP 

Analyse ToIP avec Wireshark

Disposer d’outil de diagnostique dans le monde de la téléphonie sur IP est primordial, l’analyse des trames circulant sur le réseau est une des approches possible. Cet article vous présente les fonctionnalités les plus utiles de l’outil d’analyse de réseau Wireshark.

Introduction

Wireshark s’est imposé comme l’outil à avoir dans sa trousse dès lors que l’on manipule des données sur un réseau et que l’on souhaite les analyser. Même si sur certains points il peut être considéré comme moins performant que des produits commerciaux, Wireshark dispose de fonctions très avancées dans l’analyse, notamment des protocoles de téléphonie sur IP. Nous allons utiliser aujourd’hui les fonctions d’analyse SIP et RTP disponibles.

Principe de capture

Le principe de fonctionnement d’une analyse de réseau est toujours le même: il faut capturer des trames circulant sur le réseau avant de pouvoir les analyser. L’analyse peut s’effectuer en temps réel ou en temps différé.
Il est important de se positionner au bon endroit du réseau afin de pouvoir capturer les trames qui nous intéressent. Malheureusement, le modèle très distribué de SIP ne va pas nous aider dans cette démarche, mais il existe des solutions.

Afin de collecter les trames nous allons soit utiliser directement Wireshark, qui dispose d’un module de capture, soit l’application en ligne tcpdump qui est plus légère et intégré sur la plupart des Unix du marché.

Deux solutions de capture sont proposées ici:

  • via un port miroir sur le réseau: cette solution nécessite de disposer d’équipements de réseau autorisant la capture sur un port ou un VLan. On parle souvent de port miroir ou SPAN en fonction des constructeurs, le mécanisme est le suivant: on demande au commutateur réseau de recopier tous les paquets passant sur le port à écouter et de les rediriger sur un port sur lequel on connectera l’analyseur de protocole. S’il on dispose d’un VLan dédié à la voix, on pourra alors envisager d’effectuer une capture sur l’ensemble de celui-ci, si les commutateurs en sont capables. La cible simple pour l’analyse est le PABX IP ou tout du moins la partie qui héberge la fonction proxy. Une seconde cible possible est le téléphone IP qui sera observé, on aura alors l’ensemble des informations échangées par cet équipement.
  • via une capture sur le proxy: la seconde solution consiste à capturer directement le trafic sur le PABX IP ou le proxy s’il est possible d’utiliser un tcpdump ou équivalent sur cette machine. C’est le cas d’Asterisk qui est hébergé sur un système Linux dans la plupart des cas.

Capturer avec tcpdump

Dans le monde Asterisk nous pouvons tirer partie de deux caractéristiques principales par rapport à la capture du trafic:

  • le système d’exploitation est souvent un Linux, disposant facilement de la commande tcpdump (à installer à partir des packages, c’est plus simple)
  • Asterisk fonctionne comme un “back-to-back UA”, c’est à dire qu’il reste actif dans la communication pour le transport de la signalisation et de la voix1.

En effectuant une capture à l’aide de tcpdump directement sur notre Asterisk, nous aurons donc toute la communication, depuis la signalisation de l’appel jusqu’au trames RTP contenant la voix.

tcpdump est une commande en ligne, que l’on peut donc utiliser sans interface graphique et directement sur le serveur. Cette commande doit être lancée avec quelques paramètres permettant de faciliter l’analyse et de limiter la taille du fichier de stockage. Je vous propose les paramètres suivants:

  • -p : uniquement les paquets étant visibles par l’interface réseau d’Asterisk seront capturées, sinon tcpdump tente de capturer également les trames qui ne sont pas pour sa machine,
  • -n : pas de résolution de nom, on pourra effectuer ceci après coup si besoin est,
  • -s 0 : on capture toute la trame, pas uniquement les premiers octets constituant les en-têtes, souvent suffisant pour la partie purement protocolaire, nous avons besoin d’analyser le contenu des paquets, SIP étant un protocole verbeux,
  • -w fichier : on va sauvegarder les trames capturées dans un fichier et pas uniquement les afficher à l’écran, ceci permettra une analyse à posteriori, plus simple à effectuer. S’il on spécifie le nom de fichier ‘-’, alors le contenu est dirigé sur la sortie standard, nous y reviendrons plus tard.

En complément, on peut spécifier à tcpdump un filtre permettant de limiter la collecte à une partie du trafic. Dans notre cas nous pouvons nous concentrer sur le protocole UDP et éventuellement limiter les ports. Etant donné que RTP utilise des ports UDP attribués de façon dynamique, on se limitera à ce protocole. En complément on pourra limiter les adresses IP communicantes.

Capture en local

Afin de capturer directement sur le serveur Asterisk, il est nécessaire d’y être connecté, soit sur la console soit via un ssh.

En exécutant la commande

tcpdump -w trace.cap -p -n -s 0 "udp”

, nous allons récupérer l’ensemble des trames UDP qui auront transité par notre Asterisk jusqu’à ce que l’on arrête la capture par un CTRL-c. Le fichier ainsi construit pourra être analysé plus tard. On pourra éventuellement le compresser avec gzip si l’espace de stockage est limitée sur notre serveur Asterisk.

Capture à distance

Plus simple à utiliser que la capture en local et le transfert de fichier de capture après coup, on peut également utiliser ssh pour effectuer une capture à distance sur notre serveur Asterisk. Depuis son poste client il suffit d’invoquer la commande tcpdump à distance dans un tunnel ssh. ssh est installé dans les commandes de base sur Linux et Mac OS X, on installera cygwin sur Windows pour récupérer un environnement similaire.

La commande proposée est la suivante :

ssh root@asterisk 'tcpdump -w - -p -n -s 0 udp' > capture-asterisk.cap

Les trames capturées sur le serveur asterisk via tcpdump ne seront pas sauvegardées en local dans un fichier, mais dirigées vers la sortie standard et donc reviendrons sur le poste client via le tunnel ssh2 pour se retrouver finalement dans le fichier capture-asterisk.cap. On peut ainsi piloter des captures depuis son poste de travail sur des serveurs Asterisk distant sans trop de contrainte.

Analyse

Une fois que l’on dispose d’une capture dans un fichier, il est alors temps d’utiliser Wireshark pour analyser son contenu.

Wireshark dispose d’une interface graphique capable de présenter les trames de la capture et d’en décoder le contenu. Les protocoles Ethernet et IP sont connus depuis longtemps, mais on trouve également SIP, IAX2 et RTP qui nous intéressent plus dans notre cas.

Depuis l’explorateur de fichiers on ouvre la capture (fichier avec extension .cap) et Wireshark nous présente l’ensemble des trames dans la partie supérieure et le contenu de la trame sélectionnée dans la partie inférieure de la fenêtre. On peut sélectionner la trame à analyser en faisant défiler la liste dans laquelle les trames sont triées par heure d’arrivée.

Filtrage

Afin de filtrer la liste de trames et de n’en afficher qu’une partie plus spécifique, on peut utiliser le champ ‘Filter’ situé au dessus de la liste. Le filtrage de Wireshark utilise un langage spécifique qui s’apprend au fur et à mesure, un principe de base est que le filtre est valide lorsque la couleur de fond de celui-ci est vert. On peut par exemple sélectionner les trames SIP en utilisant le filtre : sip, les trames IAX avec le filtre : iax2.

Pour aller plus loin, on peut enrichir le filtrage à l’aide des champs situés dans la partie analyseur de protocole. Chaque partie du protocole peut être détaillée à l’aide du [+] situé dans la colonne de gauche. Par exemple pour filtrer les trames en provenance d’un client particulier, on se basera sur son adresse IP. On ouvre pour cela la partie IP (Internet Protocol) dans laquelle il suffit de sélectionner la source avec le bouton droit de la souris et d’ajouter ce champ à notre filtre à l’aide du menu “Apply as filter / … and Selected”.

Analyse SIP

Traquer les trames une à une est une approche difficile et fastidieuse. Dans certains cas, il est intéressant de s’appuyer sur l’analyse automatique proposée par Wireshark dans le menu “Statistics / VoIP calls”.

voip-analysis.png

Dans la fenêtre s’affichent tous les appels contenus dans la trace3.

A partir de cette liste on peut afficher la conversation sous forme graphique. Cette vue permet une rapide analyse des échanges, elle est fortement couplée aux paquets ce qui autorise une navigation rapide pour une analyse plus poussée du contenu des trames. Il est également possible d’analyser la partie voix contenu dans les trames RTP de l’échange.

voip-analysis-graph.png

La fonction “Player” décode le contenu des échantillons de voix et permet de rejouer la conversation, ceci peut-être utile pour constater une mauvaise qualité reportée par un utilisateur vers une destination particulière par exemple.

voip-analysis-voix.png

Analyse RTP

Le protocole RTP4 n’est pas spécifique à la téléphonie sur IP mais utilisé de façon unanime pour l’instant, que ce soit dans le monde SIP ou le monde H.323. Wireshark dispose d’un outil d’analyse fin des échanges RTP entre deux terminaux. On trouve la fonction dans le menu “Statistics / RTP / Stream Analysis”.


La fenêtre d’analyse donne des informations sur les terminaux, le codec utilisé et des statistiques sur la communication: le nombre de trame perdues et la gigue constatée. On peut aller plus dans le détail et analyser les trames une par une afin de constater les écarts de gigue ou la répartition des trames perdues sur l’échange. Cet outil permet également de sauvegarder le contenu de la communication dans un fichier son qui sera utilisable par la suite pour une analyse audio.

Conclusion

La téléphonie sur IP, comme toutes les applications utilisant fortement le réseau se doit d’être analysée lorsqu’il y a des problèmes. Afin de ne pas être pris de court, une bonne technique est de s’être préparé à effectuer ces analyses. Cette répétition peut permettre également d’effectuer un audit de son système et ainsi renforcer sa connaissance de celui-ci. Même si les protocoles sont souvent difficiles à appréhender, leur connaissance permet de résoudre bien des problèmes en amont.


  1. ceci va à l’encontre du modèle distribué de SIP mais permet d’ajouter des fonctionnalité de téléphonie - voir l’article “Asterisk et transport de la voix” []
  2. on utilisera les clés ssh afin d’automatiser l’identification de l’utilisateur et éviter ainsi d’avoir à taper son mot de passe à chaque fois []
  3. s’il on prend une trace en temps réel, alors cette liste se modifie au fil de l’eau []
  4. Real Time Protocol []
Posté par: Alexandre Chauvin-Hameau, le 11/10/2007
Trackback | Popularité: 46%
marqué , , , , , et
AddThis Social Bookmark Button
UselessNothing newInformativeLearned a lotAmazingly helpful
Loading ... Loading ...

Voir aussi

Et pourquoi pas

Une résponse à “Analyse ToIP avec Wireshark”

  1. CAMPAGNA à dit:

    Excellent.

Laisser un commentaire En discuter dans le forum

© 2009 Panoramisk | Creative Commons License wordpress logo