【Linux】抓包工具-tcpdump_linux抓包工具
tcpdump 的全面技术详解,涵盖核心功能、高级用法及实战场景,帮助您从基础到精通掌握这一网络诊断工具。
一、tcpdump 基础
1. 工具定位
- 核心作用:命令行网络抓包工具,基于 libpcap 库实现,支持 BPF(Berkeley Packet Filter) 语法过滤。
- 适用场景:
- 网络故障排查(连接超时、丢包、协议异常)
- 安全分析(恶意流量检测、数据泄露追踪)
- 协议逆向工程(解析自定义协议格式)
- 性能调优(流量统计、延迟分析)
2. 安装与权限
- 安装命令:
# Ubuntu/Debiansudo apt-get install tcpdump# CentOS/RHELsudo yum install tcpdump# macOS (通过Homebrew)brew install tcpdump
- 权限要求:
- 需
root
或CAP_NET_RAW
权限(推荐使用sudo
) - 普通用户可访问
/dev/bpf*
设备(部分系统需配置)
- 需
二、核心命令行选项
1. 接口与输出控制
-i eth0
any
表示所有接口)-D
-n
/ -nn
-nn
同时禁用端口服务名转换)-q
-v
, -vv
, -vvv
2. 捕获与存储
-c 100
-s 1500
-s0
表示捕获完整数据包)-w output.pcap
-r input.pcap
-G 3600
-w
使用,文件名需含 %Y%m%d%H%M%S
格式)-C 100
3. 数据展示格式
-A
-X
-e
-l
三、过滤表达式详解
1. BPF 语法结构
[协议] [方向] [类型] [值] [逻辑操作] ...
- 协议:
tcp
,udp
,icmp
,arp
,ip6
,ether
,wlan
等 - 方向:
src
,dst
,src or dst
,src and dst
- 类型:
host
,net
,port
,portrange
,proto
,gateway
- 逻辑操作:
and
(&&),or
(||),not
(!)
2. 常用过滤规则
- IP 过滤:
host 192.168.1.1 # 指定主机net 10.0.0.0/24 # 指定网段src 172.16.0.5 and dst 8.8.8.8 # 源与目标组合
- 端口过滤:
port 80 # 单一端口dst port 53 # 目标端口portrange 8000-8080 # 端口范围not port 22 # 排除 SSH
- 协议组合:
tcp and port 443 # HTTPS 流量icmp or arp # ICMP 或 ARPudp and not port 53 # 非 DNS 的 UDP
3. 高级过滤技巧
- 按包内容过滤:
# 匹配 HTTP GET 请求(0x47455420 是 \"GET \" 的十六进制)tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420
- 按 TCP 标志位过滤:
\'tcp[tcpflags] & (tcp-syn|tcp-ack) != 0\' # SYN 或 ACK 包\'tcp[13] & 2 != 0\' # SYN 包(第13字节第2位)
- 按包长度过滤:
greater 1024 # 长度 > 1024 字节less 64 # 长度 < 64 字节
四、实战场景示例
1. 基础抓包
# 捕获 eth0 接口的 HTTP 流量(显示ASCII内容)sudo tcpdump -i eth0 -A -s0 port 80# 捕获所有 ICMP 包(Ping 测试)sudo tcpdump -n icmp
2. 高级分析
# 捕获 DNS 查询和响应(UDP 53端口)sudo tcpdump -n -i any udp port 53# 捕获 TCP 三次握手(SYN包)sudo tcpdump \'tcp[tcpflags] & tcp-syn != 0 and not src net 192.168.1.0/24\'# 捕获 HTTP POST 请求(匹配 \"POST\" 字符串)sudo tcpdump -s0 -A \'tcp port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504F5354\'
3. 文件操作
# 保存加密流量供后续分析sudo tcpdump -w ssl_traffic.pcap -s0 port 443# 读取文件并过滤 SSH 连接tcpdump -r ssl_traffic.pcap \'tcp port 22\'
五、输出解读与协议分析
1. 典型输出结构
15:30:45.123456 IP 192.168.1.10.54892 > 172.217.14.206.443: Flags [S], seq 123456789, win 64240, options [mss 1460], length 0
- 字段分解:
15:30:45.123456
:时间戳(微秒精度)IP
:协议类型(IPv4)192.168.1.10.54892
:源IP + 端口>
:方向分隔符172.217.14.206.443
:目标IP + 端口Flags [S]
:TCP标志(SYN)seq 123456789
:序列号win 64240
:窗口大小length 0
:数据长度
2. 关键协议特征
- TCP:
- 标志位:
[S]
(SYN),[.]
(ACK),[F]
(FIN),[P]
(PSH),[R]
(RST) - 重传检测:重复序列号 +
[S]
或[.]
标志
- 标志位:
- HTTP:
- ASCII 可见的
GET / POST / HTTP/1.1
等请求头
- ASCII 可见的
- DNS:
- UDP 53端口,包含
A?
(查询)或A
(响应)标识
- UDP 53端口,包含
六、高级技巧与性能优化
1. 多条件组合过滤
# 捕获来自特定子网的 HTTPS 流量(排除本地端口)sudo tcpdump -i eth0 \'tcp port 443 and src net 10.0.0.0/24 and not dst port 8080\'
2. 流量统计与采样
# 每 60 秒统计一次 HTTP 请求量sudo tcpdump -G 60 -W 1 -w http_%H%M%S.pcap \'tcp port 80\'
3. 性能调优参数
# 增加缓冲区大小(减少丢包)sudo tcpdump -B 4096 -i eth0# 限制捕获包长度(提升性能)sudo tcpdump -s 512 -i eth0
七、安全与注意事项
1. 敏感信息防护
- 避免捕获明文协议(如 HTTP、FTP)
- 使用
-w
保存后加密处理文件:gpg -c traffic.pcap # 使用 GPG 加密
2. 资源管理
- 限制文件大小:
-C 100
(每文件 100MB) - 定期清理旧文件:结合
-G
和find
命令
3. 法律合规
- 企业内网需遵守数据隐私政策
- 公网抓包可能违反当地法律法规
八、扩展工具链整合
1. 与 Wireshark 协同
- 保存为 PCAP 文件:
tcpdump -w file.pcap
- 使用 Wireshark 图形化分析:过滤、统计、协议解析
2. 使用 tshark 增强分析
# 实时统计 HTTP 状态码tcpdump -i eth0 -w - | tshark -r - -Y \"http\" -T fields -e http.response.code | sort | uniq -c
3. 结合 awk/grep 处理输出
# 提取所有访问的域名(DNS查询)tcpdump -n -l port 53 | awk \'/A\\?/{print $NF}\'