VoIP problems are rarely “random”. In almost every SIP/RTP issue, the network is doing exactly what it was told — we just need visibility. Wireshark live monitoring is the fastest way to see what actually happened: SIP signaling, SDP negotiation, RTP media direction, NAT behavior, retransmissions, and codec/DTMF details.
This guide shows a production-safe workflow to capture calls, apply the right filters, decode RTP audio, and quickly diagnose common failures like one-way audio, no audio, incoming calls fail, RTP missing, and DTMF not detected.
You’ll get a practical approach that works whether your stack is: Asterisk / FreePBX, SIP softphones, SIP trunks, on-prem setups, and hybrid networks.
A successful call has two planes:
The most important thing: RTP ports are negotiated inside SDP (carried in SIP messages). That means you must capture SIP to learn where RTP should flow.
Reference reading (authoritative): Wireshark Documentation, RFC 3261 (SIP), RFC 3550 (RTP).
A capture is only as good as its vantage point. Choose one:
If you have NAT involved, capture on the PBX is usually the fastest path to truth.
On production PBX servers, running full GUI Wireshark is not ideal. Instead: capture with tcpdump and open the file in Wireshark on your laptop.
ip -br a
ip route
Adjust RTP range to match your PBX config (many use 10000–20000, but verify).
# Replace eth0 with your real interface
# This captures: SIP (5060/5061) + RTP (10000-20000) + DNS (53) + NTP (123) for troubleshooting context
sudo tcpdump -i eth0 -s 0 -w voip-call.pcap \
'(udp port 5060 or tcp port 5060 or udp port 5061 or tcp port 5061) or \
(udp portrange 10000-20000) or \
(udp port 53) or (udp port 123)'
# Example: capture traffic only between PBX and one device/trunk
sudo tcpdump -i eth0 -s 0 -w voip-target.pcap host 203.0.113.10
# Stop tcpdump with Ctrl+C, then copy the pcap to your PC
scp root@YOUR_PBX_IP:/root/voip-call.pcap .
Wireshark can open .pcap / .pcapng directly.
sip
sdp
rtp
rtcp
Open any SIP packet → find Call-ID value → then filter:
sip.Call-ID contains "a84b4c76e66710"
ip.addr == 203.0.113.10
ip.src == 10.10.10.50 && ip.dst == 203.0.113.10
sip && (sip.Method == "INVITE" || sip.Method == "REGISTER")
Then look for repeated INVITE/REGISTER with increasing CSeq and identical payload.
If people search “RTP not showing in Wireshark”, the usual reason is: you didn’t decode the negotiated RTP ports, or your capture missed the interface.
sdpm=audio 18642 RTP/AVP 0 101In SDP:
m=audio 18642 means the receiver expects RTP on UDP port 18642c=IN IP4 203.0.113.10 means RTP target IP is 203.0.113.10v=0
o=- 169703920 169703920 IN IP4 203.0.113.10
s=-
c=IN IP4 203.0.113.10
t=0 0
m=audio 18642 RTP/AVP 0 8 101
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
Once you know IP+port, filter RTP precisely:
udp.port == 18642 && ip.addr == 203.0.113.10
Wireshark can decode RTP and even export audio (when it’s not encrypted). This turns “I think audio is missing” into a measurable fact.
If the stream shows packets one direction only, you likely have one-way audio (NAT/firewall/RTP handling).
One-way audio almost always means: RTP is flowing only in one direction, or is being sent to the wrong IP/port due to NAT rewriting or SDP mismatch.
For IVR/menu issues, the most common root cause is DTMF transport mismatch. In Wireshark, you want to see if telephone-event is negotiated and present.
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
rtpevent
If you do not see telephone-event in SDP and you do not see RTPEVENT frames,
then DTMF is not being sent in RFC2833/RFC4733 style (common requirement for trunks and IVRs).
Helpful background: RFC 4733 (RTP Payload for DTMF).
Authentication and routing problems are visible in SIP responses. Use display filters to isolate REGISTER or INVITE and inspect response codes.
sip.Method == "REGISTER"
sip.Method == "INVITE"
sip.Status-Code == 401
sip.Status-Code == 403
sip.Status-Code == 488
For SIP fundamentals: RFC 3261 (SIP).
On headless servers, tshark (Wireshark CLI) can extract critical info fast.
tshark -r voip-call.pcap -Y sip \
-T fields -e frame.time -e ip.src -e ip.dst -e sip.Call-ID -e sip.Method -e sip.Status-Code
tshark -r voip-call.pcap -Y sdp \
-T fields -e ip.src -e ip.dst -e sdp.connection_info -e sdp.media.port
tshark -r voip-call.pcap -Y rtp -T fields -e ip.src | sort | uniq -c | sort -nr
Tip: start with a wide capture (SIP + wide UDP), then narrow down once you discover real RTP ports.
When escalating to an ISP/SIP provider, “audio not working” is weak. Send evidence:
c= and m=audio values (IP and RTP ports)In Wireshark, you can right-click a SIP packet → Copy → As Printable Text for clean sharing. Avoid sharing entire PCAPs publicly (they may contain credentials and internal IPs).
The winning workflow is simple: capture from the right place, isolate one call using Call-ID, read SDP to learn RTP targets, then confirm media direction by decoding RTP streams. With this, you can solve most VoIP issues in minutes — including one-way audio, missing RTP, codec mismatches, and DTMF failures.
Official Wireshark references: Wireshark Docs and Wireshark VoIP Calls Wiki.