Wireshark+NetCat+TcpDump实现远程抓包分析
使用背景
近期由于研究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”打开传统的命令行窗口才行。
实现原理
注意:这里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启用数据管道转发能力。参考这篇文章
原理如下图:
连接上服务器后,在本机检查一下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 -