tcpdump命令详解

Published on with 0 views and 0 comments

tcpdump 是 Linux/Unix 系统中一款强大的命令行网络抓包工具,可实时捕获网络接口上的数据包并解析,常用于网络故障排查、协议分析、流量监控等场景。以下从基本语法、核心选项、过滤规则、高级用法及实用案例等方面详细讲解。

一、基本语法

tcpdump 的核心语法结构为:

tcpdump [选项] [过滤表达式]
  • 选项:控制抓包的行为(如指定接口、输出格式、保存文件等)。
  • 过滤表达式:筛选需要捕获的数据包(如指定主机、端口、协议等)。

二、核心选项详解

选项用于调整抓包的范围和输出方式,常用选项如下:

选项作用示例
-i <接口>指定抓包的网络接口(如 eth0、lo);-i any表示所有接口tcpdump -i eth0(抓 eth0 接口的包)
-n不进行 DNS 解析(直接显示 IP,不转主机名)tcpdump -n(输出 IP 而非域名)
-nn不解析 IP 和端口(端口显示数字,不转服务名如 80 不显示 http)tcpdump -nn(IP 和端口均为数字)
-v/-vv/-vvv增加输出详细程度(v:基本详情;vv:更多协议细节;vvv:最详细)tcpdump -vv(显示较详细的包信息)
-c <数量>只捕获指定数量的数据包后退出tcpdump -c 10(抓 10 个包后停止)
-w <文件>将捕获的原始数据包保存到文件(不解析,需用-r读取)tcpdump -w traffic.pcap(保存到 traffic.pcap)
-r <文件>从保存的文件中读取数据包(用于离线分析)tcpdump -r traffic.pcap(读取 pcap 文件)
-s <长度>设置抓包的 “快照长度”(默认 65535 字节,足够捕获完整包)tcpdump -s 0(捕获完整包,0 等价于 65535)
-A以 ASCII 码显示数据包内容(适合查看 HTTP 等文本协议)tcpdump -A(直观查看数据包的文本内容)
-X同时以十六进制和 ASCII 码显示数据包内容(兼顾二进制和文本)tcpdump -X(十六进制 + ASCII 混合显示)
-e显示数据链路层信息(如 MAC 地址、VLAN 标签)tcpdump -e(输出包含源 / 目的 MAC)
-t不显示时间戳tcpdump -t(去掉输出中的时间)
-tttt显示完整时间戳(格式:年 - 月 - 日 时:分: 秒。微秒)tcpdump -tttt(精确到微秒的时间)

三、过滤表达式(核心功能)

过滤表达式是 tcpdump 的灵魂,用于精准筛选目标数据包。表达式由 “类型 + 方向 + 协议” 组合而成,支持逻辑运算(and/or/not)。

1. 按 “类型” 过滤(指定目标对象)

类型用于限定数据包的来源 / 目标是 “主机”“网段” 还是 “端口”。

类型含义示例
host <IP/主机名>匹配指定主机的数据包(源或目的为该主机)tcpdump host 192.168.1.100(抓与 192.168.1.100 相关的包)
net <网段>匹配指定网段的数据包(如 192.168.1.0/24)tcpdump net 192.168.1.0/24(抓 192.168.1.x 网段的包)
port <端口>匹配指定端口的数据包(源或目的端口)tcpdump port 80(抓 80 端口的包)
portrange <端口范围>匹配端口范围(如 1-100)tcpdump portrange 1-100(抓 1 到 100 端口的包)

2. 按 “方向” 过滤(指定数据流向)

方向用于限定数据包是 “发送” 还是 “接收”。

方向含义示例
src <对象>源为指定对象(主机 / 端口 / 网段)tcpdump src 192.168.1.100(抓源 IP 是 192.168.1.100 的包)
dst <对象>目的为指定对象tcpdump dst port 443(抓目的端口是 443 的包)
src or dst <对象>源或目的为指定对象(默认行为,可省略)tcpdump src or dst host 10.0.0.1

3. 按 “协议” 过滤

直接指定协议类型,仅捕获该协议的数据包。

协议含义示例
tcp传输控制协议(如 HTTP/HTTPS)tcpdump tcp(只抓 TCP 包)
udp用户数据报协议(如 DNS)tcpdump udp(只抓 UDP 包)
icmp互联网控制消息协议(如 ping)tcpdump icmp(只抓 ICMP 包)
arp地址解析协议(IP 与 MAC 映射)tcpdump arp(抓 ARP 请求 / 应答包)
ip/ip6IPv4/IPv6 协议tcpdump ip6(只抓 IPv6 包)

4. 逻辑运算(组合条件)

支持and(且)、or(或)、not(非)组合多个条件,复杂条件可用括号()包裹(需转义\(`和`\))。

