tcpdump 与 Wireshark 网络抓包实战:远程抓包、过滤表达式、流量分析

tcpdump 与 Wireshark 网络抓包实战:远程抓包、过滤表达式、流量分析 tcpdump 与 Wireshark 网络抓包实战远程抓包、过滤表达式、流量分析网络抓包是排查网络故障、分析协议行为、定位性能瓶颈的核心技能。tcpdump 是 Linux 下轻量的命令行抓包工具Wireshark 则是功能强大的图形化协议分析利器。两者结合使用——在服务器上用 tcpdump 抓包在本地用 Wireshark 分析——能覆盖绝大多数网络问题的排查场景。本文将系统讲解从基础抓包到高级流量分析的完整流程。环境要求本教程适用于以下环境服务器LinuxUbuntu 20.04 / Debian 11 / CentOS 7本地Windows / macOS / Linux需安装 Wireshark工具tcpdump服务端、Wireshark 4.x本地推荐使用雨云服务器 rainyun-com作为实验环境注册填优惠码2026off领 5 折优惠券。推荐机型1 核 2GB Linux 云服务器运行 tcpdump 完全足够适合网络抓包学习与日常运维使用。核心概念数据包捕获原理tcpdump 基于 libpcap 库通过将网卡设置为混杂模式Promiscuous Mode捕获经过该网卡的所有数据帧。捕获的数据以 PCAP 格式保存Wireshark 可直接读取该格式进行可视化分析。BPF 过滤器Berkeley Packet FilterBPF是 tcpdump/Wireshark 的过滤语言分为两层内核层 BPF在内核层面过滤性能高tcpdump-f参数使用应用层显示过滤器Wireshark 专有语法更丰富在应用层过滤抓包文件格式格式扩展名说明PCAP.pcap最通用格式tcpdump 默认PCAPng.pcapng新一代格式支持多接口、注释ERF.erfEndace 专有格式配置步骤第一步安装 tcpdump# Ubuntu/Debiansudoaptupdatesudoaptinstall-ytcpdump# CentOS/RHELsudoyuminstall-ytcpdump# 验证安装tcpdump--version第二步基本抓包命令# 查看可用网络接口sudotcpdump-D# 在 eth0 上抓包显示详细内容限制 100 个包sudotcpdump-ieth0-v-c100# 抓包并保存到文件不解析主机名和端口速度更快sudotcpdump-ieth0-nn-w/tmp/capture.pcap# 抓包同时显示内容调试用sudotcpdump-ieth0-nn-v-w/tmp/capture.pcap# 指定抓包文件大小每 100MB 自动切割sudotcpdump-ieth0-nn-C100-w/tmp/capture_%Y%m%d_%H%M%S.pcap第三步BPF 过滤表达式详解# 只抓 HTTP 流量80 端口sudotcpdump-ieth0-nnport80# 抓指定 IP 的流量sudotcpdump-ieth0-nnhost192.168.1.100# 抓指定 IP 和指定端口的组合sudotcpdump-ieth0-nnhost192.168.1.100 and port443# 抓 TCP SYN 包分析连接建立sudotcpdump-ieth0-nntcp[tcpflags] tcp-syn ! 0# 抓 TCP RST 包排查连接重置sudotcpdump-ieth0-nntcp[tcpflags] tcp-rst ! 0# 抓大于 1000 字节的包sudotcpdump-ieth0-nngreater 1000# 排除 SSH 流量避免抓包自身操作产生干扰sudotcpdump-ieth0-nnnot port22# 抓 ICMP 包sudotcpdump-ieth0-nnicmp# 抓 DNS 查询sudotcpdump-ieth0-nnport53# 抓特定网段的流量sudotcpdump-ieth0-nnnet10.0.0.0/24# 复合条件抓来自 10.0.0.1 到 8.8.8.8 的 UDP 流量sudotcpdump-ieth0-nnsrc host 10.0.0.1 and dst host 8.8.8.8 and udp第四步远程抓包并实时在 Wireshark 中分析这是生产环境中最常用的工作流在远程服务器上实时抓包通过 SSH 管道传输到本地 Wireshark。方法一SSH 管道实时分析# macOS/Linux 本地执行sshuseryour-serversudo tcpdump -i eth0 -nn -U -w - not port 22|wireshark-k-i-# Windows需要安装 Wireshark 并配置 PATH# 在 PowerShell 中执行sshuseryour-serversudo tcpdump -i eth0 -nn -U -w - not port 22|C:\Program Files\Wireshark\Wireshark.exe-k-i-参数说明-Upacket-buffered 模式每抓到一个包立即输出保证实时性-w -输出到标准输出stdoutWireshark-k立即开始捕获Wireshark-i -从标准输入读取方法二抓包后下载分析# 服务器端抓包 60 秒sudotimeout60tcpdump-ieth0-nn-w/tmp/capture.pcap not port22# 下载到本地scpuseryour-server:/tmp/capture.pcap ~/Desktop/# 本地用 Wireshark 打开wireshark ~/Desktop/capture.pcap实战示例场景一分析 HTTP 请求响应时延# 抓取 HTTP 流量含时间戳sudotcpdump-ieth0-nn-ttttport80-w/tmp/http.pcap# 用 tcpdump 快速查看 HTTP 请求头ASCII 模式sudotcpdump-ieth0-nn-Aport80|grep-EGET|POST|HTTP|Host:在 Wireshark 中分析打开http.pcap菜单 → 统计 → HTTP → 请求右键任意 HTTP 流 → 追踪 → TCP 流查看完整对话统计 → 服务响应时间 → HTTP分析各接口延迟场景二排查 TCP 连接异常重置# 专门抓取 RST 包sudotcpdump-ieth0-nntcp[tcpflags] tcp-rst ! 0-w/tmp/rst.pcap# 实时显示 RST 连接信息sudotcpdump-ieth0-nntcp[tcpflags] tcp-rst ! 0|\awk{print $3, -, $5, $6}Wireshark 显示过滤器在顶部过滤栏输入# 过滤 RST 包 tcp.flags.reset 1 # 过滤 TCP 重传 tcp.analysis.retransmission # 过滤延迟超过 100ms 的 ACK tcp.analysis.ack_rtt 0.1 # 过滤 HTTP 错误响应 http.response.code 400场景三DNS 解析故障排查# 抓取 DNS 流量sudotcpdump-ieth0-nnport53-w/tmp/dns.pcap# 实时显示 DNS 查询和响应sudotcpdump-ieth0-nnport53|\grep-oP(?A\? )[^ ]|(?A )[0-9.]Wireshark 中分析 DNS过滤器dns统计 → DNS查看各域名解析时延检查dns.flags.rcode ! 0的失败查询场景四统计流量 Top N# 安装 ngrep 辅助分析sudoaptinstall-yngrep# 用 tcpdump awk 统计各 IP 流量sudotcpdump-ieth0-nn-q|\awk{print $3}|\cut-d. -f1-4|\sort|uniq-c|sort-rn|head-20常见问题Qtcpdump 提示 “Permission denied” 无法抓包A需要 root 权限或为用户添加cap_net_raw能力# 方法一使用 sudosudotcpdump-ieth0# 方法二给 tcpdump 添加 capability不推荐生产环境sudosetcap cap_net_raw,cap_net_admineip /usr/sbin/tcpdumpQ抓包文件太大如何分割# 按文件大小分割每 100MB 一个文件sudotcpdump-ieth0-nn-C100-w/tmp/cap.pcap# 按时间分割每 300 秒一个文件sudotcpdump-ieth0-nn-G300-w/tmp/cap_%Y%m%d_%H%M%S.pcapQWireshark 如何解密 HTTPS/TLS 流量A需要服务器的 TLS 会话密钥文件SSLKEYLOGFILE。在应用侧设置环境变量SSLKEYLOGFILE/tmp/tls.log后Wireshark → 编辑 → 首选项 → Protocols → TLS → 设置密钥日志文件路径。Q抓包对服务器性能影响大吗A使用 BPF 过滤表达式可以大幅降低开销。生产环境建议加-nn避免 DNS 解析、加精确过滤条件、用-C限制文件大小、高流量时使用-s 64只抓包头。Qtcpdump 能抓 lo 回环接口的流量吗A可以。使用sudo tcpdump -i lo即可抓取本机进程间通信如应用访问本地数据库的流量。tcpdump 和 Wireshark 的组合是每个运维和开发工程师工具箱中不可或缺的利器。熟练掌握 BPF 过滤表达式和 Wireshark 分析技巧能让你在遇到复杂网络问题时快速定位根因。