【Linux】抓包工具-tcpdump

tcpdump 的全面技术详解,涵盖核心功能、高级用法及实战场景,帮助您从基础到精通掌握这一网络诊断工具。


一、tcpdump 基础

1. 工具定位
  • 核心作用:命令行网络抓包工具,基于 libpcap 库实现,支持 BPF(Berkeley Packet Filter) 语法过滤。
  • 适用场景
    • 网络故障排查(连接超时、丢包、协议异常)
    • 安全分析(恶意流量检测、数据泄露追踪)
    • 协议逆向工程(解析自定义协议格式)
    • 性能调优(流量统计、延迟分析)
2. 安装与权限
  • 安装命令
    # Ubuntu/Debian
    sudo apt-get install tcpdump
    # CentOS/RHEL
    sudo yum install tcpdump
    # macOS (通过Homebrew)
    brew install tcpdump
    
  • 权限要求
    • rootCAP_NET_RAW 权限(推荐使用 sudo
    • 普通用户可访问 /dev/bpf* 设备(部分系统需配置)

二、核心命令行选项

1. 接口与输出控制
选项说明
-i eth0指定网卡(any 表示所有接口)
-D列出可用网卡列表
-n / -nn禁用 DNS 解析(-nn 同时禁用端口服务名转换)
-q简洁输出(减少协议层级显示)
-v, -vv, -vvv递增详细模式(显示 TTL、校验和等)
2. 捕获与存储
选项说明
-c 100捕获 100 个包后停止
-s 1500设置抓包长度(-s0 表示捕获完整数据包)
-w output.pcap原始数据保存为 PCAP 文件
-r input.pcap读取 PCAP 文件进行分析
-G 3600每小时轮转一个文件(配合 -w 使用,文件名需含 %Y%m%d%H%M%S 格式)
-C 100文件大小超过 100MB 后轮转
3. 数据展示格式
选项说明
-AASCII 格式输出(适合 HTTP/文本协议)
-X十六进制 + ASCII 混合输出
-e显示链路层头部(MAC 地址)
-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 或 ARP
    udp 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 等请求头
  • DNS
    • UDP 53端口,包含 A?(查询)或 A(响应)标识

六、高级技巧与性能优化

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)
  • 定期清理旧文件:结合 -Gfind 命令
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}'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晴雨日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值