测试必杀技之linux抓包神器-tcpdump
作为测试人员因为要分析定位问题,总是不可避免的需要使用各种抓包工具,所以市面上的抓包工具也非常多:比如代理型的抓包工具 fiddler 和 Charles,比如功能强大的 Burpsuite,也有浏览器自带的 F12,还有专注于网络协议报文的 wireshark 等等。
这些工具各有所长,但是他们都有一个共同的特点,就是都有图形化界面可操作,使用相对来说都还比较简单。那么,如果在 Linux 操作系统的命令行模式下,没有图形化界面的时候,我们想要抓包,该怎么办呢?
所有,今天我就给大家介绍一款非常好用的 Linux 命令行的抓包神器:tcpdump,一款可以根据使用者的定义对网络上的数据包进行截获的包分析工具。
要灵活使用 tcpdump 工具必须要有两个必备的知识基础:
第一:Linux 操作系统:因为这是一款基于 Linux 系统下命令行的抓包工具,所以需要对 Linux 的基本操作和常用命令有一定的基础;
第二:网络知识:因为 tcpdump 是将网络中传送的数据包完整的截获下来然后进行分析,所以想要分析捕获到的报文,需要了解 OSI 七层网络模型,以及常用网络协议等。
tcpdump 这个工具有非常丰富的参数,可以提供不同的功能,满足多样的抓包需求。
tcpdump
默认输入 tcpdump 这个命令,回车操作之后,它将监视第一个网络接口上所有流过的数据包,一般是 eth0,如下图所示:
tcpdump -iIo
一般情况下,我们可能关心的数据并不是 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 这个工具就自然显示出其用武之地了,功能非常强大,可以有辅助测试工作的进行!
说明:本文为柠檬班Tricy老师原创,转载需注明出处