【SIP协议远程分析利器,WireShark+NetCat+TcpDump助力实现Freeswitch远程调试】

Wireshark+NetCat+TcpDump实现远程抓包分析

  • 使用背景
    • WireShark分析SIP呼叫
      • 本地实时抓包
    • 服务器抓包
        • 本地抓包的优缺点
        • 常规服务器抓包
        • 服务器抓包优缺点
    • 远程服务器实时抓包分析
      • 走过的弯路
      • 实现原理
      • NC使用技巧
    • 最后放一个多fs的信令分析图
    • 结束语
      • 操作手册
        • 环境假设
        • 客户端监听指令集
        • 服务端监听指令集
        • ssh tunnel监听指令集

使用背景

近期由于研究FreeSwitch高可用性,用来提高AI机器人话务处理单元的稳定性,避免AI处理模块异常导致通话异常,需要对呼叫进行详细的跟踪和分析。
虽然可以通过fs_cli的窗口,查看详细的sip消息内容,并根据SIP消息各个字段进行debug。但是这种方式是命令行模式,所有信息都需要人工逐一仔细分析。单台freeSwitch的情况下,做SIP信令分析还勉强能接受,超过2台以上的fs协作交互时,一个呼叫下来消息通常是几十条,这时候基于文本的协议分析就变得异常困难,和消耗个人精力。分析过程异常艰难,调试问题也变得十分缓慢。
后来想到著名的抓包分析软件 WireShark,具有图形化分析能力,能快速直观的看到呼叫过程。

WireShark分析SIP呼叫

本地实时抓包

这个比较简单,安装完Wireshark后,直接打开,选择一个本地的网络接口,直接抓包即可。
【SIP协议远程分析利器,WireShark+NetCat+TcpDump助力实现Freeswitch远程调试】_第1张图片在过滤器一栏直接输入“sip”,就可以查看本机和服务器之间的sip消息了,如下图
【SIP协议远程分析利器,WireShark+NetCat+TcpDump助力实现Freeswitch远程调试】_第2张图片呼叫结束后,选择“电话->SIP流”,即可看到刚才做的sip呼叫
【SIP协议远程分析利器,WireShark+NetCat+TcpDump助力实现Freeswitch远程调试】_第3张图片

【SIP协议远程分析利器,WireShark+NetCat+TcpDump助力实现Freeswitch远程调试】_第4张图片
这个图形直观易懂,而且点击时,可以直接关联显示具体的sip消息内容,非常的方便,分析调试效率大大提高。【SIP协议远程分析利器,WireShark+NetCat+TcpDump助力实现Freeswitch远程调试】_第5张图片

服务器抓包

本地抓包的优缺点

本地实时抓包优点是及时性,只要拨打电话后,即可重复上面的操作,进行SIP呼叫流程的图形化查看分析。
缺点也比较明显,就是只能查看本机sip话机的信令,而无法查看服务器端的交互记录,特别是多freeSwitch协作的情况下。当多台freeSwitch又不在同一个网段的情况下,变得极为困难。

常规服务器抓包

一般来说,我们通用的解决办法就是用tcpdump这个工具,利用下面的命令

tcpdump -w '1.cap'

将服务器上的数据包进行抓取存盘,然后通sftp的方法,下载到本机,然后用wireshark的打开文件功能进行分析
【SIP协议远程分析利器,WireShark+NetCat+TcpDump助力实现Freeswitch远程调试】_第6张图片
【SIP协议远程分析利器,WireShark+NetCat+TcpDump助力实现Freeswitch远程调试】_第7张图片

这样就实现了对服务器的呼叫流程分析。

服务器抓包优缺点

服务器抓包的优点和缺点同样明显,那就是服务抓的信息更全,更有利于全呼叫链路分析。缺点是步骤繁琐,不能做到实时分析,每一次都需要重复 “抓包->下载->打开–>分析” 这样的步骤。

有没有办法实现多机以及跨网络的抓包方案呢?

答案是有的!

那就是用NetCat这个宝贝工具来进行抓包数据的网络传送,从而实现远程抓取,实时分析的目的!!!

远程服务器实时抓包分析

走过的弯路

rpcap – 网上好多教材提到了这个方案,可以在2022年,这个方案已经过期了,wincap已经明显的不维护了,我下载源码进行编译也未能成功,因此放弃此方案
ssh – 这个方案有一定的可取之处,但是我未能成功执行

注意:win10下,如果在powerShell窗口下执行,是无法弹出wireshark窗口的,需要“Win+R -->cmd”打开传统的命令行窗口才行。
【SIP协议远程分析利器,WireShark+NetCat+TcpDump助力实现Freeswitch远程调试】_第8张图片

实现原理

svr tcpdump svr netcat cli netcat WireShark 抓取网络数据包 tcpdump -s 0 -U -n -w - -i enp0s3 | nc 172.21.153.85 5555 通过管道实时传送抓取内容 cli netcat启动监听,同时启动Wireshark nc -l -p 5555 | "D:\Program Files\Wireshark\Wireshark.exe" -k -S -i - 推送数据 通网络实时推送 通过管道推送数据给WireShark 进行实时数据分析显示 svr tcpdump svr netcat cli netcat WireShark

