Repository navigation
Run sipnab beside OpenSIPS
sipnab reads the SIP that passes through OpenSIPS off the wire. So it needs nothing from OpenSIPS: no module, no configuration change.
On the OpenSIPS machine, sipnab sees both legs of every call:
- the caller's side into OpenSIPS,
- OpenSIPS's side out to the callee.
It puts them together into one call.
This guide adds sipnab to the OpenSIPS proxy from Use OpenSIPS as your voice stack's SIP server, installed from the packages or built from source.
Every block on this page ran as written, in order, on 2026-10-01, with sipnab 0.5.198 from its release package.
- It ran on the Debian 13 (kernel 6.12.63) and Ubuntu 24.04 (kernel 6.8.0)
machines that the OpenSIPS guide had set up:
- the Watch a call through OpenSIPS step with OpenSIPS from source,
- With Kamailio on the same machine with the OpenSIPS packages.
- The test calls carried audio.
- The terminal interface showed each call on one row.
- On both machines, causing the fault under When something does not work produced the message it quotes.
The examples use 192.0.2.10 as the machine's address.
# Run all of these, in order.
V=$(curl -fsSL https://api.github.com/repos/NormB/sipnab/releases/latest \
| python3 -c 'import json,sys; print(json.load(sys.stdin)["tag_name"].lstrip("v"))')
curl -fsSLO https://github.com/NormB/sipnab/releases/download/v$V/sipnab_${V}_amd64.deb
curl -fsSL https://github.com/NormB/sipnab/releases/download/v$V/SHA256SUMS.txt \
| grep " sipnab_${V}_amd64.deb$" | sha256sum -c -
sudo apt-get install -y ./sipnab_${V}_amd64.deb
sipnab --versionStart sipnab on every interface for 30 seconds. It prints each SIP message as it passes, and a report of the calls at the end:
sudo sipnab -N -d any --duration 30 --reportWhile it runs, place a test call from a second terminal. Do it as in the Place a test call step of the OpenSIPS guide:
# Run all of these, in order.
cd ~/sipp
sipp -sn uas -i 127.0.0.1 -p 5070 -rtp_echo -m 1 -bg
sudo sipp -sf uac_rr.xml 192.0.2.10:5060 -i 192.0.2.10 -p 5080 -s echo -m 1 -timeout 90ssipnab prints every message OpenSIPS relays twice, once on each leg:
- the caller's
INVITEto OpenSIPS at192.0.2.10:5060, - then OpenSIPS's copy of it to the callee at
127.0.0.1:5070, - and the same for the replies and the
BYE.
OpenSIPS's own 100 Giving it a try goes to the caller alone.
When the 30 seconds are up, the report lists the call once:
- It shows the call as
Completed, with 13 messages from both legs. - Below it, an
RTP Streams:table holds the call's audio.- The audio goes straight between the caller and the callee. It never goes through OpenSIPS.
- The table shows the caller's 236
PCMApackets and 10telephone-event(DTMF) packets. - It shows the same again coming back from the callee's echo.
- That is four streams in all.
You can get the same view in a terminal interface, which updates as calls
happen. Run sudo sipnab -d any without -N and without --duration. It
lists the call on one row, Completed, with the same 13 messages.
OpenSIPS and Kamailio on one machine sets up OpenSIPS on 5060 and Kamailio on 5062. With that setup, give sipnab both ports:
sudo sipnab -N -d any --duration 30 --report --portrange 5060-5062A call through each proxy then appears in the report, one row per call.
- The two test calls send their audio from the same ports with the same RTP SSRC.
- sipnab starts a new stream when the second call's SDP renegotiates those ports.
- So the
RTP Streams:table lists each call's streams on rows of their own:- 236
PCMApackets each way for each call, - not one stream of 472 across both.
- 236
-
sipnab reports
No SIP signaling found, but ... RTP packets across ... stream(s) were parsed.- It saw the call's audio, which uses other ports, but none of its SIP.
- OpenSIPS listens on a port outside 5060-5061, the range sipnab watches by default.
- Give sipnab OpenSIPS's ports with
--portrange.
Website · Repository · Issues · Generated from docs/ — edit there, not here.
Getting started
- Installation
- First CLI Triage
- Glossary
- Cookbook
- Runnable Examples
- Real World Captures
- Troubleshooting
- Tuning Capture
- Encapsulations
- Rtpengine Relays
- Backers
Using the TUI
CLI & automation
- CLI Reference
- Error Messages
- Filter DSL
- Output Formats
- SIP Response Codes
- SIP Methods
- SIP Header Fields
- SIP Parameters
- SIP Lint Rules
- MOS and Codecs
Configuration
Integrations (API & MCP)
- REST API
- Prometheus Metrics
- Authentication
- MCP
- MCP Deployment
- MCP Across an Estate
- MCP Tools
- MCP Tools Core
- MCP Tools Signaling
- MCP Tools Captures
- MCP Tools Security
- MCP Tools Media
- MCP Tools Relay
- MCP Tools TFPS
- MCP Tools Server
- MCP Tools vCon
- MCP Tools TLS
- MCP Protocol
- Uprobe Walkthrough
- Capture SIP over TLS
- WASM Plugins
- vCon Export
- vCon Capture Stack
- G729 Decoding
Your SIP server
- Use OpenSIPS as the SIP Server
- Run sipnab beside OpenSIPS
- Use Kamailio as the SIP Server
- Run sipnab beside Kamailio
- Use Asterisk as the PBX
- Run sipnab beside Asterisk
- Use FreeSWITCH in the Voice Stack
- Run sipnab beside FreeSWITCH
Add to your voice stack
- Add a vCon Server
- Send vCons to a vCon Server
- Send vCons to vcon store
- Add TFPS
- Control TFPS from sipnab
- Ban SIP Scanners with fail2ban
- Feed fail2ban from sipnab
- Add rtpengine
- Name rtpengine Media with sipnab
- Add rtpproxy
- Name rtpproxy Media with sipnab
- Add Homer
- Connect sipnab to Homer
- Add Prometheus and Grafana
- Add sipnab Metrics to Prometheus
Development & internals
- Internals Index
- Internals Subsystem Guide
- Internals Invariants
- Internals Testing
- Internals Walkthroughs
- Internals Build CI Release
- Internals Profiling
- Internals Domain Primer
- Library API
- Benchmarks
- Fault Model
- Threat Model
- Assurance Case
- Architecture
- Internals Threading
- Internals TUI Testing
- Internals Zero Copy Payloads
- Internals Uprobe Capture
- Internals Rtpengine Control Plane
- Internals Relay Control Decoding
- Internals vCon Exporter
- Internals Operator Guide Notes
- Internals Postmortems
- Internals Code Map
- Internals Lint Rules
- Internals Encapsulation Decoding
- Internals MCP Design Notes
- Internals Metrics And Output Notes