<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>pcap &#8211; Garbell.NET</title>
	<atom:link href="https://www.garbell.net/tag/pcap/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.garbell.net</link>
	<description>Notes techniques : Linux, réseau et télécoms, depuis 2003</description>
	<lastBuildDate>Thu, 01 Oct 2026 19:17:45 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
<site xmlns="com-wordpress:feed-additions:1">65339430</site>	<item>
		<title>Analyser les appels SIP en ligne de commande avec sngrep</title>
		<link>https://www.garbell.net/2026/10/01/analyser-appels-sip-sngrep/</link>
					<comments>https://www.garbell.net/2026/10/01/analyser-appels-sip-sngrep/#respond</comments>
		
		<dc:creator><![CDATA[AMGV]]></dc:creator>
		<pubDate>Thu, 01 Oct 2026 19:17:45 +0000</pubDate>
				<category><![CDATA[Command-Line]]></category>
		<category><![CDATA[Télécom]]></category>
		<category><![CDATA[command-line]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[pcap]]></category>
		<category><![CDATA[SIP]]></category>
		<category><![CDATA[sngrep]]></category>
		<category><![CDATA[VoIP]]></category>
		<guid isPermaLink="false">https://www.garbell.net/2026/10/01/analyser-appels-sip-sngrep/</guid>

					<description><![CDATA[Un appel qui sonne dans le vide, un poste qui ne s&#8217;enregistre plus, un « 486 Busy Here » inexpliqué : pour comprendre ce qui se passe en SIP, il faut voir les messages échangés. Wireshark le fait très bien, mais demande une interface graphique et un transfert de fichier. sngrep affiche les dialogues SIP [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Un appel qui sonne dans le vide, un poste qui ne s&rsquo;enregistre plus, un « 486 Busy Here » inexpliqué : pour comprendre ce qui se passe en SIP, il faut voir les messages échangés. Wireshark le fait très bien, mais demande une interface graphique et un transfert de fichier. <strong>sngrep</strong> affiche les dialogues SIP et leur diagramme de séquence directement dans le terminal, sur le serveur lui-même : IPBX, SBC ou passerelle.</p>
<p>Les commandes et les écrans ci-dessous ont été vérifiés sur Debian 13 (Trixie) avec sngrep 1.8.2.</p>
<h2>Installation</h2>
<pre>apt install sngrep</pre>
<p>La capture réseau demande les droits root : lancé par un utilisateur normal, sngrep s&rsquo;arrête avec <code>Couldn't activate capture: socket: Operation not permitted</code>. Utilisez <code>sudo</code> pour la capture en direct. La lecture d&rsquo;un fichier pcap, elle, ne demande aucun droit particulier.</p>
<h2>Capture en direct</h2>
<pre>sudo sngrep</pre>
<p>Par défaut, sngrep écoute sur toutes les interfaces (<code>any</code>) et affiche tous les paquets SIP qu&rsquo;il reconnaît. Pour restreindre :</p>
<pre>sudo sngrep -d eth0                      # une seule interface
sudo sngrep -d eth0 port 5060            # filtre BPF, même syntaxe que tcpdump
sudo sngrep -d eth0 host 192.168.1.1 and udp
sudo sngrep -c                           # uniquement les dialogues qui commencent par un INVITE</pre>
<p>L&rsquo;option <code>-c</code> est la plus utile sur un serveur chargé : elle masque les REGISTER, OPTIONS et autres messages qui noient les appels.</p>
<h2>La liste des dialogues</h2>
<p>L&rsquo;écran principal liste un dialogue SIP par ligne : méthode, appelant, appelé, nombre de messages, source et destination.</p>
<pre>                         sngrep - SIP messages flow viewer
  Current Mode: Offline          Dialogs: 2          Filename: test.pcap
  Match Expression:              BPF Filter:
  Display Filter:
      ^Idx Method     SIP From            SIP To                  Msgs  Source              Destination
  [ ] 1    INVITE     101@192.168.1.1     102@192.168.1.1         7     192.168.1.20:5060   192.168.1.1:5060
  [ ] 2    INVITE     101@192.168.1.1     0600000000@192.168.1.1  5     192.168.1.20:5060   192.168.1.1:5060

Esc Quit   Enter Show   Space Select   F1 Help   F2 Save   F3 Search   F4 Extended   F5 Clear   F7 Filter</pre>
<p>Touches principales sur cet écran :</p>
<pre>Entrée    afficher le diagramme du dialogue sélectionné
Espace    sélectionner plusieurs dialogues (Entrée les affiche ensemble)
F3 ou /   filtre d'affichage : ne garder que les lignes contenant un texte
F4 ou x   diagramme étendu (le dialogue et ceux qui lui sont liés)
F6 ou R   messages bruts du dialogue sélectionné
F7 ou F   filtres : SIP From, SIP To, source, destination, contenu, méthodes
F2 ou S   enregistrer la capture
F5        vider la liste (irréversible)
p         suspendre ou reprendre la capture
F1 ou h   aide
Échap, q  revenir à l'écran précédent ou quitter</pre>
<p>Le filtre <code>F7</code> permet notamment de décocher REGISTER, OPTIONS ou NOTIFY pour ne garder que les appels.</p>
<h2>Le diagramme d&rsquo;un appel</h2>
<p>Entrée sur un dialogue affiche son diagramme de séquence, avec l&rsquo;horodatage et le délai entre chaque message. Le message sélectionné est affiché en entier sur la droite.</p>
<pre>                   Call flow for c1@192.168.1.20 (Color by Request/Response)
                                                        │INVITE sip:102@192.168.1.1 SIP/2.0
            192.168.1.20:5060      192.168.1.1:5060     │Via: SIP/2.0/UDP 192.168.1.20:5060;branch=...
          ──────────┬─────────  ──────────┬─────────    │From: &lt;sip:101@192.168.1.1&gt;;tag=ac1
  00:16:40.000000   │        INVITE       │             │To: &lt;sip:102@192.168.1.1&gt;
        +0.010000   │ ──────────────────&gt; │             │Call-ID: c1@192.168.1.20
  00:16:40.010000   │      100 Trying     │             │CSeq: 1 INVITE
        +0.490000   │ &lt;────────────────── │             │Content-Length: 0
  00:16:40.500000   │     180 Ringing     │
        +2.500000   │ &lt;────────────────── │
  00:16:43.000000   │        200 OK       │
        +0.050000   │ &lt;────────────────── │
  00:16:43.050000   │         ACK         │
       +16.950000   │ ──────────────────&gt; │
  00:17:00.000000   │         BYE         │
        +0.020000   │ ──────────────────&gt; │
  00:17:00.020000   │        200 OK       │
                    │ &lt;────────────────── │</pre>
<p>Touches sur cet écran :</p>
<pre>↑ ↓       passer d'un message à l'autre
Entrée    afficher le message sélectionné en brut
Espace    sélectionner deux messages pour les comparer
F2 ou d   afficher le détail SDP (codecs, adresses et ports média)
F3 ou m   afficher ou masquer les flux RTP (avec la capture RTP activée)
s         diagramme compressé
c         changer le mode de couleur
Échap     revenir à la liste</pre>
<p>Ce que l&rsquo;on lit dans le diagramme :</p>
<ul>
<li><strong>Un INVITE répété sans réponse</strong> : les retransmissions indiquent que le message n&rsquo;arrive pas ou que la réponse ne revient pas. On regarde alors le pare-feu ou le routage.</li>
<li><strong>Un 200 OK répété après le décroché</strong> : l&rsquo;ACK n&rsquo;arrive pas au destinataire. Classique avec un NAT mal géré, l&rsquo;appel est souvent coupé au bout d&rsquo;une trentaine de secondes.</li>
<li><strong>Une réponse 4xx, 5xx ou 6xx</strong> : le code donne la cause du refus (401/407 authentification, 404 numéro inconnu, 486 occupé, 488 codecs incompatibles, 503 service indisponible…).</li>
<li><strong>Un appel établi sans son</strong> : comparez les adresses IP du SDP (touche <code>F2</code>) dans l&rsquo;INVITE et dans le 200 OK. Une adresse privée qui part vers l&rsquo;extérieur trahit un problème de NAT.</li>
</ul>
<h2>Expression de recherche : ne capturer que certains appels</h2>
<p>Un texte donné en argument filtre les dialogues dès la capture : si la requête qui ouvre le dialogue contient ce texte, tout le dialogue est conservé, réponses comprises.</p>
<pre>sudo sngrep -c 0600000000</pre>
<p>Seuls les appels contenant ce numéro sont affichés. Attention, la recherche porte sur la requête initiale (l&rsquo;INVITE) : <code>sngrep 486</code> ne trouvera pas les appels rejetés en « 486 Busy Here », car ce code n&rsquo;apparaît que dans la réponse. Pour cela, utilisez le filtre d&rsquo;affichage <code>F3</code> une fois la capture lancée.</p>
<p>Autres options :</p>
<pre>-i        rendre la recherche insensible à la casse
-v        inverser la recherche (exclure les dialogues qui correspondent)</pre>
<h2>Enregistrer et relire une capture</h2>
<p>Enregistrer tout ce qui est capturé dans un fichier pcap, tout en gardant l&rsquo;interface :</p>
<pre>sudo sngrep -d eth0 -O /tmp/sip-$(date +%F-%H%M).pcap port 5060</pre>
<p>Capturer sans interface, par exemple pendant qu&rsquo;on reproduit un problème depuis un poste :</p>
<pre>sudo sngrep -N -c -O /tmp/appels.pcap</pre>
<p>sngrep affiche seulement le nombre de dialogues capturés ; on arrête avec <code>Ctrl+C</code>. Avec une expression de recherche, seuls les dialogues correspondants sont écrits dans le fichier :</p>
<pre>sudo sngrep -N -O /tmp/appel-client.pcap 0600000000</pre>
<p>Relire ensuite le fichier, sur le serveur ou sur un autre poste, sans droits root :</p>
<pre>sngrep -I /tmp/appels.pcap</pre>
<p>Le fichier est au format pcap standard : il s&rsquo;ouvre aussi dans Wireshark ou avec <code>tcpdump -r</code>. Les filtres BPF fonctionnent aussi en lecture : <code>sngrep -I capture.pcap host 192.168.1.1</code>.</p>
<p>Depuis l&rsquo;interface, <code>F2</code> ouvre la fenêtre d&rsquo;enregistrement. On y choisit les dialogues à garder (tous, sélectionnés avec <code>Espace</code>, ou filtrés) et le format : pcap avec le SIP seul, pcap avec SIP et RTP, ou texte.</p>
<pre>  ┌─ Dialogs ───────────────────┐ ┌─ Format ────────────────────┐
  │(*) all dialogs              │ │(*) .pcap (SIP)              │
  │( ) selected dialogs [0]     │ │(-) .pcap (SIP + RTP)        │
  │( ) filtered dialogs [2]     │ │( ) .txt                     │
  └─────────────────────────────┘ └─────────────────────────────┘</pre>
<p>Le format « SIP + RTP » n&rsquo;est disponible que si la capture a été lancée avec <code>-r</code>, qui conserve le contenu des paquets RTP en mémoire :</p>
<pre>sudo sngrep -c -r -O /tmp/appel-avec-son.pcap</pre>
<p>Le son peut ensuite être écouté dans Wireshark (menu Telephony &gt; VoIP Calls). Attention à la mémoire : avec <code>-r</code>, chaque appel occupe nettement plus de place.</p>
<h2>Longues captures</h2>
<p>sngrep garde les dialogues en mémoire, avec une limite par défaut de 20 000 dialogues. Pour le laisser tourner longtemps sur un serveur chargé :</p>
<pre>sudo sngrep -c -l 5000 -R</pre>
<p><code>-l</code> fixe la limite et <code>-R</code> supprime les dialogues les plus anciens quand elle est atteinte, au lieu d&rsquo;arrêter la capture.</p>
<h2>Configuration</h2>
<p>Les réglages par défaut se placent dans <code>/etc/sngreprc</code> (pour tout le système) ou <code>~/.sngreprc</code> (pour un utilisateur). Le fichier livré par Debian contient tous les réglages possibles, en commentaire. Exemple :</p>
<pre>vi ~/.sngreprc</pre>
<pre># Interface et filtre par défaut
set capture.device eth0
set filter.methods INVITE
# Dossier proposé à l'enregistrement (F2)
set sngrep.savepath /tmp/sngrep-captures
# Ne pas demander de confirmation en quittant
set cl.noexitprompt on</pre>
<p>Pour afficher la configuration active : <code>sngrep -D</code>.</p>
<h2>Pour aller plus loin</h2>
<ul>
<li><strong>SIP sur TLS</strong> : l&rsquo;option <code>-k</code> accepte la clé privée RSA du serveur pour déchiffrer les paquets capturés.</li>
<li><strong>HEP/EEP</strong> : sngrep peut recevoir des paquets encapsulés envoyés par un IPBX ou un SBC (<code>-L udp:0.0.0.0:9060</code>) ou en envoyer vers un serveur Homer (<code>-H udp:192.168.1.50:9060</code>). Pratique pour observer un équipement sur lequel on ne peut pas installer sngrep.</li>
</ul>
<h2>En résumé</h2>
<pre>sudo sngrep -c                               # voir les appels en direct
sudo sngrep -c 0600000000                    # suivre un numéro
sudo sngrep -N -c -O /tmp/appels.pcap        # capturer sans interface
sngrep -I /tmp/appels.pcap                   # relire une capture</pre>
<h2>Sources</h2>
<ul>
<li><a href="https://github.com/irontec/sngrep">sngrep sur GitHub (Irontec)</a></li>
<li><a href="https://manpages.debian.org/trixie/sngrep/sngrep.8.en.html">sngrep(8), Debian Trixie</a></li>
<li><a href="https://packages.debian.org/trixie/sngrep">Paquet sngrep, Debian Trixie</a></li>
<li><a href="https://www.rfc-editor.org/rfc/rfc3261">RFC 3261 : SIP</a></li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://www.garbell.net/2026/10/01/analyser-appels-sip-sngrep/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1631</post-id>	</item>
	</channel>
</rss>
