La fonction principale de ce script est de générer un diagram d’appel, comme le fait Wireshark lorsque l’on capture des flux SIP/RTP, evidemment sans avoir besoin d’ouvrir Wireshark et d’interagir graphiquement avec.
Petit plus, il peut être utilisé pour générer automatiquement des diagrammes à partir de plusieurs fichiers pcap, ou directement dans une interface web.
Dans le but d’aller un petit peu plus loin en python, j’ai tenté d’écrire un script pour répondre à ce besoin. Ce n’est peut être pas un chef d’oeuvre, mais il a le mérite de fonctionner.
Comment ça marche
Le script utilise différents librairies :
- python3 : obviously
- tshark et pyshark : pour lire le contenu de la capture
- markdown et md-mermaid : pour écrire et générer les diagrammes
Pour finir, git si vous souhaitez cloner directement le projet depuis github
A noter que le script a été testé et fonctionne bien sur Ubuntu 21.10 et sur une install fraîche de Debian 11.
Environnement
Installation des dépendances :
apt update
apt install git tshark python3-pip --no-install-recommends
pip3 install pyshark markdown md-mermaid
Clone du repo
git clone https://github.com/fulljackz/DrawMyCall.git
cd DrawMyCall
On y est, voici le contenu :
├── drawmycall.py
├── html
│ ├── mermaid.css
│ ├── mermaid.min.js
│ └── sip-rtp-g722.pcap.html
├── img
│ ├── mermaid.png
│ ├── mermaid-time.png
│ └── wireshark.png
├── pcap_samples
│ ├── sip-rtp-g722.pcap
│ ├── sip-rtp-g729a.pcap
│ ├── sip-rtp-gsm.pcap
│ ├── sip-rtp-ilbc.pcap
│ ├── sip-rtp-lpc.pcap
│ └── sip-rtp-opus.pcap
└── README.md
- drawmycall.py est le script qui nous intéresse.
- ./html/ est le répertoire qui contient les fichiers
.css
et.js
, utiles pour générer le fichierpcap.html
. - ./img/ est un répertoire servant aux screenshosts de la documentation.
- ./pcap_samples/ contient des fichiers
.pcap
pour tester. Ces fichiers sont tous issues du wiki Wireshark.
Si vous ouvrez le fichier sip-rtp-g722.pcap.html
présent dans le répertoire ./html/
vous aurez un aperçu de diagramme produit par le script :
On essaye
La première à lire est l’aide :
./drawmycall.py --help
usage: drawmycall.py [-h] -f FILE [-t]
optional arguments:
-h, --help show this help message and exit
-t, --time Add time on diagram
required arguments:
-f FILE, --file FILE path to your pcap file
On peut générer un diagramme à partir du fichier ./pcap_samples/sip-rp-opus.pcap
.
Avec wireshark :
Avec drawmycall.py :
./drawmycall.py -f ./pcap_samples/sip-rtp-opus.pcap
Ouvrir le fichier ./html/sip-rtp-opus.pcap.html
Note : Pour éviter d’afficher tous les échanges rtp, il n’y a qu’une seule ligne de tracée.
Si besoin d’avoir le temps d’appel, il faut ajouter le paramètre -t
lors de l’exécution :
./drawmycall.py -f ./pcap_samples/sip-rtp-opus.pcap -t
Qui devrait produire quelque chose comme ceci :
Enjoy 😉