目录
一、tcpdump 抓包工具的基本介绍和学习基础
1.1 常用的抓包工具
1.2 tcpdump 抓包工具介绍
二、tcpdump 抓包工具使用环境和初体验
2.1 编译安装 tcpdump
2.2 抓包
三、讲解 TCP 协议报文报头
四、tcpdump 抓包工具常规过滤规则
4.1 tcpdump 的 host 和 net 过滤规则
4.2 tcpdump 基于端口的过滤规则
4.3 tcpdump 基于协议过滤的规则
一、tcpdump 抓包工具的基本介绍和学习基础
1.1 常用的抓包工具
作为运维、测试工程师,抓包工具不仅仅是工作中必须要用到的工具,而且是面试过程中也必然会问到的一类工具。
1.2 tcpdump 抓包工具介绍
TCPdump,全称 dump the traffic on a network,是一个运行在 linux 平台可以根据使用者需求对网络上传输的数据包进行捕获的抓包工具。
tcpdump 可以支持的功能:
- 在Linux平台将网络中传输的数据包全部捕获过来进行分析;
- 支持网络层、传输层协议等协议捕获过滤;
- 数据发送和接收的主机、网卡和端口等各种过滤捕获数据规则;
- 提供 and、or、not 等语句进行逻辑组合捕获数据包或去掉不用的信息;
- 结合 wireshark 工具分析捕获的报文。
要灵活使用 tcpdump 工具必须要有两个必备的知识基础:
- Linux 操作系统: 因为这是一款基于 Linux 系统下命令行的抓包工具,所以需要对 Linux 的基本操作和常用命令有一定的基础;
- 网络知识: 因为 tcpdump 是将网络中传送的数据包完整的截获下来然后进行分析,所以想要分析捕获到的报文,需要了解 OSI 七层网络模型,以及常用网络协议等。
二、tcpdump 抓包工具使用环境和初体验
tcpdump 下载官方网站:Home | TCPDUMP & LIBPCAP
大家如果要练习这个工具的使用,可以自己安装一个 Linux 虚拟机,或者自己购买一个 Linux 的云服务器。我这里给大家演示的是 Linux 虚拟机,CentOS 7 的系统。但是基本上所有发行版的Linux 使用这个工具都是差不多的。
2.1 编译安装 tcpdump
[root@mysql01 ~]# tar -zxvf tcpdump-4.99.4.tar.gz
[root@mysql01 ~]# tar -zxvf libpcap-1.10.4.tar.gz
[root@mysql01 ~]# cd libpcap-1.10.4/
[root@mysql01 ~/libpcap-1.10.4]# ./configure
[root@mysql01 ~/libpcap-1.10.4]# make && make install
[root@mysql01 ~/libpcap-1.10.4]# cd ../tcpdump-4.99.4/
[root@mysql01 ~/tcpdump-4.99.4]# ./configure
[root@mysql01 ~/tcpdump-4.99.4]# make && make install
2.2 抓包
Ctrl+C 中断抓包
默认输入tcpdump(tcpdump -i any)这个命令,回车操作之后,它将监视第一个网络接口上所有流过的数据包,一般是 eth0,如下图所示:
12:26:14.871117 IP mysql01.ssh > 192.168.170.1.62763: Flags [P.], seq 3365399120:3365399316, ack 384892789, win 261, length 196
从上面的输出来看,可以总结出:
- 第一列:时分秒毫秒 12:26:14.871117
- 第二列:网络协议 IP
- 第三列:发送方的 ip 地址+端口号,(如 192.168.170.1.62763)其中 192.168.170.1 是 ip,而62763 是端口号;(如 mysql01.ssh)mysql01 是主机, ssh 是协议 22 端口
- 第四列:箭头 >,表示数据流向
- 第五列:接收方的 ip 地址+端口号,其中 192.168.170.1 是 ip,而 62763 是端口号
- 第六列:数据包内容,包括 Flags 标识符,seq 号,ack 号,win 窗口,数据长度 length,其中 [P.] 表示 PUSH 标志位为 1,更多标识符大家需要了解 TCP 协议的标志位。
三、讲解 TCP 协议报文报头
TCP(Transmission Control Protocol)传输控制协议,顾名思义,就是要对数据的传输进行一定的控制。
四、tcpdump 抓包工具常规过滤规则
4.1 tcpdump 的 host 和 net 过滤规则
基于 IP 地址进行过滤:host
案例 1:截获特定主机 192.168.170.134 的主机收到的和发出的所有的数据包
tcpdump host 192.168.170.134
解释:host 192.168.170.134,指明 192.168.170.134 是一台主机,如果你非常明确关心的是哪个主机的收发报文,那么就可以直接过滤这个主机的数据包。host 后面加主机的 IP 地址,就可以只抓取这个主机的所有数据包,其他主机的数据包就会被过滤掉。
案例 2:获取目的地址是 192.168.170.134 的报文
tcpdump dst 192.168.170.134
解释:dst 指的是目的地址;这个是确定传输方向的关键字,src 源;dst 目的。
基于网段进行过滤:net
案例 3:截获特定网段 192.168.170.0/24 的主机收到的和发出的所有的数据包
tcpdump net 192.168.170.0/24
解释:net 192.168.170.0/24,指明 192.168.170.0/24 网段,可以直接过滤这个网段的数据包网段同样可以再细分为源网段和目标网段。
$ tcpdump src net 192.168
$ tcpdump dst net 192.168
4.2 tcpdump 基于端口的过滤规则
基于端口进行过滤:port
案例 4:获取特定端口 比如 http 的包,使用如下命令:
tcpdump tcp port 80
解释:port 80 指明端口 80,只会抓取这个 80 端口的数据包;加上具体某个协议的某个端口,就可以更加精确的捕获对应的业务的数据报文了。如下图,就会只抓取 TCP 协议的 80 端口的数据报,也就是 http 协议的数据报文。 (tcpdump src port 80 / tcpdump dst port 80)
如果你想要同时指定两个端口你可以这样写:tcpdump port 80 or port 22、tcpdump port 80 or 22;
如果你的想抓取的不再是一两个端口,而是一个范围,一个一个指定就非常麻烦了,此时你可以这样指定一个端口段。
- tcpdump portrange 8000-8080
- tcpdump src portrange 8000-8080
- tcpdump dst portrange 8000-8080
对于一些常见协议的默认端口,我们还可以直接使用协议名,而不用具体的端口号:比如http==80,https==443 等:tcpdump tcp port http
4.3 tcpdump 基于协议过滤的规则
基于协议进行过滤:protocal
案例 5:获取 ICMP 协议的报文
tcpdump icmp
解释:标明要抓取的协议报文,一般常用的比如 ip、ip6、arp、icmp、tcp、udp 等。
注意:http、dns、https、ssh 等这些应用层的协议,不能直接这样写,需要写成:tcpdump port http 或者 tcpdump port 53(DNS)
下一篇文章:tcpdump 抓包工具详细图文教程(下)_Stars.Sky的博客-CSDN博客