【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 eth0any 表示所有接口)-D-n / -nn-nn 同时禁用端口服务名转换)-q-v, -vv, -vvv2. 捕获与存储
-c 100-s 1500-s0 表示捕获完整数据包)-w output.pcap-r input.pcap-G 3600-w 使用,文件名需含 %Y%m%d%H%M%S 格式)-C 1003. 数据展示格式
-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}\'


