服务覆盖:昆明·曲靖·玉溪·保山·昭通·丽江·普洱·临沧·楚雄·红河·文山·西双版纳·大理·德宏·怒江·迪庆

Windows下快速定位网卡的方法

eycit 2026-04-18 -4 次阅读 系统安装
---

theme: default themeName: "默认主题" title: "用了五年Wireshark,我整理出这份抓包排查指南,收藏量破万"


前言

网络故障排查领域,Wireshark几乎是唯一的免费方案。你可以用它分析HTTP请求为什么超时、TCP重传是怎么回事、DNS解析失败的原因在哪一层——只要链路上的数据还在流动,Wireshark就能告诉你真相。

但很多人装完Wireshark就开始无脑抓包,抓了几百兆数据塞满硬盘,回头一看无从下手。这篇文章告诉你怎么抓对包、分析对字段、用对过滤表达式,以及Wireshark这些年都更新了哪些实用功能。

抓包前的准备:选对接口,开对模式

选择正确的网卡

Wireshark启动后会列出所有网卡,很多人一看密密麻麻就蒙了。记住几个判断方法:

# Windows下快速定位网卡的方法

打开CMD,运行:

ipconfig /all

看哪个网卡有IPv4地址且是活动的

以太网适配器对应的就是本地物理网卡

VMware/VirtualBox等虚拟网卡通常以VMware开头

抓包场景对应网卡:
场景抓哪张网卡
分析本机与服务器的通信物理网卡
分析虚拟机与宿主机通信虚拟网卡(如VMware Network Adapter)
分析容器内部通信docker0 或容器对应的veth网卡
抓无线路由器流量需要将网卡设为Monitor模式(需无线网卡支持)

Windows下的抓包权限问题

正常情况下Wireshark需要管理员权限才能抓包(因为涉及原始套接字访问)。如果你不想每次都右键"以管理员身份运行",需要安装Npcap(Windows平台替代WinPcap的新方案):

# 下载Npcap:https://npcap.com/

安装时勾选:

✅ Install Npcap in WinPcap API-compatible Mode ← 这个必须勾,否则Wireshark无法抓包

✅ Restrict Npcap driver's access to Administrators only

过滤器:这是Wireshark的精髓

过滤器分两类:捕获过滤器(Capture Filter)显示过滤器(Display Filter)。很多人搞不清楚区别——

捕获过滤器在抓包阶段就生效,决定哪些包被写入文件(节省资源);显示过滤器是在抓到的包里筛选展示(不丢数据,但对大文件筛选会慢)。

捕获过滤器语法

# 语法:<方向> <协议> <端口或IP>

常用表达式:

port 80 # 只抓80端口(HTTP) port not 22 # 排除SSH流量 host 192.168.1.100 # 只抓指定IP的流量 net 192.168.1.0/24 # 抓整个网段 tcp port 443 # 只抓HTTPS udp # 只抓UDP包

复合条件

not port 22 and not port 3389 # 排除远程桌面和SSH host 192.168.1.10 and tcp port 80 # 某台机器的HTTP流量

警告:捕获过滤器用的是BPF(Berkeley Packet Filter)语法,很多新手搞混。实际上记一个原则——在Capture菜单 → Capture Filters里保存的才是捕获过滤器,工具栏输入框里默认是显示过滤器

显示过滤器语法(重点掌握)

显示过滤器才是日常分析的主力,因为它不会丢弃任何原始数据。

# 基础过滤

ip.addr == 192.168.1.100 # 某个IP的所有流量 ip.src == 192.168.1.50 # 特定来源 ip.dst == 10.0.0.1 # 特定目的地 tcp.port == 443 # HTTPS端口 http.request.method == "POST" # POST请求

组合逻辑

ip.addr == 192.168.1.100 && http # 某IP的HTTP流量 tcp && !(ip.addr == 192.168.1.0/24) # TCP流量但排除内网

字符串匹配

http.host contains "api.example.com" http.request.uri matches ".login." dns.qry.name contains "baidu"

时间过滤

frame.time >= "2024-01-01 08:00:00"

常用快捷过滤器(收藏备用)

# HTTP相关

http.request # 所有HTTP请求 http.response # 所有HTTP响应 http contains "password" # 含关键词的HTTP包 http.request.uri == "/api/login" # 精确URL匹配

TCP相关

tcp.analysis.retransmission # TCP重传包 tcp.analysis.lost_segment # 丢包 tcp.analysis.ack_rtt > 0.5 # ACK延迟超过500ms tcp.flags.syn == 1 # SYN包(建连起始) tcp.flags.fin == 1 # FIN包(正常断开)

DNS相关

dns # 所有DNS包 dns.qry.type == A # A记录查询 dns.resp.type == A # A记录响应

错误相关

icmp && icmp.type == 3 # 目标不可达 tls.alert_message # TLS告警

实战场景一:分析HTTP请求为什么超时

