Troubleshooting : Wireshark

Lorsque vous rencontrez des problèmes d'établissement d'appel ou d'audio, une des premières démarches conseillée est d'analyser les échanges SIP/RTP. Wireshark est l'outil d'analyse de protocoles réseau le plus populaire et les paragraphes suivants donnent quelques points pour étudier les appels et identifier les problèmes les plus courants.


Analyse des communications

Listes de communications

La liste des communications disponibles dans une acquisition est accessible par le menu Téléphonie / Appels VOIP.


Pour chaque communication sont indiquées les heures de début et de fin,  l'IP de l'initiateur (Conférencier inital) etc.

 

 

Call-flow SIP

Le bouton Flux-séquence permet de visualiser le call-flow de la communication sélectionnée, puis pour chaque échange, d'aller directement sur le paquet correspondant.

Le call-flow permet notamment de visualiser les échanges protocolaires, les IP et ports source / destination ainsi que le codec du flux RTP.

 

Flux audios

Le bouton Lire les flux permet de visualiser et d'écouter les flux audios de la communication choisie (attention : si le filtre sip est actif les flux paraitront vide, il faut à minima filtrer sip || rtp ).

Il est aussi possible de visualiser d'éventuels problèmes (gigue, timestamps incorrects) ou par exemple l'absence totale d'audio d'un côté.

 

En sélectionnant un des flux audio le bouton Analyser permet d'obtenir des informations sur les paquets, et de mettre en évidence  d'éventuels problèmes (gigue, timestamps incorrects) pour chacun.


Détail d'une communication

Sélectionner un appel SIP

Une communication est identifiée de façon unique par son Call-ID
( Il est aussi possible d'utiliser from-tag ou to-tag )Wireshark permet de filtrer ainsi les échanges concernant cette communication.

Ici la ligne contenant l'INVITE concerné est sélectionnée, puis clic-droit sur le champ Call-ID de l'entête du message -> appliquer filtre sur sélectionné.

( Ceci est équivalent à la saisie du filtre sip.Call-ID == "2eee09e93e20fdf8" pour le Call-ID 2ee... )


Etudier les entêtes SIP

Le message INVITE contient deux parties importantes :

  • L'entête (Message Header)
    • From :  URI de l'émetteur de l'appel
    • To : URI de destination de l'appel
    • Contact : Adresse des requêtes ultérieures
  • Le SDP (Session Description Protocol ) décrivant les paramètres d'initialisation des flux (audio/vidéo)
    • les codecs médias (m) supportés ainsi que leurs attributs (a) dans l'ordre de préférence 
    • l'adresse de connection (c)
    • la direction ( sendrecv

    Filtres courants

    Filtre Description Exemples
    sip filtre les échanges au protocole SIP sip
    sip.Method filtre les échanges SIP concernant la méthode (requête) choisie.
    Dans l'exemple, seuls les INVITE seront sélectionnés.
    INVITE, ACK, BYE, CANCEL, INFO, MESSAGE, REGISTER, UPDATE, REFER, PRACK, SUBSCRIBE, NOTIFY, PUBLISH peuvent par exemple être sélectionnés.
    sip.Method=="INVITE"

    sip.Method=="INVITE" or  sip.Method=="ACK"
    sip.Call-ID filtre les échanges SIP concernant un Call-ID défini.
    Note: depuis la fenêtre paquet details il est possible sur une ligne présentant un Call-ID de filtrer directement les échanges concernant le Call-ID : clic-droit sur la ligne du Header définissant le Call-ID/Appliquer comme un filtre / Sélectionné .
    sip.Call-ID == "25383295-10bf-123e-7fae-bb29dea9e18c"
    rtp filtre les échanges RTP rtp
    sip || rtp
    rtcp filtre les échanges RTCP rtcp
    rtpevent filtre les RTP events (DTMF) - voir aussi : nativIP / DTMF rtpevent
    ip.addr filtre une ip en particulier  ip.addr==192.168.1.161
    (l'IP 192.168.1.161 doit être dans l'échange)
    ip.src filtre une ip source en particulier  ip.src!=192.168.1.161(la source du paquet ne doit pas être 192.168.1.161)
    udp.dstport filtre les échanges vers un port UDP défini udp.dstport==5060
    udp.srcport filtre les échanges depuis un port UDP défini udp.srcport==5060