linux 抓包工具tcpdump使用小记(使用时注意权限和系统资源)

tcpdump 是一款强大的网络数据包捕获和分析工具,常用于网络故障排查、协议分析、安全审计等场景。以下是其核心功能、使用方法及常见场景的详细介绍:

1. 基本功能

  • 数据包捕获:监听网络接口,实时捕获传输的数据包。

  • 过滤规则:基于协议、IP 地址、端口号等条件精确筛选数据包。

  • 输出格式:支持多种输出格式(ASCII、十六进制),可保存到文件。

  • 协议支持 :几乎支持所有网络协议(TCP、UDP、ICMP、HTTP 等)

    2. 常用命令参数

    bash

    复制代码
    tcpdump [选项] [过滤表达式]
    选项 功能 示例
    -i <接口> 指定监听的网络接口(如 eth0, wlan0),-i any 表示所有接口。 tcpdump -i eth0:监听以太网接口 eth0 的数据包; tcpdump -i any:监听所有网络接口的数据包。
    -n 不解析 IP 地址和端口号的域名,直接显示数字(提升性能)。 tcpdump -n:在输出中,IP 地址和端口号以数字形式显示,例如 192.168.1.1:80 而非 example.com:http
    -nn 同时不解析域名和端口名(如 80 而非 http)。 tcpdump -nn:输出中不仅 IP 地址以数字显示,端口也以数字形式呈现,如 tcp dst port 80 显示为具体数字 80,而不是 http
    -s <字节数> 设置捕获数据包的最大长度,-s 0 表示捕获完整数据包。 tcpdump -s 68:每个数据包最多捕获 68 字节;tcpdump -s 0:尝试捕获每个数据包的全部内容。
    -c <数量> 捕获指定数量的数据包后停止。 tcpdump -c 10:捕获 10 个数据包后,tcpdump 工具停止运行。
    -w <文件名> 将数据包保存到文件(.pcap 格式)。 tcpdump -w capture.pcap:将捕获的数据包保存到名为 capture.pcap 的文件中,后续可使用 tcpdump -r 或其他工具(如 Wireshark)进行分析。
    -r <文件名> 从文件中读取数据包进行分析。 tcpdump -r saved_traffic.pcap:读取名为 saved_traffic.pcap 的文件,并对其中的数据包进行分析和显示。
    -X 以 ASCII 和十六进制形式显示数据包内容(适合分析协议细节)。 tcpdump -X:在输出中,除了显示数据包的协议信息外,还会展示数据包的 ASCII 和十六进制内容,帮助分析协议数据,如 HTTP 头部信息等。
    -vvv 显示详细的协议信息(如 TCP 标志位、TTL 值)。 tcpdump -vvv:输出中会包含更详细的协议信息,如 TCP 连接的标志位(SYN、ACK、FIN 等)、IP 数据包的生存时间(TTL)值等,便于深入分析网络连接状态。

    |-------------------|-----|----------|--------------------|-----------------------------------------------------------------------------------------------------------------------------------|
    | `--direction={in | out | inout}` | 只捕获入站、出站或所有方向的数据包。 | tcpdump --direction=in:仅捕获进入指定网络接口的数据包;tcpdump --direction=out:仅捕获从指定网络接口发出的数据包;tcpdump --direction=inout:捕获进出指定网络接口的所有数据包。 |

3. 过滤表达式

过滤表达式用于精确筛选感兴趣的数据包,支持三种类型的限定词:

(1) 类型限定词
类型 示例 说明
host host 192.168.1.1 过滤指定主机的数据包。
net net 192.168.1.0/24 过滤指定网络段的数据包。
port port 80 过滤指定端口的数据包。
portrange portrange 8000-8100 过滤指定端口范围的数据包。
(2) 方向限定词
方向 示例 说明
src src 192.168.1.1 过滤源地址为指定值的数据包。
dst dst port 443 过滤目标端口为指定值的数据包。
(3) 协议限定词
协议 示例 说明
tcp tcp and port 80 过滤 TCP 协议且端口为 80 的数据包。
udp udp src port 53 过滤 UDP 协议且源端口为 53 的数据包。
icmp icmp 过滤 ICMP 协议的数据包(如 ping 请求)。

4. 常见使用场景

(1) 监控特定主机的 HTTP 流量

bash

