在排查信令协商和媒体丢包问题时,经常会用到抓包工具,本文就与大家分享下这些抓包工具的常用参数。

常用的抓包工具有:

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-08-20 17:39