现象:浏览器访问某个接口,30秒超时,用curl测试也是同样结果。 抓包策略
# 1. 先确定目标IP

nslookup api.example.com

假设得到 1.2.3.4

2. 启动Wireshark,捕获过滤器用:

host 1.2.3.4 and tcp port 80

3. 在浏览器触发请求后停止捕获

分析思路:

1. 看TCP三次握手是否完成(有无SYN → SYN-ACK → ACK) 2. 看HTTP请求是否发出(有无GET/POST → Request) 3. 看服务端是否回包(有无100 Continue → 200 OK 或 500 Error) 4. 如果卡在TCP握手 → 防火墙/网络层问题 5. 如果请求发出了但无响应 → 服务端处理超时或连接被重置

重点看的字段(右键 → 应用为列):
Time(相对时间,第一包为0)

Source / Destination Protocol Length Info TCP segment data(展开看TCP层信息)

实战场景二:排查DNS解析失败

# 捕获过滤器

port 53

显示过滤器

dns

常见问题判断:

1. 有请求无响应 → DNS服务器不通(检查防火墙/路由)

dns.qry.name == "example.com" && !dns.response

2. 有响应但解析结果错误

dns.a == 0.0.0.0 # DNS被污染,返回空地址

3. 查看DNS响应时间

dns.time > 1 # DNS解析超过1秒,体验会很差

实战场景三:TCP重传频繁?看是哪一层的问题

TCP重传意味着有数据包在网络上丢失了,但原因可能是:

# 过滤所有重传包

tcp.analysis.retransmission

进一步分析:

如果重传集中在某一个IP对

tcp.analysis.retransmission && ip.addr == 192.168.1.100

如果重传很多但没有丢包告警,可能是延迟重传(网络抖动)

延迟重传 vs 丢包重传:

延迟重传:tcp.analysis.retransmission 且 tcp.analysis.rtt > 正常值

真丢包:tcp.analysis.lost_segment > 0

进阶功能:Follow TCP Stream

这个功能是被严重低估的实战利器。

使用方法:在任意TCP包上右键 → Follow → TCP Stream

它能把TCP三次握手后的一系列通信流拼接成可读文本,显示完整的请求-响应对话。比如你抓到了一个完整的HTTP会话,它会直接显示:

GET /api/v1/user HTTP/1.1

Host: api.example.com User-Agent: curl/7.68.0 Accept: /

HTTP/1.1 200 OK Content-Type: application/json

{"code":0,"data":{"id":1234,"name":"张三"}}

这比逐包分析快十倍不止。

性能优化:抓大文件不再卡死

# 方法一:设置环形缓冲区(抓包到一定大小自动覆盖旧数据)

Capture → Options → Input → ring buffer with 10 files of 100 MB each

方法二:使用Capture Filters限制范围(抓包前就想清楚)

host 192.168.1.50 and tcp port 8080

方法三:用tshark命令行(抓包后不打开Wireshark也能分析)

tshark -r capture.pcap -Y "http.request" -T fields -e http.host -e http.request.uri

方法四:远程抓包(不在服务器本地开Wireshark)

服务器端:运行dumpcap监听

dumpcap -i eth0 -f "tcp port 80" -w /tmp/capture.pcap

本地端:用SCP把pcap拉回来分析

版本更新亮点(2019~2024)

Wireshark这些年迭代了不少实用功能:

  • TLS 1.3解密:现在Wireshark可以导入TLS会话密钥(Chrome和Firefox支持`SSLKEYLOGFILE`环境变量),直接解密HTTPS流量
  • Lua脚本扩展:可以写脚本自动分析特定模式的数据包
  • 802.11 Monitor模式支持:新版支持更多无线网卡的Monitor模式抓包
  • TCP专家信息增强:自动标注重传、乱序、重复ACK等问题
  • 命令行工具集:除了tshark,还新增了`editcap`(编辑pcap)、`mergecap`(合并多个pcap)、`capinfos`(查看pcap统计信息)

# 查看pcap文件的统计摘要

capinfos capture.pcap

合并多个pcap

mergecap -w output.pcap input1.pcap input2.pcap

抽取特定时间范围的包

editcap -r input.pcap output.pcap 1000-2000 # 抽取第1000到2000个包

结语

Wireshark用得好的人,不是记得很多快捷键,而是知道什么时候该抓、抓什么、怎么看。TCP重传看`tcp.analysis`字段,HTTP问题看`Follow TCP Stream`,DNS问题只看`port 53`——每个场景都有最直接的切入点。

建议把本文的过滤器部分收藏,以后遇到网络问题,直接翻过来用,比临时翻文档快得多。


希望本文的教程对你有所帮助。如有疑问或需要专业技术支持,可通过以下方式联系我们:

📞 服务热线:13708730161 💬 微信:eyc1689 📧 邮箱:service@eycit.com

易云城IT服务,您身边的IT专家。

上一篇
SSH/Telnet(用完即关,不要长期开放)...
下一篇
方法一:Win+R,输入 services.msc...