tcpdump + Wireshark:抓取nginx转发到服务的流量

tcpdump

类Unix 系统里的事实标准命令行抓包工具 ,功能与 Wireshark 等价,但无 GUI、依赖命令行 ;适合服务器、嵌入式、脚本化场景。

它直接把网卡收到的 原始以太网帧 拷贝到用户空间,可实时显示、过滤、保存成 pcap 文件,再供 Wireshark 离线分析。

指令格式

复制代码
tcpdump [ -i 接口 ] [ -nn ] [ -s 快照长度 ] [ -c 数量 ] [ -w 文件名 ] [ BPF表达式 ]
选项 说明 示例
-i eth0 指定网卡;省略则选"最低编号已启用接口" tcpdump -i any 抓全部接口
-nn 不反解析主机名+端口号(直接显示 IP 数字) 避免 DNS 阻塞
-s 0 抓完整报文(默认 68~262 字节) 分析 payload 必加
-c 100 只抓 100 个包后自动退出 脚本采样常用
-w file.pcap 写入 pcap 文件,不屏幕打印 供 Wireshark 打开
-r file.pcap 读文件模式,再跑 BPF 过滤 离线二次分析
-A 以 ASCII 形式把应用层载荷打印出来 快速看 HTTP 头
-X 同时 16 进制+ASCII 对照 调试二进制协议
-v / -vv / -vvv 越来越详细解码,直到链路层选项都展开 查 VLAN、MSS、Window Scale
-e 输出链路层头(MAC 地址) 定位交换机端口

BPF 表达式速查

| 场景 | 语法 |
|---------|------------------------------------------------------|---|
| 源/目的主机 | src host 10.0.0.1 / dst host 10.0.0.1 |
| 网段 | net 192.168.0.0/24 |
| 端口 | tcp port 443 / udp portrange 8000-9000 |
| 且/或/非 | and / or / not |
| TCP 标志位 | `tcptcpflags & (tcp-syntcp-ack) == (tcp-syn)` | |
| 载荷内容 | tcp[20:4] = 0x47455420 (从 TCP 数据偏移 20 开始 4 字节) |

tcpdump -i eth1 和 tcpdump -i any 的核心区别只有一句话:
前者只抓 eth1 这一张网卡的包;后者抓 本机所有 网卡(包括回环、veth、隧道等)的包,并且拿到的是"伪链路层"首部。

对比维度 -i eth1 -i any
抓包范围 仅 eth1 接口 所有接口(lo、eth0、docker0、vethxxx...)
链路层头 真实的 MAC 头(14 字节) 伪链路层(Linux cooked capture,协议类型 0x0000)
包方向 只反映 eth1 真实收发 同一条流可能在 any 里出现两次(进/出不同接口)
过滤精度 可针对 eth1 的 MAC 地址过滤 只能按 IP/端口过滤,MAC 地址是伪值
性能/CPU 低(内核只复制 eth1 队列) 高(复制所有接口队列)
适用场景 定位交换机端口、看 VLAN 标签 快速排障,不确定流量从哪块卡进来

报文级过滤:协议、端口、主机、标志位、payload 内容均可过滤

复制代码
#安装

yum install tcpdump

#指定端口号进行抓取日志

tcpdump -i any port 80

#指定端口号进行抓取日志,并且进行保存

tcpdump -i any port 80 -w myService.pcap

抓取eth0接口,源IP主机为192.168.26.159,目的主机为:192.168.26.244

在192.168.26.159客户端发送:curl http://192.168.26.244/web/ ;抓包命令如下:

复制代码
tcpdump -i eth0  src host 192.168.26.159 and dst host 192.168.26.244

抓取端口号

复制代码
tcpdump port 80
捕获http请求中的用户名和密码
复制代码
tcpdump -i eth2 -s0 -Anl |egrep -i "POST /|pwd=|passwd=|password=|Host:"

wireshark

wireshark是非常流行的网络封包分析软件,简称小鲨鱼,功能十分强大。可以截取各种网络封包,显示网络封包的详细信息。

下载路径:

https://www.wireshark.org/

显示过滤器语法和实例

打开上面保存的pcap文件后,可以进行应用条件过滤查询

http模式过滤

复制代码
http.request.method=="POST"
http.request.method=="GET"

ip过滤

ip.src ==112.53.42.42 显示源地址为112.53.42.42的数据包列表

ip.dst==112.53.42.42, 显示目标地址为112.53.42.42的数据包列表

ip.addr == 112.53.42.42 显示源IP地址或目标IP地址为112.53.42.42的数据包列表

逻辑运算符为 and/or/not

过滤多个条件组合时,使用and/or。

获取IP地址为192.168.0.104的ICMP数据包表达式为

复制代码
​​​​​​​ip.addr == 192.168.0.104 and icmp

http请求,参看对应的请求体和响应情况

追踪流 -》 HTTP Stream

HTTP 头字段过滤

复制代码
http.request.line contains "traceparent"

HTTP 报文已解析出 Body(实体),进行过滤

复制代码
http.file_data contains "businessLicenseNo"

匹配完整 URI

​​​​​​​

复制代码
http.request.uri contains "create/trade"

仅匹配查询串

复制代码
http.request.uri.query contains "order="
相关推荐
禹凕6 小时前
机器学习之Selenium(Machina Learning about Selenium)
爬虫·python·selenium·测试工具·机器学习
PC2005-cloud15 小时前
Nginx 学习笔记:Server 块配置详解,域名路由与多站点部署实战
nginx
zach15 小时前
Vue/React SPA 打包部署后,子路由刷新 401 未登录问题彻底解决
前端·nginx·next.js
yume_sibai17 小时前
02-Nginx进阶配置完全指南(性能优化 + 安全配置 + 缓存配置 + WebSocket代理)
nginx·安全·性能优化
阿狗童鞋18 小时前
Nginx反向代理与负载均衡实战指南
运维·nginx·负载均衡
Lsetea1 天前
OpenSSL verify报error 20:CAfile、fullchain与本地信任链分层排查
nginx·https·ssl证书·openssl·证书链
qq_394562001 天前
【在Linux上升级nginx】
linux·服务器·nginx
冬、不眠的夜2 天前
分享一下 nginx 配置一个简单的 web 网站
nginx
孤狼GPT2 天前
ChatGPT、Codex排查实录:接口偶发502/504,应用日志却没有报错,到底该查哪一层?
nginx·codex·chatgptplus·chatgptpro·接口排查
水水不水啊2 天前
告别杂乱的调试窗口:我用 Python + WebView 写了一个现代化串口助手
python·测试工具·嵌入式·嵌入式开发·串口调试·串口助手