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

使用背景

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

WireShark分析SIP呼叫

本地实时抓包

这个比较简单,安装完Wireshark后,直接打开,选择一个本地的网络接口,直接抓包即可。
在这里插入图片描述在过滤器一栏直接输入“sip”,就可以查看本机和服务器之间的sip消息了,如下图
在这里插入图片描述呼叫结束后,选择“电话->SIP流”,即可看到刚才做的sip呼叫
在这里插入图片描述

在这里插入图片描述
这个图形直观易懂,而且点击时,可以直接关联显示具体的sip消息内容,非常的方便,分析调试效率大大提高。在这里插入图片描述

服务器抓包

本地抓包的优缺点

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

常规服务器抓包

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

tcpdump -w '1.cap'

将服务器上的数据包进行抓取存盘,然后通sftp的方法,下载到本机,然后用wireshark的打开文件功能进行分析
在这里插入图片描述
在这里插入图片描述

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

服务器抓包优缺点

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

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

答案是有的!

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

远程服务器实时抓包分析

走过的弯路

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

注意:win10下,如果在powerShell窗口下执行,是无法弹出wireshark窗口的,需要“Win+R -->cmd”打开传统的命令行窗口才行。
在这里插入图片描述

实现原理

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

在这里插入图片描述
连接上服务器后,在本机检查一下ssh隧道是否启用监听
在这里插入图片描述服务端此时肯定没有这个监听端口的。
需要执行抓包监听指令方可以。

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

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

netstat -putln

在这里插入图片描述可以看到服务器端已经成功的开启了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的信令分析图

在这里插入图片描述在这里插入图片描述

相当的直观,相当的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 -
注意事项

关于系统安全方面的题外话

由于SIP呼叫的特殊性,为了防止盗打和恶意流量攻击即(DDoS)攻击,建议如下:
1.将每个企业的配置数据进行单独隔离;
2.使用安全连接;
3.协议层独立加密算法,使用TLS和SSL;
4.与其它系统对接接口具有可靠的加密及鉴权机制;

建议使用专门的网络安全设备,来做进一步的安全防范,降低风险
设备要求
1.具备权威机构安全认证;
2.具有DDoS防御能力,有流量清洗设备,可抵御不低于100Gbps的非法流量攻击,支持四到七层防护;
3.具有信息反垃圾能力,包括但不限于反动、暴恐、色情、粗鲁等信息,反垃圾准确率不低于90%;
只有符合了以上要求的设备,才能有效的进行防范。例如:深某服的设备,就不错。

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



服务器的ip地址为:172.21.152.7
服务器的操作系统:Debian 11
#### 客户端监听指令集
```bash
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 -

  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值