目录
简介
Tcpdump是类 Unix 系统的王牌抓包工具,名字由「TCP 协议」和「数据导出」组合而来。它基于 libpcap 库实时捕获网络数据包,支持:
- 嗅探并保存流量数据
- 按协议 / 端口 / IP 精准过滤
- 生成 pcap 文件供后续分析
tcpdump 是一个单独 yum 包,可以直接通过yum install -y tcpdump
安装
shell
$ rpm -qa| grep tcpdump
tcpdump-4.99.1-1.oe1.x86_64
命令解析

选项 | 描述 |
---|---|
-a | 将网络地址和广播地址转变成名字 |
-A | 以ASCII码格式打印出所有数据包,并将链路层的头部最小化 |
-B | 用于设置操作系统捕捉缓冲大小 |
-c | 指定抓取数据包的数量 |
-C | 此选项用于配合-w选项使用,如果保存文件大小超过阈值则关闭当前文件,并启用新文件继续保存数据(分多个固定大小的文件保存抓包数据,利于长期抓包的场景) |
-d | 将匹配到的数据包以人们能够理解的汇编格式输出 |
-dd | 以C语言的形式打印出包匹配码 |
-ddd | 以十进制数的形式打印出包匹配码 |
-D | 打印系统中所有支持抓包的网络接口 |
-e | 在输出行打印出数据链路层的头部信息 |
-E | 解密IPsec ESP分组。具体来说,它使用spi@ipaddr algo:secret的格式来解密那些以addr作为地址,并且包含了安全参数索引值spi的IPsec ESP分组。这样,tcpdump可以捕获并显示经过IPsec加密的数据包内容,帮助用户更好地分析和理解网络流量 |
-f | 将外部的因特网地址以数字的形式打印出来 |
-F | 使用file文件作为过滤条件表达式的输入 |
-i | 指定监听网络接口 |
-l | 对标准输出进行行缓冲 |
-L | 列出指定网络接口所支持的数据链路层的类型后退出 |
-m | 通过module 指定的file 装载SMI MIB 模块 |
-n | 不把网络地址转换成名称,即直接显示IP地址而不是主机名 |
-N | 不打印出host 的域名部分 |
-nn | 不进行端口名称的转换 |
-O | 不启用进行包匹配时所用的优化代码 |
-p | 不让网络接口进入混杂模式 |
-q | 快速简短打印输出 |
-R | 设定tcpdump 对 ESP/AH 数据包的解析按照 RFC1825而不是RFC1829 |
-r | 从文件file 中读取包数据 |
-s | 数据包抓取长度,如果不设置默认将会是68字节 |
-S | 打印TCP 数据包的顺序号时, 使用绝对的顺序号, 而不是相对的顺序号 |
-t | 在每行输出中不打印时间戳 |
-tt | 不对每行输出的时间进行格式处理 |
-ttt | tcpdump 输出时, 每两行打印之间会延迟一个段时间(以毫秒为单位) |
-tttt | 在每行打印的时间戳之前添加日期的打印 |
-u | 打印出未加密的NFS句柄 |
-U | 使得当tcpdump在使用-w 选项时, 其文件写入与包的保存同步 |
-v | 分析和打印产生详细的输出 |
-vv | 产生比-v更详细的输出 |
-vvv | 产生比-vv更详细的输出 |
-w | 把包数据直接写入文件而不进行分析和打印输出 |
-W | 设置输出文件的最大数目 |
-x | 以十六进制的形式打印每个数据包的头部数据,但是不包括数据链路层的头部 |
-xx | 以十六进制的形式打印每个数据包的头部数据,并且包括数据链路层的头部 |
-X | 以ASCII码格式显示输出,但是不包括数据链路层的头部 |
-XX | 以ASCII码格式显示输出,并且包括数据链路层的头部 |
-y | 只捕获数据链路层协议类型是datalinktype的数据包 |
实际使用
- 默认启动------监听系统上第一个网络接口的所有流过数据包,结果会在前台直接打印出来
shell
tcpdump

- 抓取指定网卡的流量,同样会在前台打印出来
shell
tcpdump -i <NIC-Name>
# e.g.: tcpdump -i ensf160p0
- 抓取指定网卡的流量,并保存到pcap 文件中
shell
# 保存
tcpdump -i lo -w lo.pcap
# 这个文件是binary file,读取
tcpdump -r lo.pcap
- 抓取包含指定 mac 的数据包
shell
# 包含 mac
tcpdump -i lo -w lo.pcap ether host aa:bb:cc:dd:ee:ff
# 包含 源mac
tcpdump -i lo -w lo.pcap ether src aa:bb:cc:dd:ee:ff
# 包含 目的mac
tcpdump -i lo -w lo.pcap ether dst aa:bb:cc:dd:ee:ff
- 抓取包含指定 IP 的数据包
shell
# 包含 ip
tcpdump -i eth0 host 192.168.1.2 -w eth0_192.168.1.2.pcap
# 或者
tcpdump -i eth0 -nn 'host 192.168.1.2'
# 包含源ip
tcpdump -i eth0 src host 192.168.1.2
# 或者
tcpdump -i eth0 -nn 'src host 192.168.1.2'
# 包含目的ip
tcpdump -i eth0 dst host 192.168.1.2
# 或者
tcpdump -i eth0 -nn 'dst host 192.168.1.2'
# 匹配源目 ip
tcpdump -i eth0 'src host 192.168.1.2 and dst host 192.168.1.3'
- 包含指定端口
shell
# 某个端口
tcpdump -i lo -nnA 'port 80 and src host 192.168.1.2'
# 除非某个端口
tcpdump -i lo -nnA '!port 22'