在排查信令协商和媒体丢包问题时,经常会用到抓包工具,本文就与大家分享下这些抓包工具的常用参数。
常用的抓包工具有:
tcpdump
ngrep
sngrep
接下来就给大家分别介绍一下这些抓包工具的用法。
- tcpdump -
tcpdump是老牌的抓包工具,适用场景非常广泛,安装也很简单基本都在官方的基础库内:
# CentOS/Redhat/Fedora
yum install -y tcpdump
# Debian/Ubuntu
apt install -y tcpdump
tcpdump命令行参数分两部分,一部分是tcpdump的常归参数;一部分是用于过滤包的表达式部分。下面介绍下常用的
部分参数:
下面介绍一些具体的命令:
抓取指定网卡上的包,并以ASCII形式打印包内容:
tcpdump -i eth0 -A
抓取指定网卡的包,并写入eth0-package.pcap文件:
tcpdump -i eth0 -s0 -w eth0-package.pcap
抓取5060端口的包,并且以600秒间隔写入文件:
tcpdump -i eth0 -s0 -G 600 port 5060 -w %Y_%m%d_%H%M_%S.pcap 2>&1 &
常用的一些表达式用法:
# 抓取包含ip地址为1.1.1.1的包,并以ASCII形式打印,-vvv将打印更详细的内容
tcpdump -A -vvv -i eth0 host 1.1.1.1
# 抓取源地址为1.1.1.1的包,并打印
tcpdump -A -vvv -i eth0 src host 1.1.1.1
# 抓取目标地址为1.1.1.1的包,并打印
tcpdump -A -vvv -i eth0 dst host 1.1.1.1
# 抓取发送给1.1.1.1和2.2.2.2udp协议且端口为5060的包,然后打印包内容
tcpdump -A -vvv -i eth0 '((udp) and (port 5060) and ((dst host 1.1.1.1) or (dst host 2.2.2.2)))'
- ngrep -
ngrep是grep工具的网络版,它用法与tcpdump差不多,下面介绍几个常用的方法:
# 抓取eth0网卡上含有ip地址1.1.1.1的包
ngrep -d eth0 host 1.1.1.1
# 抓取eth0网卡上80端口的包,并且打印包中文本,同时转换换行符自动换行
ngrep -W byline -d eth0 port 80
- sngrep -
sngrep是专门针对SIP协议的抓包,它会实时过滤抓取的SIP通话,同时在文本界面就可以显示SIP协商流程。这样只需要在服务器上有此工具,就不需要把包下载到本地,用wireshark之类GUI工具去查看SIP协商是否正确。
sngrep启动参数介绍:
-V --version 打印版本信息
-d --device 抓取指定网卡设备
-I --input 从pcap文件读取SIP信息
-O --output 将抓取的全部SIP包写入文件
-c --calls 只显示INVITE的SIP消息
-r --rtp 抓取RTP包信息
-l --limit 限制抓取的最大通话数
在sngrep通话列表文本界面,也有常用的快捷键如下:
ESC 退出文本界面或返回上一级。
Enter 显示此通话的详细SIP流。
F2 将抓取的全部呼叫或选中呼叫的包保存为文件。
F3 查询通话,可以根据SIP方法、From、To等内容过滤呼叫。
F5 清空当前的呼叫列表。
F7 过滤通话,可以根据SIP方法、From、To等内容过滤呼叫。与F3类似,只是字段更精确。
F10 选择显示的列,比如把通话时间列出来。
- 总结 -
以上三个工具各有特点,可以根据自己喜好和场景选用适合自己的。不过本人在使用中更喜欢用tcpdump工具,因为它更通用,资源占用也更小。比如在大量通话压测的场景,为了分析是应用瓶颈造成包没收到,还是因为网络丢包造成应用没收到。这种情况下就需要用到tcpdump工具实时的将SIP信令的包全部抓取,并写入文件。然后再配合sngrep工具在服务器上查看异常的通话是丢包问题,还是应用瓶颈问题。
作者:Jeebiz 创建时间:2022-12-15 15:04
最后编辑:Jeebiz 更新时间:2024-11-01 12:19
最后编辑:Jeebiz 更新时间:2024-11-01 12:19