抓包工具准备:Wireshark的安装与配置、tcpdump基础用法、抓包过滤器

工欲善其事,必先利其器。做网络排错,手里没几把趁手的工具,那真是寸步难行。这一章,我就带你把这套家伙事儿备齐了。

咱们主要聊三样:Wireshark、tcpdump,还有抓包过滤器。前两个是抓包工具,第三个是让工具听话的“缰绳”。

Wireshark:图形化抓包利器

Wireshark 是我用得最多的工具,没有之一。它的界面直观,功能强大,特别适合做深度分析。

安装与配置

安装其实没什么难度,但有几个坑我得提前跟你说。

  • Windows 用户:去官网下载安装包,一路 Next 就行。安装过程中会提示安装 Npcap,一定要装。Npcap 是 Wireshark 抓包的底层驱动,不装它,Wireshark 就是个空壳子。
  • macOS 用户:用 Homebrew 最省事,一条命令搞定:brew install --cask wireshark。装完后记得把当前用户加到 access_bpf 组里,否则没权限抓包。
  • Linux 用户:发行版不同命令略有差异。Debian/Ubuntu 用 sudo apt install wireshark,安装时选择“允许非 root 用户抓包”。
避坑指南:我曾经在 CentOS 7 上装 Wireshark,装完发现抓不了包。折腾了半天,最后发现是 SELinux 在作怪。如果你在 Linux 上遇到类似问题,先检查 SELinux 状态,临时关掉试试:setenforce 0。

装好之后,打开 Wireshark,你会看到一堆网络接口。选对接口是关键。我一般先看一眼 IP 地址,确认是哪个网卡在跑业务流量。

核心配置项

我个人习惯,拿到 Wireshark 先做两件事:

  1. 关闭名称解析:菜单栏 → Capture → Options,把“Enable network name resolution”的勾全去掉。为什么?因为名称解析会发 DNS 请求,不仅拖慢抓包速度,还会产生额外流量,干扰分析。
  2. 调整时间显示格式:View → Time Display Format → Seconds Since Beginning of Capture。这样看时间戳更直观,方便计算延迟。

tcpdump:命令行抓包神器

Wireshark 虽好,但有些场景它派不上用场。比如服务器没装图形界面,或者你只能通过 SSH 连上去。这时候,tcpdump 就是你的救星。

tcpdump 是 Linux 下的标配,几乎所有发行版都自带。它的核心用法其实就几个参数,我帮你总结一下:

参数 作用 示例
-i 指定网卡接口 tcpdump -i eth0
-n 不解析主机名(加速) tcpdump -n
-c 抓取指定数量的包后退出 tcpdump -c 100
-s 抓取每个包的长度(默认65535) tcpdump -s 0(抓完整包)
-w 保存到文件(pcap格式) tcpdump -w output.pcap
-r 读取pcap文件 tcpdump -r output.pcap

举个例子,我想抓 eth0 网卡上发往 192.168.1.100 的 HTTP 流量,保存到文件里,可以这么写:

tcpdump -i eth0 -n -s 0 -w http_traffic.pcap host 192.168.1.100 and port 80
小技巧:在服务器上抓包,我建议先用 -c 10 抓几个包试试,确认过滤器写对了,再正式抓。否则抓了半天,发现过滤器写错了,白忙活一场。

抓包过滤器:让工具听你的话

抓包工具就像个录音机,你不告诉它录什么,它就把所有声音都录下来。网络流量那么大,不设过滤器,你根本找不到想要的东西。

Wireshark 和 tcpdump 的过滤器语法基本一致,都是基于 BPF(Berkeley Packet Filter) 的。我把它分成两类:

1. 捕获过滤器(Capture Filter)

在开始抓包之前就设置好,只抓符合条件的包。优点是节省资源,缺点是漏掉的包就再也找不回来了。

常用写法:

  • 抓特定主机的流量:host 192.168.1.1
  • 抓特定端口的流量:port 80
  • 抓特定协议的流量:tcp、udp、icmp
  • 组合条件:host 192.168.1.1 and port 443
  • 排除某个主机:not host 192.168.1.100

2. 显示过滤器(Display Filter)

抓完包之后,在 Wireshark 里对已抓到的包进行二次筛选。优点是灵活,可以随时调整条件。

常用写法:

  • 只看 HTTP 请求:http.request
  • 只看 TCP 三次握手:tcp.flags.syn == 1
  • 只看重传包:tcp.analysis.retransmission
  • 只看特定 IP 的流量:ip.addr == 10.0.0.1
  • 只看特定端口的流量:tcp.port == 8080
重点:捕获过滤器用 and、or、not 连接条件;显示过滤器用 &&、||、!。别搞混了,否则过滤器不生效。

本章知识体系

下面这张图,帮你把本章的核心逻辑串起来:

抓包工具知识体系 抓包工具知识体系 Wireshark tcpdump 抓包过滤器 图形界面 深度分析 关闭名称解析 命令行 远程抓包 -i -n -w -r BPF语法 组合条件 捕获 vs 显示 核心原则 1. 先确认抓包接口,再开始抓包 2. 抓包前先写过滤器,避免数据爆炸 3. 服务器上优先用 tcpdump,本地分析用 Wireshark 4. 保存 pcap 文件,方便后续复盘