tcpdump 指令可列出经过指定网络界面的数据包文件头,可以将网络中传送的数据包的 “头” 完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供 and、or、not 等逻辑语句来帮助你摘取有用信息。
由于它需要将网络接口设置为混杂模式,普通用户不能正常执行,但具备 root 权限的用户可以直接执行它来获取网络上的信息
一、命令选项
1.1、tcpdump 表达式
tcpdump [选项] [协议] [数据流方向] [范围]
-a 将网络地址和广播地址转变成名字
-A 以 ASCII 格式打印出所有分组,并将链路层的头最小化
-b 数据链路层上选择协议,包括 ip/arp/rarp/ipx 都在这一层
-c 指定收取数据包的次数,即在收到指定数量的数据包后退出 tcpdump
-d 将匹配信息包的代码以人们能够理解的汇编格式输出
-dd 将匹配信息包的代码以 c 语言程序段的格式输出
-ddd 将匹配信息包的代码以十进制的形式输出
-D 打印系统中所有可以监控的网络接口
-e 在输出行打印出数据链路层的头部信息
-f 将外部的 Internet 地址以数字的形式打印出来,即不显示主机名
-F 从指定的文件中读取表达式,忽略其他的表达式
-i 指定监听网络接口
-l 使标准输出变为缓冲形式,可以数据导出到文件
-L 列出网络接口已知的数据链路
-n 不把网络地址转换为名字
-N 不输出主机名中的域名部分,例如 www.baidu.com 只输出 www
-nn 不进行端口名称的转换
-P 不将网络接口设置为混杂模式
-q 快速输出,即只输出较少的协议信息
-r 从指定的文件中读取数据,一般是 - w 保存的文件
-w 将捕获到的信息保存到文件中,且不分析和打印在屏幕
-s 从每个组中读取在开始的 snaplen 个字节,而不是默认的 68 个字节
-S 将 tcp 的序列号以绝对值形式输出,而不是相对值
-T 将监听到的包直接解析为指定的类型的报文,常见的类型有 rpc(远程过程调用)和 snmp(简单网络管理协议)
-t 在输出的每一行不打印时间戳
-tt 在每一行中输出非格式化的时间戳
-ttt 输出本行和前面以后之间的时间差
-tttt 在每一行中输出 data 处理的默认格式的时间戳
-u 输出未解码的 NFS 句柄
-v 输出稍微详细的信息,例如在 ip 包中可以包括 ttl 和服务类型的信息
-vv 输出相信的保报文信息
1.2、tcpdump关键字
1.2.1、 host、port、net
host 192.168.100.1 表示一台主机,net 192.168.100.0 表示一个网络网段,port 80 指明端口号为 80,在这里如果没有指明数据类型,那么默认就是 host
1.2.2、数据传输方向 src、dst、dst or src、dst and src
src、dst、dst or src、dst and src,这些关键字指明了传输的方向,比如 src 192.168.100.1 说明数据包源地址是 192.168.100.1。dst net 192.168.100.0 指明目的网络地址是 192.168.100.0,默认是监控主机对主机的 src 和 dst,即默认监听本机和目标主机的所有数据
1.2.3、协议关键字
包括 ip、arp、rarp、udp
1.2.4、其他关键字
运算类型:or、and、not、!
辅助功能型:gateway、less、broadcast、greater
1.3、常用的过滤条件
tcpdump 可以支持逻辑运算符
and: 与运算,所有的条件都需要满足,可用 “and”和 “&&” 表示
or:或运行,只要有一个条件满足就可以,可用 “or” 和“|”表示
not:取反,即取反条件,可以用 “not” 和“!”表示
二、使用实例
2.1、全部监听
默认监听在第一块网卡,监听所有经过此网卡的数据包
sudo tcpdump
2.2、监听指定网卡
监听指定网卡 ens33 的所有传输数据包
sudo tcpdump -i ens33
2.3、监听特定主机的指定网卡
2.3.1、示例一
sudo tcpdump -i ens33 host 192.168.159.128
捕获主机 192.168.159.128 经过网卡 ens33 的所有数据包(也可以是主机名,但要求可以解析出 IP 地址)
第一列:报文的时间
第二列:网络协议 IP
第三列:发送方的 ip 地址、端口号、域名。
第四列:箭头 >, 表示数据流向
第五列:接收方的 ip 地址、端口号、域名,
第六列:冒号
第七列:数据包内容,报文头的摘要信息,有 ttl、报文类型、标识值、序列、包的大小等信息
2.3.2、示例二
sudo tcpdump -i ens33 dst host 192.168.159.128
捕获所有发送到主机 192.168.159.128 的数据包
2.3.3、示例三
监听主机 192.168.159.1 和 192.168.159.128 之间 ip 协议的 80 端口的的所有数据包:
sudo tcpdump dst 192.168.159.1 and 192.168.159.128 and port 80
2.4、监听特定协议的包
2.4.1、监听ARP包
sudo tcpdump arp
2.4.2、监听TCP包
sudo tcpdump tcp port 64386