注意:这里nc无论哪一方做svr都可以的,不限定。上图是本机nc作为svr接收数据,服务器端nc作为client连接上来。实际上反过来也是ok的

 tcpdump -s 0 -U -n -w - -i enp0s3 | nc 172.21.153.85 5555
 nc -l -p 5555 | "D:\Program Files\Wireshark\Wireshark.exe" -k -S -i -

或者这样

 tcpdump -s 0 -U -n -w - -i enp0s3 |nc -l -p 5555
 nc 172.21.152.7 5555 |"D:\Program Files\Wireshark\Wireshark.exe" -k -S -i -

两种方式都OK
甚至通过ssh 隧道转发可以工作,核心思想就是建立起两个nc之间的连接。(下面有详细解释)

NC使用技巧

网络上有很多技巧,这里就不详细说明了。上图展示的是服务端可以直接访问客户机的模式。
此外还有一种常见的情况就是服务器在公网上,而我们的客户机在内网,这里面又有不少网络推送技巧了。
包括利用xshell的ssh forward能力,在本机开启监听端;nc启用数据管道转发能力。参考这篇文章

原理如下图:

svr nc svr ssd xshell cli nc wireshark 建立ssh tunnel 建立本地监听端口5555 绑定服务器127.0.0.1:5555端口 tcpdump抓取本地数据包 获取tcpdump输出,转发到服务端5555监听端口 等待客户端连接 连接本地5555端口 转发连接请求到5555端口 转发连接请求到nc5555端口 建立和nc2虚拟连接 持续推tcpdump抓包数据给cli nc 通过管道推送数据包给WireShark 进行实时数据分析显示 svr nc svr ssd xshell cli nc wireshark

【SIP协议远程分析利器,WireShark+NetCat+TcpDump助力实现Freeswitch远程调试】_第9张图片
连接上服务器后,在本机检查一下ssh隧道是否启用监听
【SIP协议远程分析利器,WireShark+NetCat+TcpDump助力实现Freeswitch远程调试】_第10张图片服务端此时肯定没有这个监听端口的。
需要执行抓包监听指令方可以。

tcpdump -s 0 -U -n -w - -i enp0s3 |nc -l -p 5555

然后再新开一个连接窗口,执行端口查询命令

netstat -putln

【SIP协议远程分析利器,WireShark+NetCat+TcpDump助力实现Freeswitch远程调试】_第11张图片可以看到服务器端已经成功的开启了5555监听服务了

这个时候,客户端一旦连接了127.0.0.1:5555端口,就相当于连接了服务端的5555端口了。
执行下面的命令

nc 127.0.0.1 5555 |"D:\Program Files\Wireshark\Wireshark.exe" -k -S -i -

我们可以看到,和直接连接服务器的区别就是ip地址的不同,一个直接连接服务器公网ip,一个连接的是本机的ip。这就是利用的ssh的隧道转发技术,实现了远端服务器的“虚拟直连”。

最后放一个多fs的信令分析图

【SIP协议远程分析利器,WireShark+NetCat+TcpDump助力实现Freeswitch远程调试】_第12张图片【SIP协议远程分析利器,WireShark+NetCat+TcpDump助力实现Freeswitch远程调试】_第13张图片

相当的直观,相当的Nice!

结束语

通过常用的nc和xshell工具,加上WireShark强大的分析能力,能够搭建复杂的,实时调试环境,提高工作效率。

操作手册

1.windows下载nc,https://eternallybored.org/misc/netcat/ 
2.解压后,放到windows目录下
3.linux服务器安装nc, apt install net-cat
4.linux服务器安装tcpdump, apt install tcpdump
5.启动linux抓包及nc监听服务,tcpdump -s 0 -U -n -w - -i enp0s3 |nc -l -p 5555
6.启动客户端接收(注意,windows下不能用powershell,需要用cmd窗口,否则无法启动wireshark)
  nc 172.21.152.7 5555 |"D:\Program Files\Wireshark\Wireshark.exe" -k -S -i -

环境假设

本机的wireshark安装在 "D:\Program Files\Wireshark"目录下
本机的ip地址为:172.21.153.85
本机操作系统:Win10

服务器的ip地址为:172.21.152.7
服务器的操作系统:Debian 11

客户端监听指令集

tcpdump -s 0 -U -n -w - -i enp0s3 | nc 172.21.153.85 5555

nc -l -p 5555 | "D:\Program Files\Wireshark\Wireshark.exe" -k -S -i -

服务端监听指令集

tcpdump -s 0 -U -n -w - -i enp0s3 |nc -l -p 5555

nc 172.21.152.7 5555 |"D:\Program Files\Wireshark\Wireshark.exe" -k -S -i -

ssh tunnel监听指令集

tcpdump -s 0 -U -n -w - -i enp0s3 |nc -l -p 5555

nc 127.0.0.1 5555 |"D:\Program Files\Wireshark\Wireshark.exe" -k -S -i -

你可能感兴趣的:(wireshark,tcpdump,ssh)