复制代码
  tcpdump -i eth0 -nn -s 0 'host 192.168.1.100 and (port 80 or port 443)'
  • 说明 :监听eth0接口,捕获与192.168.1.100主机的 HTTP/HTTPS 通信。
(2) 捕获 DNS 查询请求

bash

复制代码
  tcpdump -i any -nn -s 0 'udp port 53'
  • 说明:捕获所有接口上的 UDP 53 端口(DNS)流量。
(3) 保存数据包到文件

bash

复制代码
  tcpdump -i wlan0 -w wifi_traffic.pcap
  • 说明 :将wlan0接口的所有流量保存到wifi_traffic.pcap文件。
(4) 分析 TCP 连接建立过程(三次握手)

bash

复制代码
  tcpdump -i eth0 -nn -vvv -s 0 'tcp port 80 and host 192.168.1.1'
  • 说明 :详细显示与192.168.1.1的 TCP 80 端口通信过程(SYN、SYN+ACK、ACK)。
(5) 统计特定 IP 的流量

bash

复制代码
  tcpdump -i eth0 -nn 'host 192.168.1.5' | wc -l
  • 说明 :统计与192.168.1.5通信的数据包数量。

5. 高级技巧

(1) 组合过滤条件

使用逻辑运算符组合多个条件:

bash

复制代码
  # 捕获源IP为192.168.1.1且目标端口不是22的TCP数据包
  tcpdump -i eth0 'src 192.168.1.1 and tcp and not dst port 22'
(2) 实时分析 HTTP 请求内容

bash

复制代码
  tcpdump -i eth0 -A 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
  • 说明-A 选项以 ASCII 显示数据包内容,过滤条件确保只显示包含数据的 HTTP 包。
(3) 按时间范围捕获

bash

复制代码
  # 捕获10分钟内的数据包
  tcpdump -i eth0 -w capture.pcap -G 600 -W 1
  • 说明-G 600 每 10 分钟(600 秒)生成一个新文件,-W 1 只保留最新的 1 个文件。
(4) 与 Wireshark 协同

将 tcpdump 捕获的文件用 Wireshark 打开进行可视化分析:

bash

复制代码
  # 捕获并保存到文件
  tcpdump -i eth0 -w analysis.pcap

  # 用Wireshark打开(需预先安装)
  wireshark analysis.pcap &

6. 注意事项

  • 权限要求 :需要 root 权限才能捕获网络数据包。

  • 性能影响 :长时间捕获可能占用大量磁盘空间或系统资源。

  • 若需要抓取本地进程发送的UDP包数据,可指定lo 接口(本地回环接口)tcpdump -i lo udp

  • 隐私问题:捕获的数据包可能包含敏感信息(如密码、会话 ID)。

  • 大文件处理 :对于大型 pcap 文件,可使用editcap分割或过滤:

    bash

    复制代码
    # 提取包含特定IP的数据包到新文件
    editcap -F pcap -i 'ip.addr == 192.168.1.1' input.pcap output.pcap
相关推荐
小Tomkk8 分钟前
数据库 变更和版本控制管理工具 --Bytebase 安装部署(linux 安装篇)
linux·运维·数据库·ci/cd·bytebase
赌博羊8 分钟前
ImportError: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32‘ not found
linux·运维·gnu
木卫二号Coding10 分钟前
第七十九篇-E5-2680V4+V100-32G+llama-cpp编译运行+Qwen3-Next-80B
linux·llama
getapi19 分钟前
Ubuntu 22.04 服务器的系统架构是否为 amd64 x86_64
linux·服务器·ubuntu
消失的旧时光-194336 分钟前
Linux 入门核心命令清单(工程版)
linux·运维·服务器
艾莉丝努力练剑43 分钟前
【Linux:文件】Ext系列文件系统(初阶)
大数据·linux·运维·服务器·c++·人工智能·算法
小天源1 小时前
Cacti在Debian/Ubuntu中安装及其使用
运维·ubuntu·debian·cacti
Trouvaille ~1 小时前
【Linux】TCP Socket编程实战(一):API详解与单连接Echo Server
linux·运维·服务器·网络·c++·tcp/ip·socket
芷栀夏1 小时前
深度解析 CANN 异构计算架构:基于 ACL API 的算子调用实战
运维·人工智能·开源·cann
全栈工程师修炼指南1 小时前
Nginx | stream 四层反向代理:SSL、PREREAD 阶段模块指令浅析与实践
运维·网络·网络协议·nginx·ssl