tcpdump工具可以将网络中传送的数据包完全截获下来提供分析。还支持网络层、协议、主机或端口的过滤,并提供and/or/not等逻辑语句来去掉无用的信息。通过本文可以熟悉TcpDump工具,对网络数据抓包不再难!
1、首先是在Linux系统上安装tcpdump,通过yum即可
1 | yum install tcpdump -y |
2、安装好tcpdump后,第一件事就是查看tcpdump版本
1 | tcpdump --version | tcpdump -h |
从下图可以看到不光显示了版本号,还给出了tcpdump命令的一些用法,也可以通过man查看tcpdump或者到tcpdump官方查看帮助文档,文档里还给出了一些常用命令的示例
3、tcpdump命令常用选项:
-D:列出当前系统上可以进行抓包的设备
-i:指定一个需要进行抓包的设备,如"tucdump -i eth0",每一行都是一个数据包的信息,由多个字段组成,第1个字段是时间;第2个是IP协议,IPv4显示为IP,IPv6显示为IP6;第3、4个是源地址与目标地址;第5个字段是TCP协议里的Flags;剩下几个字段就是包的详细信息以及最后length包的长度,0代表没有数据。
-n:不解析主机名,直接显示IP信息
-q:仅显示主要信息,多余字段(如TCP Flags)不做输出
-v | -vvv:和q相反,会显示更详细的信息,三个v信息最详细
-c:指定抓包个数,比如"tcpdump -c 5",只抓5个数据包,而不会持续进行抓包
-A:把包内的详细数据也显示出来,如果没加密的数据都会被抓出来,包括密码
-w:把tcpdump的抓包内容存到指定文本中,方便以后读取。如"tcpdump -i eth0 port 80 -c 10 -w tcpdump.pcap",通常情况下将tcpdump抓包文件后缀定义为pcap
-r:读取之前保存的pcap文件,读取的时候也可以加选项,如"tcpdump -r tcpdump.pcap -A"
-C file size | -W filecount | -G seconds:分别表示-w所记录的抓包数据文本的大小、文本的个数以及多少秒创建一次文本
tcpdump过滤表达式(使用表达式可以灵活的定义抓包条件,如端口,目标IP、源IP等,表达式一般写在命令的末尾):
port:后面接上指定的端口号,这样可以对指定端口的数据抓包,下图是本机用curl访问baidu后的抓包信息,可以看到本机192.168.44.129发出的请求以及收到220.181.57.217的返回数据
host ip:指定需要抓包的主机,如"host 192.168.44.129"
net range:指定IP地址的范围,如"net 192.168.44"或“192.168.44.0/24”
udp | tcp | icmp:抓取udp或者tcp或者icmp协议的数据包
src ip:源地址,只对指定源地址进行抓包
dst ip:目标地址,只对指定目标地址进行抓包
复合表达式:
and | or | not:可以将多个表达式组合一起,如:
1 | tcpdump -i eht0 -nq port 80 or port 443 |
2 | tcpdump -i eht0 -nq 'src host 192.168.44.129 and (dst port 80 or 443)' |
到此tcpdump常用选项与用法就已经介绍完毕,由于实际操作中tcpdump的可读性不高,可以结合Wireshark来更方便的对抓包数据进行分析