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.
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.
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.
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.
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... )
Le message INVITE contient deux parties importantes :
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 |