Linux命令:tcpdump - 网络分析
tcpdump
是一个功能强大的命令行网络协议分析器。
主要功能:
- 数据包捕获(抓包)
- 数据包过滤
- 数据分析
- 网络故障排除和诊断
常用选项
-i
:指定要监听的网络接口-D
:列出可用于抓包的接口-s
:设置抓取的数据包长度,超过这个长度的部分会被截断-c
:指定要抓取的数据包的数量-w
:将抓包数据保存在文件中,通常是.pcap
格式-r
:从指定的文件中读取并显示数据包-C
:指定文件大小,与-w
配合使用-F
:从文件中读取抓包的表达式-n
:不进行DNS解析,直接显示IP地址而非主机名-nn
:除了不解析主机名外,也不解析端口名称,直接显示端口号。-p
:不让内核修改网络接口的状态(例如改变混杂模式或监控模式),以防止影响正常网络流量。-P
:指定要抓取的包是流入还是流出的包,可以指定的值in
、out
、inout
-e
:输出信息中包含数据链路层头部信息-t
:显示时间戳,tttt
显示更详细的时间-X
:显示十六进制格式-B
:设置内核缓冲区大小-tt
:在打印时间戳时,以绝对时间而非相对时间显示。-v
或-vv
或-vvv
:详细程度递增,提供更详尽的数据包信息。
基本用法
- 安装tcpdump命令
yum install tcpdump -y
- 抓取eth0网卡上的所有数据包 -i
tcpdump -i eth0
- 抓包时不解析主机和端口名 -n
tcpdump -n -i eth0
- 抓取指定主机的所有数据表 host
tcpdump -ni eth0 host 192.168.1.112
- 抓取指定主机发送的数据包 src host
tcpdump -ni eth0 src host 192.168.1.112
- 抓取发送给192.168.1.112 dst src
tcpdump -ni eth0 dst host 192.168.1.112
- 抓取指定数量的包 -c
tcpdump -i eth0 -c 10
- 指定端口 dst port
tcpdump -ni eth0 dst port 22
- 抓取arp数据包
tcpdump -ni eth0 arp
- 使用十六进制输出
tcpdump -ni eth0 -c 1 arp -x
- 只抓取IPv6流量
tcpdump -ni eth0 ip6
- 抓取指定网段的流量 net
tcpdump -ni eth0 net 192.168.1.0/24
- 抓取指定端口范围的流量 portrange
tcpdump -ni eth0 portrange 80-9000
进阶用法
- 抓取指定客户端访问ssh的数据包
tcpdump -ni eth0 src 192.168.1.112 dst port 22
- 抓取从某个网段来,到某个网段去的流量
tcpdump -ni eth0 src net 192.168.1.0/16 and dst net 10.0.0.0/8 or 172.16.0.0/16
- 抓取来自某个主机,发往非ssh端口的流量
tcpdump -ni eth0 src 192.168.1.112 and not dst port 22
- 基于包大小进行删选
# 大小小于64字节
tcpdump -ni eth0 less 64
# 大小等于64字节
tcpdump -ni eth0 length == 64
# 大小大于64字节
tcpdump -ni eth0 greater 64
- 过滤TCP特殊标记的数据包
# 抓取某主机发送的RST数据包
tcpdump -ni eth0 src host 192.168.1.112 and 'tcp[tcpflags] & (tcp-rst) != 0'
# 抓取某主机发送的SYN数据包
tcpdump -ni eth0 src host 192.168.1.112 and 'tcp[tcpflags] & (tcp-syn) != 0'
# 抓取某主机发送的FIN数据包
tcpdump -ni eth0 src host 192.168.1.112 and 'tcp[tcpflags] & (tcp-fin) != 0'
# 抓取 TCP 连接中的 SYN 或 FIN 包
tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0'
- 抓取所有非ping类型的ICMP包
tcpdump 'icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply'
Linux命令系列: