测试常用抓包工具
作为测试人员因为要分析定位问题,总是不可避免的需要使用各种抓包工具,所以市面上的抓包工具也非常多:比如代理型的抓包工具fiddler和Charles,比如功能强大的Burpsuite,也有浏览器自带的F12,还有专注于网络协议报文的wireshark等等。
这些工具各有所长,但是他们都有一个共同的特点,就是都有图形化界面可操作,使用相对来说都还比较简单。那么,如果在linux操作系统的命令行模式下,没有图形化界面的时候,我们想要抓包,该怎么办呢?
所有,今天我就给大家介绍一款非常好用的linux命令行的抓包神器:tcpdump,一款可以根据使用者的定义对网络上的数据包进行截获的包分析工具。
tcpdump要求的背景知识
要灵活使用tcpdump工具必须要有两个必备的知识基础:
第一、linux操作系统:因为这是一款基于linux系统下命令行的抓包工具,所以需要对linux的基本操作和常用命令有一定的基础;
第二、网络知识:因为 tcpdump是将网络中传送的数据包完整的截获下来然后进行分析,所以想要分析捕获到的报文,需要了解OSI七层网络模型,以及常用网络协议等。
tcpdump的常用参数
tcpdump这个工具有非常丰富的参数,可以提供不同的功能,满足多样的抓包需求。
不加任何参数
tcpdump
默认输入tcpdump这个命令,回车操作之后,它将监视第一个网络接口上所有流过的数据包,一般是eth0,如下图所示:
监视指定网络接口的数据包
tcpdump -i eth1
一般情况下,我们可能关心的数据并不是eth0的接口,这时就需要指定端口进行数据包的捕获。在tcpdump后面加一个 -i 的参数,后面跟具体需要捕获的接口名称,就可以抓取经过这个具体接口的所有数据包。
监视指定主机的数据包
tcpdump host 175.8.50.137
如果你非常明确关心的是哪个主机的收发报文,那么就可以直接过滤这个主机的数据包。 host 后面加主机的IP地址,就可以只抓取这个主机的所有数据包,其他主机的数据包就会被过滤掉。
如果需要捕获该主机与特定某主机的交互数据包,可以用逻辑运算符来表示:
tcpdump host 175.8.50.137 and 100.27.48.1
这就表示只有主机175.8.50.137 和 主机100.27.48.1的交互数据报文才会被捕获到。
监视指定协议和端口的数据包
tcpdump tcp port 22
加上具体某个协议的某个端口,就可以更加精确的捕获对应的业务的数据报文了。如上,就会只抓取TCP协议的22端口的数据报,也就是SSH协议的数据报文:
显示协议头和包内容
tcpdump -X
加-X参数,可以把协议头和包内容都原原本本的显示出来(tcpdump会以16进制和ASCII的形式显示),这在进行协议分析时是绝对的利器。
控制捕获的数据包数量
tcpdump -c xxx
-c 参数,即Count的含义,设置希望tcpdump帮我们抓几个包。如下图,将最多捕获9600个包:
保存捕获到的数据包
tcpdump -w xxx
参数-w 直接将包写入文件中,存储到磁盘上,为后续使用。如下图所示,就是将捕获到的数据保存到test.cap的文件里:
停止抓包后,就可在当前目录下看到保存的文件:
当然,这个保存的保存可以通过xftp传出到本地,然后用wireshark工具可以打开,进行更加直观的分析:
将流量进行回放
tcpdump -r xxx
参数-r 可以实现“流量回放”的功能,就是把历史上的某一时间段的流量,重新模拟回放出来,用于流量分析。比如下图所示:就是将上面捕获保存的流量包test.cap进行回放:
总结
如果公司的服务在Unix类的系统里操作比较多,那么作为测试必然要经常使用命令行,也就必然要去分析一些linux下的数据报文,定位问题和bug,所以tcpdump这个工具就自然显示出其用武之地了,功能非常强大,可以有辅助测试工作的进行!
欢迎来到testingpai.com!
注册 关于