Annexes
1. UA en ligne de commande
- PJSUA
- linphonec
- linphonecsh
1.1. Installation PJSUA par les sources
#!/bin/bash
wget http://www.pjsip.org/release/1.12/pjproject-1.12.tar.bz2
tar -xjf pjproject-1.12.tar.bz2
cd pjproject-1.12/
./configure
make dep && make && sudo make install
sudo cp pjsip-apps/bin/pjsua* /usr/local/bin/pjsua
1.2. Installation PJSUA sur Ubuntu
sudo apt update && sudo apt -y install libpjsua2
1.3. Exemple d’usage de PJSUA
Exemple d’un UA qui s’enregistre sur sip:3302@172.16.98.223
, qui répond automatiquement aux appels en boucle.
SERVER="172.16.98.223"
USERNAME="3302"
PASSWORD="test1234"
cat << EOF > autoansw.conf
--null-audio
--realm asterisk
--registrar sip:${SERVER}
--id sip:${USERNAME}@${SERVER}
--username ${USERNAME}
--password ${PASSWORD}
--play-file /root/believe-its-free.wav
--auto-answer 200
--auto-play --auto-loop
--max-calls 10
EOF
pjsua --config-file autoansw.conf
1.4. Installation du dépôt Linphone en Centos 7
En Centos 7, ajouter ceci dans le fichier /etc/yum.repos.d/Belledonne.repo
[Belledonne]
name=Belledonne Communications
baseurl=https://www.linphone.org/snapshots/centos7
enabled=1
gpgcheck=0
priority=1
yum update
yum -y install linphone-devel
1.5. Compilation de Linphone minimal pour Raspbian (Rasberry Pi)
Cette procédure permet d’utiliser les outils de la console linphone (linphonec, linphonecsh ou linphone-daemon) sur le raspberry pi.
Installer des dépendances de compilation à partir de dépôts raspbian :
sudo apt-get install cmake automake autoconf libtool intltool yasm libasound2-dev libpulse-dev libv4l-dev nasm git libglew-dev
Cloner le dépôt git de linphone-desktop. Ce dépôt comprend le code source de linphone plus toutes les dépendances requises, avec un script de compilation global qui construit tout dans l’ordre.
git clone git://git.linphone.org/linphone-desktop.git --recursive
Configurer les options de compilation pour l’ensemble du projet linphone-desktop. La ligne ci-dessous définit les options pour une construction minimale de linphone, sans interface utilisateur graphique.
cd linphone-desktop
./prepare.py no-ui -DENABLE_OPENH264=ON -DENABLE_WEBRTC_AEC=OFF -DENABLE_UNIT_TESTS=OFF -DENABLE_MKV=OFF -DENABLE_FFMPEG=ON -DENABLE_CXX_WRAPPER=OFF -DENABLE_NON_FREE_CODECS=ON -DENABLE_VCARD=OFF -DENABLE_BV16=OFF -DENABLE_V4L=OFF
Maintenant la compilation peut être lancée (30 minutes et plus).
make -j4
Source : Compiling linphone on the rasberry pi
1.6. Installation de Linphone sur Ubuntu
sudo apt update && sudo apt -y install linphone-nogtk
1.7. linphonecsh
Exemple linphonecsh
SERVER="172.16.98.223"
USERNAME="3303"
PASSWORD="test1234"
linphonecsh init
linphonecsh register --host ${SERVER} --username ${USERNAME} --password ${PASSWORD}
linphonecsh dial "sip:3302@172.16.98.223"
1.8. linphonec
Exemple linephonec
linphonec -c .linphonerc
Warning: video is disabled in linphonec, use -V or -C or -D to enable.
linphonec> register sip:3303@172.16.98.223 sip:172.16.98.223 test1234
linphonec> Registration on <sip:172.16.98.223> successful.
linphonec> call sip:3302@172.16.98.223
Establishing call id to <sip:3302@172.16.98.223>, assigned id 1
Contacting <sip:3302@172.16.98.223>
linphonec> Call 1 to <sip:3302@172.16.98.223> in progress.
linphonec> Remote ringing.
linphonec> Remote ringing...
linphonec> Call 1 to <sip:3302@172.16.98.223> ringing.
Remote ringing.
linphonec> Call 1 with <sip:3302@172.16.98.223> connected.
Call answered by <sip:3302@172.16.98.223>.
linphonec> Media streams established with <sip:3302@172.16.98.223> for call 1 (audio).
linphonec> terminate
Call ended
linphonec> Call 1 with <sip:3302@172.16.98.223> ended (No error).
linphonec> quit
Terminating...
Unregistration on <sip:172.16.98.223> done.
2. Capture en ligne de commande
2.1. Captures distantes avec affichage dans Wireshark local (via SSH)
Le mécanisme consiste à transférer le trafic capturé à partir d’une hôte distant dans l’interface locale du logiciel d’analyse.
Sous Linux comme sous Windows, il
Sous Linux :
ssh -l username remote_host "tcpdump -s0 -w - 'ip'" | wireshark -k -i -
Sous Windows :
plink -ssh username@remote_host "tcpdump -s 0 -w - 'ip'" | wireshark -i -
2.2. Capture SIP / RTP avec tcpdump
tcpdump -i eth0 udp port 5060 or udp portrange 10000-20000 -s 0 -w capture.cap
2.3. Capture SIP / RTP avec tshark
Option -w
de tshark et filtres de capture pcap :
tshark -nq -w register -f 'udp port 5060'
3. Filtres VoIP
3.1. Affichage des points terminaux
tshark -q -z endpoints,ip -r sip.pcapng
3.2. Statistiques SIP tshark
tshark -q -z sip,stat -r sip.pcapng
3.3. Visualiser les appels
tshark -t ud -Y "sip.CSeq.method eq INVITE" -r sip.pcapng
3.4. Enregistrements
tshark -t ud -Y "sip.Method == REGISTER" -r sip.pcapng
3.5. Affichage d’une charge SIP
tshark -t ud -Y "frame.number == 8212" -O sip -r sip.pcapng
3.6. Affichage des utilisateurs SIP enregistrés
tshark -t ud -Y "sip.Method == REGISTER" -r sip.pcapng -T fields -e sip.to.user
3.7. Analyse RTP
tshark -r sip.pcapng -q -z rtp,streams
4. Notes
- Captures et scénario à peupler
- RE-INVITE (capture, scénario)
- PRACK (capture, scénario)
- Scénarios de la méthode ACK
- Précisions sur les 6XX
- Simulation Sipp http://sipp.sourceforge.net/
- Mieux commenter 7. Proxy SIP UDP