运算示例含义
andtcpdump host 192.168.1.100 and port 80抓与 192.168.1.100 相关且端口为 80 的包
ortcpdump port 80 or port 443抓 80 端口或 443 端口的包
nottcpdump not host 192.168.1.1抓排除 192.168.1.1 的所有包
组合tcpdump src 10.0.0.2 and\(port 80 or port 443\)抓源为 10.0.0.2 且端口是 80 或 443 的包

四、高级过滤规则(协议细节)

针对特定协议的细节(如 TCP 标志位、数据包长度)过滤,适合深度分析。

规则含义示例
tcp flags <标志>匹配 TCP 标志位(SYN/RST/ACK 等)tcpdump tcp flags syn(抓 TCP SYN 包,用于检测连接请求)
tcp [flags] & <掩码> != 0更灵活的 TCP 标志匹配(如 SYN+ACK)tcpdump 'tcp [13] & 0x12 != 0'(抓 SYN 或 ACK 包,0x12 对应 SYN (0x02)+ACK (0x10))
len <长度>匹配数据包长度(小于 / 大于 / 等于)tcpdump len > 100(抓长度大于 100 字节的包)
icmp[icmptype] = <类型>匹配 ICMP 类型(如 echo-request 是 ping 请求,echo-reply 是应答)tcpdump 'icmp[icmptype] = icmp-echo'(抓 ping 请求包)
vlan抓指定 VLAN ID 的包(需配合-e显示 VLAN 标签)tcpdump vlan 100(抓 VLAN 100 的包)

五、输出格式解读

tcpdump 的输出格式包含多个字段,以典型 TCP 包为例:

20:30:15.123456 IP 192.168.1.100.54321 > 203.0.113.5.80: Flags [P.], seq 12345:12390, ack 54321, win 65535, length 45

各字段含义:

  • 20:30:15.123456:时间戳(默认精确到微秒);
  • IP:网络层协议(此处为 IPv4);
  • 192.168.1.100.54321:源地址:源端口;
  • 203.0.113.5.80:目的地址:目的端口;
  • Flags [P.]:TCP 标志位(P表示 Push,.表示 ACK);
  • seq 12345:12390:TCP 序列号范围(该包数据从 12345 到 12390,长度 45 字节);
  • ack 54321:确认号(期望接收对方的下一个序列号);
  • win 65535:接收窗口大小(流量控制用);
  • length 45:数据包数据部分长度(字节)。

六、实用案例

结合上述知识,以下是常见场景的实战命令:

1. 监控特定端口的 HTTP 流量(80 端口)

tcpdump -i eth0 -nn -A 'port 80'
  • -A:以 ASCII 显示内容,可直接看到 HTTP 请求头 / 响应体;
  • 适合快速查看网页访问的 URL、参数等。

2. 捕获 ping(ICMP)交互

tcpdump -i any -tttt -vv 'icmp[icmptype] = icmp-echo or icmp[icmptype] = icmp-echoreply'
  • 抓取 ping 请求(icmp-echo)和应答(icmp-echoreply),-tttt显示完整时间,便于分析延迟。

3. 分析 TCP 三次握手 / 四次挥手

tcpdump -i eth0 -nn 'tcp port 80 and (tcp flags syn or tcp flags fin or tcp flags rst)'
  • 捕获 TCP 连接建立(SYN)、关闭(FIN)、重置(RST)的标志位包,用于分析连接异常(如频繁 RST 可能是服务崩溃)。

4. 保存抓包文件供后续分析(如用 Wireshark)

tcpdump -i eth0 -w traffic.pcap 'host 192.168.1.100'  # 保存到文件tcpdump -r traffic.pcap  # 读取文件分析
  • 大流量场景下,先保存到.pcap文件,再用 Wireshark 图形化分析更高效。

5. 排除 DNS 流量(减少干扰)

tcpdump -i any -nn 'not port 53'
  • DNS 默认端口是 53(UDP/TCP),排除后可聚焦业务流量。

七、注意事项

  1. 权限:tcpdump 需要 root 权限(或CAP_NET_RAW能力),普通用户执行会报错;
  2. 性能:无过滤条件时会捕获所有包,可能占用大量 CPU / 磁盘 IO,建议用过滤表达式缩小范围;
  3. 快照长度:默认-s 65535可捕获完整包,若只需分析头部,可减小(如-s 128)提升效率;
  4. 输出干扰:实时抓包时输出会刷屏,可结合tee保存到文件同时查看:tcpdump ... | tee capture.log。

通过上述内容,可掌握 tcpdump 的核心用法,结合实际场景灵活组合选项和过滤规则,即可高效完成网络分析任务。


标题:tcpdump命令详解
作者:Tomiaocat
地址:https://books.loen.top/articles/2025/07/23/1753239632461.html