简介:这份文档面向希望了解网络连接排查方法的普通用户与入门学习者,围绕如何借助Windows自带工具定位QQ聊天对象的IP地址展开,属于偏实操型的技能资料。包内共1个docx文件,压缩包约288KB,内容以图文步骤形式呈现,便于在电脑上直接打开对照操作。文档从任务管理器切入,引导读者打开资源监视器,再进入网络详细信息界面,通过TCP连接列表观察远程地址,并结合百度搜索对IP归属地进行查询,同时穿插介绍了TCP协议、IP地址、远程地址等基础概念,帮助读者在完成操作的同时理解背后的网络原理。目前已有371人学习,适合想掌握网络连接查看思路、补充网络基础知识的读者参考,也可作为日常排查网络问题的入门指引。
1. 从资源监视器到 TCP 连接:一份文档拆解 QQ 好友 IP 定位的完整链路
很多人以为查好友 IP 得靠什么抓包神器或者命令行工具,其实 Windows 自带的任务管理器里就藏了一条完整链路。这份《如何查看QQ好友的IP地址信息》文档,核心思路是利用资源监视器的网络监控能力,在 QQ 聊天过程中捕获 TCP 连接,从远程地址字段提取对方 IP,再通过公开的 IP 归属地查询服务定位到城市级别。整套流程不需要装任何第三方软件,适合刚接触网络排查的运维新人、想了解 TCP 连接实际表现的后端开发者,以及需要做基础网络诊断的桌面支持人员。文档本身只有两页,但里面涉及的资源监视器、TCP 连接状态、远程地址这些概念,恰恰是日常排障时最常打交道的底层机制。我把它拆开揉碎,补上文档没写透的参数含义和实操边界,让你照着做能复现,遇到问题知道往哪查。
2. 资源监视器与 TCP 连接:为什么这条路径能拿到 IP
2.1 资源监视器在网络排查中的定位
任务管理器大家用得多了,但很多人只盯着进程和性能两个标签页,忽略了右下角那个“打开资源监视器”的入口。资源监视器本质上是 Windows 性能计数器的一个图形化封装,它把网络活动按进程维度拆开,让你能看到每个进程当前建立了哪些 TCP 连接、连到了哪个远程地址、发送接收了多少字节。这和 netstat 命令看到的东西是一回事,但资源监视器把进程名和连接状态做了关联,不用记 PID 再去反查,对不熟悉命令行的读者更友好。
文档里第一步到第三步的操作——右键任务栏打开任务管理器、切到性能标签、点开资源监视器——这条路径在 Windows 7 到 Windows 11 上都成立,只是按钮位置略有差异。Win10 以后任务管理器默认是精简视图,需要先点“详细信息”才能看到完整的性能标签页。资源监视器的网络标签页会列出所有有网络活动的进程,QQ 的主程序通常显示为 QQ.exe 或者 QQProtect.exe,具体取决于你装的版本。
2.2 TCP 连接与远程地址的对应关系
QQ 的聊天消息走的是腾讯自己的私有协议,底层传输层用的是 TCP 或 UDP。文档里选择监控 TCP 连接,是因为 TCP 是面向连接的协议,连接建立后会在本地维持一个四元组:本地地址、本地端口、远程地址、远程端口。资源监视器的 TCP 连接列表里,“远程地址”那一列就是对方公网 IP 加上端口号。当你和好友互发消息时,QQ 客户端会和腾讯服务器以及对方客户端之间建立多条连接,其中直连的那条(如果 NAT 打洞成功)远程地址就会显示好友的真实公网 IP。
这里有个关键点:不是所有 TCP 连接都指向好友。QQ 同时会和腾讯的服务器保持长连接,那些远程地址是腾讯机房的 IP。你需要通过“发送消息后观察哪条连接的字节数在变化”来区分。文档里强调“对话长一点方便监测器有效检测”,原理就是让好友回复产生足够的数据包,让对应连接的发送/接收计数明显跳动,从而在列表里一眼锁定目标。
2.3 操作步骤与参数勾选
文档第四步到第五步要求在 TCP 连接列表里右键点击“IP 地址”列头,选择“列”,然后勾选接收、发送、总数。这一步是整个流程里最容易被忽略但最关键的筛选手段。默认视图只显示远程地址和状态,你没法判断哪条连接是活跃的。勾上这三个计数列之后,列表会多出三列数字,你发一条消息,观察哪一行的发送或接收数字在增加,那一行的远程地址就是你要找的。
# 如果你习惯用命令行,等效操作是: netstat -ano | findstr "QQ.exe" # 输出示例: # TCP 192.168.1.100:54321 113.108.xx.xx:443 ESTABLISHED 12345 # 其中 113.108.xx.xx 就是远程地址,12345 是 QQ.exe 的 PID上面这段命令是资源监视器操作的命令行替代方案。netstat -ano列出所有连接和对应的 PID,findstr过滤出 QQ 相关的行。输出里的远程地址列就是资源监视器里看到的同一个东西。PID 那一列可以拿去任务管理器里反查是哪个进程。注意-n参数表示以数字形式显示地址和端口,不加的话会尝试做反向 DNS 解析,速度会慢很多。
2.4 IP 归属地查询的边界
拿到 IP 之后,文档最后一步是打开百度搜索这个 IP 看归属地。这个做法本身没问题,但你要清楚它的精度边界。IP 归属地库返回的是运营商分配给该 IP 段的注册地,通常精确到城市,但存在几种偏差:一是移动网络出口 IP 可能归属到省会城市而不是用户实际所在城市;二是如果对方用了代理或加速器,你拿到的是代理节点的 IP;三是部分 IP 库更新不及时,新分配的 IP 段可能查不到。所以“查到 IP 就知道对方在哪”这个结论要打个折扣,它只能给你一个大致范围,不能当作精确定位。
3. 从捕获到定位:完整操作流程与参数详解
3.1 环境准备与前置检查
在开始之前,先确认几件事。第一,你的 QQ 是 PC 版,手机版 QQ 不走同样的连接模型,资源监视器抓不到。第二,你和好友的聊天窗口要处于活跃状态,最好先发几条消息确认双方在线。第三,关闭其他占用网络的后台程序,比如正在下载的浏览器、自动更新的 Steam,减少干扰连接的数量。第四,如果你在 NAT 后面(绝大多数家庭宽带都是),你看到的是好友的公网 IP,不是你和他之间的内网地址,这是正常的。
资源监视器的打开路径再走一遍:右键任务栏空白处 → 任务管理器 → 性能标签 → 右下角“打开资源监视器”。如果任务管理器是精简模式,先点左下角“详细信息”展开。资源监视器窗口打开后,切换到“网络”标签,你会看到三个区域:上部是网络活动的进程列表,中部是 TCP 连接列表,下部是侦听端口列表。我们只关心中间那块。
3.2 捕获好友 IP 的实操步骤
下面按文档的节奏走一遍,每一步补上参数说明和观察要点。
第一步,在资源监视器的网络标签页里,找到 TCP 连接区域。默认列有“映像”“PID”“本地地址”“本地端口”“远程地址”“远程端口”“状态”。右键点击任意列头,选择“选择列”,在弹出的列表里把“发送”“接收”“总数”三个勾上。这三个计数是字节数,不是包数,数字变化越快说明该连接越活跃。
第二步,打开 QQ 聊天窗口,给目标好友发一条消息。发完之后立刻看资源监视器的 TCP 连接列表,按“发送”列排序,看哪一行的发送数字在跳动。通常 QQ.exe 对应的那条到腾讯服务器的连接会一直有数据,但和好友直连的那条只在你发消息时才会有明显增长。
第三步,等好友回复。好友回复后,观察“接收”列,哪一行的接收数字突然增加,那一行的远程地址就是好友的 IP。如果列表里有多条 QQ.exe 的连接,优先看远程端口不是 443 和 80 的那些,因为 443 通常是 HTTPS 到腾讯服务器的连接。
# 如果你想把捕获到的 IP 做批量归属地查询,可以用这个脚本 import requests import time def query_ip_location(ip): """查询 IP 归属地,使用公开接口""" url = f"https://whois.pconline.com.cn/ipJson.jsp?ip={ip}&json=true" try: resp = requests.get(url, timeout=5) data = resp.json() return f"{data.get('pro','')} {data.get('city','')} {data.get('addr','')}" except Exception as e: return f"查询失败: {e}" # 替换成你从资源监视器里拿到的 IP target_ip = "113.108.xx.xx" print(query_ip_location(target_ip))这段脚本做的是把手工在百度搜索 IP 的动作自动化。query_ip_location函数调用了一个公开的 IP 归属地接口,返回省份、城市和运营商信息。timeout=5防止请求卡死,try-except捕获网络异常。你拿到 IP 后把target_ip替换掉就能跑。注意这类公开接口有频率限制,不要短时间内大量调用。
3.3 连接状态与筛选技巧
资源监视器的 TCP 连接列表里,“状态”列的值有 ESTABLISHED、LISTENING、TIME_WAIT 等。你只关心 ESTABLISHED 的行,因为只有已建立的连接才代表当前活跃的通信。LISTENING 是本机在监听端口,TIME_WAIT 是连接已关闭但套接字还没释放,这两种都不包含好友的实时 IP。
另一个筛选技巧是按 PID 排序。QQ 主程序的 PID 在任务管理器的详细信息标签里能看到,找到 QQ.exe 对应的 PID,然后在资源监视器里只看这个 PID 的行,能排除掉浏览器、微信等其他程序的干扰。如果 QQ 有多个进程(比如 QQ.exe 和 QQProtect.exe),优先看 QQ.exe,聊天数据的收发走的是主进程。
注意:如果好友和你处于同一个局域网(比如同一个公司网络),你看到的远程地址可能是内网地址(192.168.x.x 或 10.x.x.x),这时候查归属地没有意义,因为内网地址不参与公网路由。
3.4 从 IP 到地理位置的查询方法
拿到公网 IP 后,查询归属地的方式有几种。文档里用的是百度搜索,直接搜 IP 地址,百度会在结果页顶部显示归属地卡片。这个方法最快,但信息比较简略,通常只到城市。更详细的方式是用专门的 IP 查询网站,比如 ip138、ipip.net,它们会显示运营商、AS 号、甚至区县级别的粗略位置。如果你需要批量查询或者集成到脚本里,用上面那段 Python 代码调接口更合适。
需要强调的是,IP 归属地查询的精度受限于 IP 库的更新频率和运营商分配策略。同一个 IP 段可能被多个城市共用,特别是移动宽带和部分二级运营商。你查到的“北京”可能只是该 IP 段在运营商那里的注册地,不代表对方此刻就在北京。把 IP 归属地当作参考信息,不要当作确凿证据。
4. 避坑与排查:为什么你抓不到好友的 IP
4.1 现象:TCP 连接列表里全是腾讯的 IP,找不到好友的
原因:QQ 的聊天消息默认走腾讯服务器中转,只有双方 NAT 类型允许打洞时才会建立直连。如果你的网络环境是对称 NAT,或者好友那边限制了直连,所有消息都经过服务器转发,你自然看不到好友的真实 IP。
解决:先确认双方是否在同一网络环境下能直连。可以尝试用其他 P2P 工具测试 NAT 类型。如果确实无法直连,资源监视器这条路走不通,文档里的方法就不适用。这不是操作问题,是网络拓扑的限制。
4.2 现象:发送/接收计数列勾选了但数字不变化
原因:资源监视器的刷新有延迟,默认刷新间隔是 1 秒,但计数更新可能滞后。另外,如果你勾选列之后没有重新排序,数字可能在列表底部你看不到的位置。
解决:勾选列之后,点击“发送”或“接收”列头进行排序,让活跃的连接排到最上面。发消息后等 2 到 3 秒再看,不要频繁切换窗口。如果数字始终不动,检查 QQ 是否在后台被限速或者进入了省电模式。
4.3 现象:查到的 IP 归属地显示的是腾讯机房
原因:你选错了连接。QQ 和腾讯服务器之间始终保持着长连接,这些连接的远程地址是腾讯的 IP,归属地会显示深圳、上海等腾讯机房所在地。好友的直连 IP 通常是一个普通的宽带 IP,归属地显示为某个城市。
解决:在 TCP 连接列表里,按远程端口筛选。腾讯服务器的连接通常走 443、80、8080 等标准端口,而 P2P 直连的远程端口是随机的高位端口(比如 50000 以上)。优先看远程端口大于 1024 且不是 443 的行。
4.4 现象:好友回复后接收计数增加了,但远程地址是内网 IP
原因:你和好友在同一个局域网内,QQ 检测到直连条件满足,走了内网直连。这时候远程地址是对方的内网 IP,查归属地没有意义。
解决:这种情况说明你们物理位置很近,不需要查归属地。如果你确实需要对方的公网 IP,让好友断开 WiFi 用手机热点,或者换一个不同网络的环境再试。
4.5 现象:资源监视器里看不到 QQ.exe 的任何连接
原因:QQ 可能以管理员权限运行,而资源监视器没有以管理员权限打开,导致看不到高权限进程的网络活动。或者 QQ 版本较新,进程名不是 QQ.exe。
解决:关闭资源监视器,右键以管理员身份重新打开。然后在任务管理器里确认 QQ 的实际进程名,可能是 QQScLauncher.exe 或 QQExternal.exe。在资源监视器的进程列表里找到对应名称再观察。
5. 进阶验证:用 PowerShell 做连接快照与差异对比
资源监视器是实时刷新的,你很难同时对比“发消息前”和“发消息后”的连接变化。更可靠的做法是用 PowerShell 做两次连接快照,然后取差集。这样能精确锁定哪条连接是在你发消息之后才出现的,排除掉所有背景连接的干扰。
# 第一次快照:发消息之前执行 Get-NetTCPConnection -State Established | Where-Object { $_.OwningProcess -eq (Get-Process QQ).Id } | Select-Object RemoteAddress, RemotePort, CreationTime | Export-Csv -Path "$env:TEMP\qq_before.csv" -NoTypeInformation # 然后给好友发消息,等对方回复 # 第二次快照:收到回复后执行 Get-NetTCPConnection -State Established | Where-Object { $_.OwningProcess -eq (Get-Process QQ).Id } | Select-Object RemoteAddress, RemotePort, CreationTime | Export-Csv -Path "$env:TEMP\qq_after.csv" -NoTypeInformation # 对比两次快照,找出新增的连接 $before = Import-Csv "$env:TEMP\qq_before.csv" $after = Import-Csv "$env:TEMP\qq_after.csv" Compare-Object $before $after -Property RemoteAddress, RemotePort | Where-Object { $_.SideIndicator -eq "=>" }这段脚本的核心逻辑是:Get-NetTCPConnection获取当前所有已建立的 TCP 连接,Where-Object按 QQ 进程的 PID 过滤,Export-Csv把结果存成文件。两次快照之后用Compare-Object取差集,SideIndicator为=>的行就是第二次快照新增的连接,也就是你发消息之后才建立的连接。这条连接的远程地址就是好友的 IP。
参数说明:-State Established只取已建立状态的连接,排除 LISTENING 和 TIME_WAIT。(Get-Process QQ).Id动态获取 QQ 进程的 PID,避免硬编码。CreationTime列记录连接建立的时间,可以用来判断连接的新旧。如果Get-Process QQ报错,说明进程名不对,换成Get-Process | Where-Object { $_.Name -like "*QQ*" }先确认。
这个方法的优势在于可重复、可记录、可对比。你不需要盯着资源监视器的刷新,跑两次脚本就能拿到确定的结果。我后来把这段脚本存成了一个 ps1 文件,每次需要排查网络连接的时候直接跑,比手工在 GUI 里翻列表快得多。从那以后我每次做网络排查都强制走一遍快照对比,再也没出现过“盯着屏幕看半天找不到是哪条连接”的情况。希望帮到你。
本文还有配套的精品资源,点击获取