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 :
Copied!apt update apt install git tshark python3-pip --no-install-recommends pip3 install pyshark markdown md-mermaid
Clone du repo
Copied!git clone https://github.com/fulljackz/DrawMyCall.git cd DrawMyCall
On y est, voici le contenu :
Copied!├── 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 :
Copied!./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 :
Copied!./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 :
Copied!./drawmycall.py -f ./pcap_samples/sip-rtp-opus.pcap -t
Qui devrait produire quelque chose comme ceci :
Enjoy 😉
Laisser un commentaire