ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Wireshark+火绒:QQ微信后台连接分析与P2P抓包真相

Wireshark+火绒:QQ微信后台连接分析与P2P抓包真相 网上搜“Wireshark抓QQ好友IP”这类帖子并不少但真按标题做完一遍大部分人都会发现事情和自己想的不太一样。QQ、微信这些即时通讯软件它们的连接模型决定了你在流量里能看到什么、不能看到什么。我这次把Wireshark和火绒安全软件配合起来从“数据包”和“进程连接”两个维度把QQ和微信在电脑上的后台连接拉了个底朝天。整个过程本质上是本地网络连接分析不是黑科技只针对我自己电脑上的流量、自己的账号和授权过的测试环境。这篇文章会把完整链路、过滤器的思路、火绒剑的使用方法以及我踩过的几个坑都写下来适合对通信软件工作原理好奇、想排查电脑异常外联、或者刚接触流量分析的朋友参考。1. 先搞明白即时通讯软件的连接模型决定你能看到什么很多人把“抓IP”想得很简单——打开抓包工具等消息一来目标地址就暴露了。但实际抓一次就会发现大部分消息流量都流向了腾讯的服务器而不是聊天对象。这不是工具的问题而是连接模型决定的。1.1 服务器中转与P2P直连两条不同路径QQ和微信这类主流即时通讯软件日常的消息收发基本走的是服务器中转模式。你发出的文字消息先被送到腾讯的接入服务器服务器再把它推送给对方。这样设计的核心原因有两个一是客户端不需要知道对方当前的真实IP不管对方在哪个网络、换了几次网络只要登录态有效就能收到消息二是服务器可以做内容审核、离线缓存、多端同步。在这个过程中你的客户端只和服务器建连抓包看到的自然就是服务器IP。什么时候会出现P2P直连很多人在局域网里传文件、发起音视频通话时遇到过。当两个客户端都在同一局域网内或者NAT打洞成功时数据会直接在一方和另一方之间传输不再绕道服务器。这个时候双方的IP地址会通过信令通道交换给对方抓包也就能看到真正的对端地址。当年QQ的“局域网传文件”功能就是典型的P2P场景速度可以跑满内网带宽。微信的情况类似但它的设计更偏“服务器中转优先”在电脑端传文件时多数情况也是走服务器的只有部分场景会建立直连。所以要回答“为什么抓不到好友IP”先要看你俩之间跑的是哪条路径。如果只是发文字、发图片抓到的基本是服务器IP如果你俩在同一个局域网内互传文件、打音视频电话同时这条路又是直连而非服务器转发那对端IP才会浮出水面。抓包工具只是记录网卡上经过的报文它不会自己分辨哪个是好友、哪个是服务器一切都要靠人去判断。1.2 加密流量的“可视”和“不可视”现在的QQ和微信通信内容基本都是TLS/QUIC加密的。你抓到的数据包能看的部分包括目标IP、目标端口、协议类型、包的大小和到达时间节奏、TLS握手阶段的若干元信息比如证书中的域名、SNI某些场景下可能通过ECH加密。如果通信内容本身没有破解密钥那数据载荷在你眼里就是一堆密文。这里有个容易搞混的点Wireshark虽然能完整显示TLS握手的ClientHello能看到“客户端在和哪个IP建连”也能从证书信息判断这个连接属于哪个域名但看不到消息内容。换句话说你能知道QQ在和某个腾讯云IP通信但不知道消息内容是“晚安”还是“明天几点见”。反过来不允许在抓包结果里直接看到对方的MAC地址或IP除非你们建立了底层直连。加密通讯时代流量侧能分析到的极限就是这些元数据。在线传输和本地分析是两个层面。QQ、微信的数据包到了本地网卡之后Wireshark可以完整捕获但如果你用的是无线网卡处于一个隔离的局域网环境那能看到的就只是和自己相关的广播和单播流量隔壁电脑的流量是看不到的。这一点后面第4章会详细说。2. Wireshark实操从网卡选择到会话定位的关键几步2.1 环境准备网卡、驱动与抓包前提Windows下装Wireshark时安装向导会让你勾选安装Npcap这个驱动必须装否则抓不到包。装完后打开Wireshark第一眼看到的就是网卡接口列表。我这次用的是Windows 11笔记本连接的是家里的Wi-Fi所以选择的是名为“WLAN”的接口如果你插着网线就是“以太网”。这里有个细节如果电脑装了VMware、VirtualBox这类虚拟机软件列表里还会出现VMnet1、VMnet8等虚拟网卡一般不用管它们除非你确实想抓虚拟机流量。抓QQ和微信流量最稳的姿势是用管理员权限启动Wireshark。Windows下如果你不赋予管理员权限网卡可能进入不了抓包所需的状态结果往往是什么包都抓不到或者只能抓到几个零星ARP报文。Linux下通常需要给dumpcap设置CAP_NET_RAW权限或者直接用root运行。还有一点容易被忽略无线网卡不一定要开混杂模式才能看到自己的流量但如果你在办公室里想抓同一交换机下其他设备的流量那就很困难了——现在的交换机和AP基本都做了端口隔离。所以本地抓包的前提是抓自己设备进出网卡的包。在抓包前最好把无关流量降到最低。关闭浏览器里不必要的标签页、暂停网盘同步、把手机连到别的网络这样后面分析时不会被一堆背景流量淹没。如果只想分析QQ那就先退出微信等QQ跑几分钟再停止抓包减少干扰。2.2 过滤器与视图让流量中的“主角”显形Wireshark有两个过滤阶段抓捕过滤器和显示过滤器。抓捕过滤器在抓包前设置可以选择性地丢弃不关心的报文但新手我建议先不加或者只按IP过滤host 1.2.3.4比如你已经从火绒或资源监视器里看到QQ连了某个IP就可以用这个地址做过滤只抓它相关的包。显示过滤器则是在抓包结束之后用的我更常用的是下面这几条tcp.port 443 udp ip.addr 1.2.3.4 dns tls.handshake.type 1抓包过程中有个很实用的技巧停止抓包后不要急着翻包列表。打开顶部菜单的“统计” - “会话表”或Conversations这里会按IP对列出来所有通信双方并且带上了数据包数量、字节数。按包数量排序和QQ、微信进程通信最频繁的那个IP就出来了。这个视角非常管用——它不关心单个包而是把整个会话的规模展示给你看。比如我抓QQ时发现会话表里排第一的是一个腾讯云IDC的IP双方通信几百个包还有一个IP地址只出现了十几个包但都是从443端口连出来的。前者是长连接服务器后者可能是某个接口的短请求。接下来右键点击这条会话选择“追踪流” - “TCP流”就能看到这次连接的原始内容。如果恰好是HTTP明文负载里直接能看到URL如果是HTTPS你会看到一堆TLS握手报文但也能借此确认连接确实存在。2.3 从会话表快速锁定异常连接会话表和“追踪流”结合基本可以回答“某个程序在连哪个IP”的问题。但要注意一点不要只看IP要把发起时间、持续时长、端口组合起来看。我常用的判断逻辑是以下几条。端口是否固定为443或者80。固定常见服务端口的大概率是服务器节点因为服务器要对外提供服务端口必须固定且可预期P2P直连时双方通常使用随机高位端口以避免端口冲突。会话是否只在某个操作期间存在。比如你给好友发了一个文件会话表里恰好在这个时间点出现了一条新的IP对通信那这条很可能就是文件传输通道。如果那个IP对只在文件传输的几十秒内存在并且流量方向是双向的、双方都有较大字节数那就更可能是P2P直连。观察连接建立后的行为。服务器中转的连接往往连上后会有固定的心跳节奏每隔一段时间发个几十字节的包P2P传输则是密集且不规则的。用Wireshark的“统计” - “I/O图表”选时间粒度到100毫秒可以很直观地看到流量波形。DNS验证是判断IP归属的好帮手。打开显示过滤器敲“dns”看QQ和微信在启动时解析了哪些域名。把抓到的目标IP和DNS查询里的域名对应起来就能知道它是腾讯的接入服务器、CDN节点还是某个第三方统计服务。大多数时候聊天软件的后台连接都会指向它自己的服务域名出现这种情况就不用紧张。3. 火绒反向验证从进程视角确认微信、QQ连了谁Wireshark看的是“网卡上发生了什么”但有个短板它不知道这些包是哪个进程产生的。虽然Wireshark也能通过“端点”或“会话”猜测但更直接的方式是用火绒这类安全工具从进程维度看网络连接。3.1 火绒剑网络连接视图火绒安全软件自带了一个被称为“火绒剑”的工具入口在“安全工具”或者左上角的菜单里它打开后是个独立的窗口里面有进程管理、网络连接、启动项、文件管理等多个页签。点开“网络连接”就能看到当前系统所有进程的TCP和UDP连接情况。这个视图一秒刷新一次对于一次排查来说足够了。具体操作是这样的在列表上方的“进程名”列里找QQ.exe或WeChat.exe / Weixin.exe。选中之后下方的远程地址列就会列出这个进程当前连着的所有远端IP和端口。注意观察几个字段协议、本地地址、远程地址、远程端口、状态。状态是ESTABLISHED表示连接保持中TIME_WAIT表示连接刚关闭CLOSE_WAIT则可能是程序还没释放连接。试一次就能明显感受到Wireshark和火绒的互补关系。Wireshark能告诉你“这个IP一直在通信”但无法直接告诉你“是哪个进程”火绒剑能直接告诉你“QQ.exe在连接哪些IP”但看不到包内容和通信规模。两边一对照判断就确定了。我这次用火绒剑看到微信进程保持了好几条到腾讯网的连接其中几条远程端口是443还有一条是高位端口。再到Wireshark里查那个高位端口对应的包发现是一条QUIC/UDP流——这其实是新版微信在尝试UDP传输一些数据并不代表在和用户点对点通信。3.2 联网控制与安全日志除了火绒剑火绒的“防护中心”里还有个“联网控制”功能针对单机软件来说是一把好用的尺子。你可以给QQ或微信添加一条联网控制规则把动作设置为记录或询问。之后每当程序尝试建立新连接火绒会在安全日志里记录下目标IP、远程端口和程序路径。这个方法和Wireshark不同的是它不需要抓包也能把每个新连接记录下来适合在后台持续观察。比如我想确认微信在后台有没有偷偷连别的地址就添加了一条“WeChat.exe”的联网规则选择“询问我”或“记录”。几小时后翻安全日志看到的目标基本都是微信官方域名对应的IP个别是CDN节点。如果某天日志里出现了一个既不是腾讯IP段、又不是已知CDN的地址那就值得警惕了可能需要进一步抓包研判。不过联网控制也用不着长期开着。它会在每次程序启动新连接时弹窗如果你正在正常使用微信频繁弹窗会很烦。定位问题时临时开个几小时就够了确认完就关掉。3.3 QQ与微信的连接特征差异把QQ和微信放在一起对比你会看到两种不同的连接风格。这里我列一个对比表方便大家对照自己的观察结果。对比项QQWindows桌面版微信Windows桌面版常用远程端口443、80、8000、高位端口443、80、高位端口常见协议TCP UDPTCP、TLS、QUIC/UDP连接数量较多部分版本会同时保持多条长连接相对克制但也会有多路连接是否常见P2P直连局域网传文件、部分通话场景局域网传输、部分场景会出现但频率较低看到的好友IP场景局域网直连传文件、音视频时可能看到局域网直连传输、通话时偶尔能看到这些特征不是固定的因为客户端版本一直在变。但经验上QQ的UDP长连接比微信多得多这和历史架构有关微信更倾向于把流量收敛到443端口的TLS/QUIC上这样在网络环境里更容易被放行。如果你在火绒剑里看到微信连了一个非443/80端口的高位端口地址先不要紧张有可能是它的HTTP代理或某种传输通道。4. 实测中容易翻车的几个误判与避坑方法4.1 虚拟网卡和无线环境的干扰第一次抓包的人容易在Wireshark的接口列表里犯迷糊。装了WSL2、Docker、VMware之后系统里会出现一堆虚拟网卡。这些网卡也会出现在Wireshark的接口列表里甚至有IP地址。如果选错了接口能抓到的包会非常少或者干脆为零。我的经验是看接口名后面的IP地址是否和本机实际上网地址一致。用“ipconfig”查看默认路由所在网卡的IPv4地址然后Wireshark选那个IP对应的接口。另一个常见问题是无线网卡抓包时的“盲区”。无线网络环境下你的网卡默认只会收到发往本机的单播帧、广播帧以及组播帧。就算你的网卡开启了混杂模式好多无线网卡驱动并不真正把所有无线帧都提交给上层你依然看不到其他设备之间的流量。这导致很多人的直观感受是“为什么我抓不到隔壁电脑的包”。这不是Wireshark坏了而是无线物理特性决定的。要在本地实验环境里看到别人的流量需要有把交换机端口镜像或者做ARP窥探但后者涉及主动欺骗别人的网络里做这种事属于越界行为尽量不要碰。4.2 NAT、IPv6与端口导致的地址错认我曾一度把“远程地址”里的IP直接当成“对方真实IP”来分析后来发现这个结论经常不成立。现在的宽带环境运营商普遍在使用CGNAT你家路由器出口可能是一个运营商网关地址你看到对端连着你的“出口IP”并不等于对端知道你家电脑的内网地址。反过来也一样你抓到的对方IP也可能是对方路由器的公网出口而不是对方电脑本身。所以从流量里看到的IP推导到实际地理位置时会有偏差这种偏差在城市和运营商层面上尤其明显。IPv6也值得单独说。如果你的网络环境里有公网IPv6很多软件的P2P功能会优先走IPv6因为地址足够多、不需要NAT。抓包时会话表里会出现大量的IPv6地址且这些地址经常是动态前缀和一个固定的物理位置没有简单对应关系。如果遇到聊天软件传输时出现了IPv6流量先修改Wireshark显示过滤器比如“ipv6”或“ip.addr 2001:db8::1”这样的格式再去看会话。忘记IPv6的存在就可能把关键连接漏掉。端口方面也有个经典误区看到远程端口是443或80就断定对方是服务器。其实在P2P场景里如果一方自定义监听了8080或者别的高位端口发起方一样可以连过去远程连过来的端口并不总是固定服务端口。判断时要把端口号、连接建立时间、IP归属地三者结合起来单独一个字段只能给出线索不能定论。4.3 把CDN节点当作对方所在位置的典型错误这个坑我踩过不止一次。给微信好友发一张图片然后立刻抓包会看到有一条连接到某个IP的数据流。这个IP的归属地查询结果显示“广东广州电信”或者“天津联通”很容易让人误以为对方就在那个城市。但仔细看后续的包内容TLS的SNI字段、HTTP流里的Host字段会发现那其实是微信图片存储服务的CDN节点。你发图时客户端先把图片上传到了CDN边缘节点再由CDN回源到存储中心跟对方人在哪里没有半毛钱关系。怎么判断对端是CDN而不是聊天对象我总结了几个特征连接时间极短快速上传或下载完成后立即断开端口是常规的443会话表里数据包数量不多但单包很大对应的DNS域名明显是CDN/云存储服务域名。如果满足这些特征基本可以确定是内容分发节点。真正意义上的P2P直连通信双方一般会保持一段持续性的双向流量而且是随机的两端高位端口互连。在做“抓IP”类实验时很多人会急着看图里的IP归属地然后得出各种结论。我的建议是冷静一点先把对方和你之间是否存在P2P会话确认清楚。如果连这一层都没确认后面得出的“他在xx城市”结论大概率是错的。5. 这些技术真正适合的用法与不能碰的红线5.1 异常外联排查的完整流程那次折腾完之后我发现这套组合更适合做一件正经事排查电脑是否有异常外联。比如怀疑电脑中了挖矿木马或者某个软件在偷偷做可疑事就可以按下面的流程走一遍。先用火绒剑看所有进程的网络连接按远程地址排序找那些既不是系统进程、也不是常用软件的可疑进程。确认可疑进程的PID后打开Wireshark选择正确的网卡设置捕获过滤器为“host 可疑进程连接的IP”。抓包持续几分钟然后看会话表判断这个IP的类型用DNS查询和whois确认归属地和服务商。如果可疑流量走的是明文HTTP直接追踪TCP流就能看到它在请求什么内容如果走的是TLS可以通过证书的SNI字段看域名。最后把火绒剑观察到的PID信息和Wireshark的会话信息对起来就能定位到一个具体的程序、一个具体的域名和对应的IP。这个过程不复杂但它能把“怀疑”变成“确认”。我在一次排查中发现某办公软件的帮助文档进程在后台连接了一个第三方的数据统计域名虽然不是什么恶意流量但那种“我电脑里还有我不知道的连接”的状态让人很不舒服。知道了它在连谁、连多久、传多少数据心里就有底了。5.2 合规边界与个人隐私底线聊到这些技术必须把边界画清楚。Wireshark和火绒都是正当工具但它们的使用场景有明确的限制抓包分析应该在自有设备、自有账号、自己路由器或交换机范围内做如果你要在别人的设备、别人的网络抓包分析必须提前获得对方明确授权。未经授权抓取他人网络通信、利用IP信息定位骚扰他人在任何环境下都是越界行为这不是“学习技术”的挡箭牌。公共WiFi场景尤其要注意。在咖啡厅、酒店等公共场所的WiFi上跑抓包工具看起来是练手实际上是在捕获其他用户的数据。就算网络是加密的只要有机会抓到别人的流量就已经踩到隐私红线的边缘了。技术是中性的用它可以维护自己设备的安全也可以被用来干扰他人。既然写这篇东西就得把这条线说明白所有演示内容我都限定在自己电脑、自己账号、自己可控的网络环境里不鼓励任何形式的未经授权嗅探。5.3 白板复盘一次完整的本地网络分析最后复盘一次完整的流程供刚入门的朋友参考。假设你的电脑上同时装了QQ和微信你想看看它们启动后到底在连谁。第一步打开火绒剑切到“网络连接”找到QQ.exe和WeChat.exe的进程记录下它们当前连接的远程IP和端口。如果远程IP非常多记下出现频率最高的前五个。第二步打开Wireshark选择本机上网所用的网卡看接口列表里的IP和ipconfig的结果是否匹配。不要在抓包开始时设置太严的过滤器直接抓5分钟即可。期间可以手动操作一下QQ或微信比如发一张图模拟真实使用。第三步停止抓包。打开“统计”-“会话表”在IPv4标签页按包数量排序找到1步里火绒剑记录的那些IP确认对应的会话。点击IP对右键选择“追踪流”-“TCP流”查看里面的内容。如果看到的是HTTP明文直接读Host字段如果是TLS就看ClientHello里的SNI字段。第四步对拿到的域名做一次nslookup解析并用whois或在线IP查询工具查看归属地信息判断是腾讯服务端还是CDN节点。第五步把火绒剑的进程连接列表、Wireshark会话表、DNS域名三者对应起来写出结论QQ/微信主要连接了哪些服务节点有没有异常外联是否有P2P会话存在。这一套流程我后来反复用过很多次无论是排查自家电脑的异常流量还是研究新装软件的后台行为都非常实用。它的门槛不高关键是要理解每一层工具能回答什么问题以及数据之间如何互相印证。做完整个实验我最大的感触是抓包不是目的理解和判断才是。QQ、微信这类软件的网络连接大多数时候都是正常的服务端通信会看到对端IP的场景其实很有限。与其纠结能不能抓到好友的IP不如学会用这些工具看懂自己设备上正在发生什么。下次遇到网络问题时先看连接表再看会话表最后追到域名和证书很多疑问当场就能解开。在这套流程里Wireshark和火绒只是两个趁手的工具真正值钱的是你脑子里那套“连接模型加边界判断”的分析思路。
返回列表