一、为什么公网 IP 查询是网络排障的第一步

当我们访问一个网站时,对方服务端通常会看到这些信息:

信息 含义 排障价值
公网 IP 当前请求从哪个公网地址出去 判断是否走代理、是否切换出口
国家/地区 IP 数据库识别出的地理位置 判断节点地区是否符合预期
运营商/组织 IP 所属网络实体 判断是家庭宽带、云厂商、移动网络还是机房
ASN 自治系统编号 判断流量属于哪个网络自治域
网络属性 住宅、移动、机房、云服务等 判断是否容易触发平台风控
反向解析 IP 对应的 PTR 记录 辅助判断主机或网络来源

很多人排查代理时只看客户端显示“已连接”,但这并不等于所有流量都按预期出去了。比较稳妥的做法是:

  1. 先查当前公网 IP;
  2. 再看 IP 地区和运营商;
  3. 再看 ASN 是否符合节点或线路预期;
  4. 再做 DNS 泄漏、WebRTC 泄漏、路由命中排查;
  5. 最后再分析目标网站本身是否限制了某类网络环境。

例如你选择的是日本节点,但公网 IP 显示中国大陆家庭宽带,这通常说明代理没有生效、浏览器走了直连,或者分流规则把当前网站放到了直连侧。

如果公网 IP 显示日本,但 DNS 出口仍然显示本地运营商,那么问题可能不是代理出口,而是 DNS 没有被接管。

如果公网 IP 和 DNS 都是海外节点,但 WebRTC 暴露了本地内网或真实出口,就需要继续检查浏览器 WebRTC 策略。

二、公网 IP、内网 IP、出口 IP不是一回事

在 Windows 里运行 ipconfig,你经常看到的是类似这样的地址:

IPv4 地址 . . . . . . . . . . . . : 192.168.1.23
默认网关 . . . . . . . . . . . . : 192.168.1.1

这个 192.168.1.23 不是公网 IP,而是局域网 IP。它只在你的家庭或公司内网里有效,网站服务端一般看不到它。

常见内网地址段包括:

10.0.0.0/8
172.16.0.0/12
192.168.0.0/16

真正对外访问网站时,流量通常会经过路由器 NAT,再由运营商分配的出口地址访问互联网。网站看到的是公网出口,而不是你电脑网卡上的内网地址。

如果你打开代理、VPN 或 TUN 模式,访问路径又会变成:

电脑应用
  -> 本地代理或 TUN 虚拟网卡
  -> 加速/代理节点
  -> 节点公网出口
  -> 目标网站

这时目标网站看到的应该是节点公网 IP,而不是你家宽带的公网 IP。

所以公网 IP 查询的价值就在于:它是站在“目标网站视角”看你当前的网络出口。

三、先用浏览器查询:看四个关键字段

打开公网 IP 查询页面时,不要只看 IP 数字本身,建议重点看四个字段:

字段 怎么看
IP 地址 是否和上一次一致,是否随着节点切换而变化
国家/城市 是否符合当前选择的出口地区
运营商/组织 是否是云厂商、住宅宽带、移动网络或节点运营商
ASN 是否属于预期网络自治系统

举个例子:

IP 地址:20.194.xxx.xxx
国家/地区:日本 / JP
城市:Tokyo
运营商:Microsoft Corporation
组织:Microsoft Azure Cloud
ASN:AS8075
网络属性:机房/云服务

这组信息说明当前出口大概率是日本东京的云服务网络,而不是本地家庭宽带。

如果你正在排查 AI 工具、GitHub、外服游戏、国际 SaaS 或跨境办公工具,公网 IP 查询可以先回答三个问题:

  1. 当前是否已经切到代理出口;
  2. 当前出口地区是否符合预期;
  3. 当前出口网络属性是否可能触发目标服务风控。

四、用命令行交叉验证出口 IP

浏览器查询很直观,但排障时最好再用命令行验证一次。因为浏览器可能受扩展、缓存、PAC、系统代理、应用内代理影响,而命令行工具通常更容易控制变量。

1. PowerShell 查询当前出口

Windows 下可以使用:

Invoke-RestMethod -Uri "https://api.ipify.org?format=json"

返回示例:

{
  "ip": "203.0.113.10"
}

如果要同时看多个接口返回是否一致,可以写成:

$apis = @(
  "https://api.ipify.org?format=json",
  "https://ifconfig.me/all.json",
  "https://ipinfo.io/json"
)

foreach ($api in $apis) {
  try {
    Write-Host "`n== $api =="
    Invoke-RestMethod -Uri $api -TimeoutSec 10
  } catch {
    Write-Host "request failed: $($_.Exception.Message)"
  }
}

如果多个查询源返回同一个公网 IP,说明出口判断比较稳定。如果不同查询源返回结果不一致,要继续检查代理规则、IPv6、DNS、浏览器代理、系统代理是否存在分流。

2. curl 查询 HTTP 出口

Linux、macOS 或 Windows 新版本都可以使用 curl

curl -s https://api.ipify.org
curl -s https://ifconfig.me
curl -s https://ipinfo.io/json

为了观察连接耗时,可以加上 -w

curl -o /dev/null -s -w "dns=%{time_namelookup}s connect=%{time_connect}s tls=%{time_appconnect}s total=%{time_total}s ip=%{remote_ip}\n" https://example.com

这些指标的含义是:

指标 含义
time_namelookup DNS 解析耗时
time_connect TCP 连接建立耗时
time_appconnect TLS 握手完成耗时
time_total 整个请求总耗时
remote_ip 实际连接到的远端 IP

如果公网 IP 已经切换,但访问某个网站仍然慢,就可以继续看 DNS、TCP、TLS 是哪个阶段慢。

3. 指定代理测试

如果你本地有 HTTP 代理端口,例如 127.0.0.1:7890,可以这样验证:

curl -x http://127.0.0.1:7890 -s https://api.ipify.org

再和直连结果对比:

curl -s https://api.ipify.org

如果两者返回相同,可能说明:

  1. 系统本来已经全局接管;
  2. 代理没有真正生效;
  3. 当前节点出口刚好和直连出口相同;
  4. 命令行工具没有使用你以为的代理配置。

这时要进一步检查客户端模式、路由规则和系统代理。

五、用 Python 写一个出口检测脚本

排障时经常需要重复检查 IP 是否变化,手动刷新网页不够方便。可以写一个简单脚本,每隔几秒查询一次出口 IP。

import time
import requests

URLS = [
    "https://api.ipify.org?format=json",
    "https://ipinfo.io/json",
]

def fetch(url):
    try:
        r = requests.get(url, timeout=8)
        return r.status_code, r.text[:300]
    except Exception as e:
        return "ERR", str(e)

if __name__ == "__main__":
    while True:
        print("=" * 60)
        for url in URLS:
            status, body = fetch(url)
            print(url)
            print(status, body)
        time.sleep(10)

运行方式:

python ip_watch.py

你可以边切换节点、边观察脚本输出。如果节点切换后公网 IP 没有变化,通常说明配置没有重新加载,或者当前应用没有走代理链路。

如果 IP 变化了,但地区没有变化,可能是同一区域内不同出口,也可能是 IP 数据库更新不及时。

六、出口 IP 正确,不代表所有泄漏都解决了

公网 IP 查询只能说明“HTTP/HTTPS 请求看起来从哪里出去”,但不能单独证明网络完全没有泄漏。实际排查建议至少做三组检测:

检测项 作用
公网 IP 查询 判断网站看到的出口
DNS 泄漏测试 判断域名解析请求从哪里出去
WebRTC 泄漏测试 判断浏览器是否暴露本地或真实网络信息

典型情况如下:

情况 1:公网 IP 是代理节点,DNS 是本地运营商

这说明网页访问可能走了代理,但 DNS 查询仍然走本地网络。常见原因:

系统 DNS 没有接管
浏览器启用了安全 DNS/DoH
TUN 模式没有拦截 UDP/TCP 53
分流规则让 DNS 直连
切换模式后 DNS 缓存没有清理

排查命令:

Get-DnsClientServerAddress
Resolve-DnsName example.com
ipconfig /displaydns
ipconfig /flushdns

如果你使用全局流量或 TUN 模式,理论上 DNS 请求也应该被接管,否则目标网站可能通过 DNS 出口判断你仍然来自本地运营商网络。

情况 2:公网 IP 正确,但 WebRTC 暴露本地地址

浏览器的 WebRTC 可能绕过普通 HTTP 代理,暴露局域网 IP 或部分网络路径信息。排查方向:

关闭浏览器 WebRTC 本地 IP 暴露
使用支持 WebRTC 防泄漏的浏览器策略
检查代理客户端是否处理 UDP 流量
检查浏览器扩展是否绕过系统代理

Chrome 系浏览器可以在隐私设置、扩展或企业策略中限制 WebRTC 行为。不同浏览器实现不完全一样,建议用专门的 WebRTC 泄漏检测工具验证。

情况 3:IPv4 正确,IPv6 暴露真实出口

有些网络环境 IPv4 走代理,但 IPv6 仍然直连。表现可能是:

IPv4 查询结果是海外节点
IPv6 查询结果是本地运营商
部分网站优先访问 IPv6
同一个网站有时显示代理地区,有时显示本地地区

排查命令:

Test-NetConnection -ComputerName example.com -Port 443
ping -4 example.com
ping -6 example.com

如果代理客户端没有处理 IPv6,临时方案可以关闭系统 IPv6 或在客户端中开启 IPv6 接管。长期方案应当让代理栈明确处理 IPv4/IPv6 双栈路由。

七、从 ASN 判断网络属性和风控风险

ASN 是 Autonomous System Number,即自治系统编号。它可以粗略说明一个 IP 属于哪个网络组织。

例如:

AS4134  中国电信
AS4837  中国联通
AS9808  中国移动
AS15169 Google
AS8075  Microsoft
AS14618 Amazon
AS13335 Cloudflare

在网络排障里,ASN 至少有三个用途:

  1. 判断出口是不是预期运营商;
  2. 判断出口是不是云服务器或数据中心;
  3. 判断目标服务是否可能对该 ASN 做风控。

例如同样是日本出口,住宅宽带、移动网络、云服务器、CDN 网络的识别结果可能完全不同。某些服务对云服务器 ASN 更敏感,可能要求额外验证,甚至限制访问。

这就是为什么有时候“IP 地区正确,但服务仍然不可用”。问题未必是地区,而可能是出口网络属性。

八、结合路由表判断流量是否命中代理

公网 IP 查询发现异常后,可以继续看本机路由。

Windows:

route print
Get-NetRoute -AddressFamily IPv4 | Sort-Object RouteMetric | Select-Object -First 20

Linux:

ip route
ip rule

macOS:

netstat -rn
route -n get 1.1.1.1

重点看:

默认路由是否被 TUN 虚拟网卡接管
目标网段是否有更高优先级的直连规则
DNS 服务器地址是否仍指向本地路由器
IPv6 默认路由是否绕过代理

如果你使用规则分流模式,访问不同网站看到不同公网 IP 是正常的;如果你使用全局模式,仍然看到本地运营商出口,就要重点检查 TUN、系统代理、路由表和 DNS 接管。

九、排障流程:从现象到定位

下面给一个比较实用的流程。

第一步:确认浏览器看到的出口

打开 IP 查询页面,记录:

公网 IP:
国家/城市:
运营商/组织:
ASN:
网络属性:

切换节点后再次记录。如果数据完全不变,优先怀疑代理未生效或当前网站走了直连规则。

第二步:用命令行对照

curl -s https://api.ipify.org

如果浏览器和命令行结果不同,说明浏览器和系统命令行走的代理链路不一致。常见原因包括浏览器扩展代理、PAC 规则、系统代理未同步、应用单独代理设置。

第三步:检查 DNS 出口

Resolve-DnsName openai.com
ipconfig /displaydns
ipconfig /flushdns

如果 DNS 仍然是本地运营商,需要检查 DNS 劫持、DoH、安全 DNS、TUN DNS 规则。

第四步:检查 IPv6

curl -4 -s https://api.ipify.org
curl -6 -s https://api64.ipify.org

如果 IPv6 查询暴露本地运营商,而 IPv4 正常,就说明双栈处理不完整。

第五步:检查 WebRTC

打开 WebRTC 检测工具,看浏览器是否暴露本地网络信息。如果暴露,按浏览器策略或代理客户端设置处理。

第六步:再看目标网站问题

当公网 IP、DNS、IPv6、WebRTC 都符合预期,但目标网站仍异常,再继续分析:

目标网站是否限制云服务器 IP
目标网站是否对某地区限流
账号是否触发风控
TLS 握手是否失败
CDN 是否调度到了不合适节点

十、一个完整的检测脚本:同时看 IP、地区和耗时

下面这个脚本适合日常排查,能同时输出多个查询源的响应耗时和内容片段。

import time
import requests

CHECKS = [
    ("ipify", "https://api.ipify.org?format=json"),
    ("ipinfo", "https://ipinfo.io/json"),
    ("toolbox", "https://www.wenrugou.net/tools/my-ip"),
]

def check(name, url):
    start = time.perf_counter()
    try:
        r = requests.get(
            url,
            timeout=10,
            headers={"User-Agent": "ip-check/1.0"}
        )
        cost = (time.perf_counter() - start) * 1000
        print(f"[{name}] status={r.status_code} cost={cost:.1f}ms")
        print(r.text[:200].replace("\n", " "))
    except Exception as e:
        cost = (time.perf_counter() - start) * 1000
        print(f"[{name}] error cost={cost:.1f}ms message={e}")

if __name__ == "__main__":
    for item in CHECKS:
        check(*item)

运行:

python check_public_ip.py

这个脚本的用途不是替代专业监控,而是在你切换代理模式、切换节点、重启客户端、刷新 DNS 缓存之后,快速确认出口是否发生变化。

如果你做产品侧排障,也可以把类似逻辑放进诊断面板里:展示当前出口、DNS 出口、IPv6 状态、WebRTC 风险和路由模式,让用户不用手动复制一堆命令。

十一、常见误判和解释

1. IP 地区不准,是不是代理坏了?

不一定。IP 地理位置依赖第三方数据库,不同数据库可能更新速度不同。某些 IP 被重新分配后,可能出现地区识别延迟。

判断时不要只看一个字段,应该综合:

IP 地址是否变化
ASN 是否变化
运营商是否变化
多个查询源是否一致
目标网站实际访问是否改善

2. 为什么同一个节点,有时显示不同 IP?

可能是节点后面有多个出口,或者服务端使用负载均衡。只要地区、ASN、网络属性符合预期,一般不一定是异常。

3. 为什么公网 IP 正确,但登录仍失败?

登录失败可能和出口 IP 有关,也可能和账号状态、Cookie、浏览器指纹、TLS 指纹、访问频率、目标服务风控有关。公网 IP 查询只能排除一部分网络路径问题。

4. 为什么全局模式下还有直连出口?

常见原因:

代理客户端没有成功接管默认路由
浏览器使用了独立代理配置
某些系统服务绕过代理
IPv6 没有被接管
DNS 或 WebRTC 泄漏造成误判
规则里存在直连优先项

这种场景要结合路由表、DNS、IPv6、WebRTC 一起排查。

十二、面向普通用户的快速判断标准

如果你只是想快速判断“代理是否生效”,可以按下面这个标准:

1. 开启代理或加速客户端
2. 打开公网 IP 查询
3. 查看 IP 地区是否变成节点地区
4. 查看运营商/ASN 是否不再是本地宽带
5. 做一次 DNS 泄漏测试
6. 做一次 WebRTC 泄漏测试
7. 切换节点后重新刷新对比

如果 1 到 7 都符合预期,基本可以说明浏览器访问链路已经比较干净。

如果只有公网 IP 正确,DNS 或 WebRTC 不正确,那只能说明 HTTP 出口对了,不能说明整体网络环境完全符合预期。

十三、给开发者的产品建议

如果你正在做代理、加速器、网络工具箱或企业网络诊断产品,建议把“我的 IP”功能做成诊断入口,而不是一个孤立的小工具。

一个更完整的诊断面板可以包括:

公网 IP
国家/地区
运营商
ASN
网络属性
DNS 出口
IPv6 出口
WebRTC 暴露情况
当前代理模式
当前命中的路由规则

这样用户反馈“打不开”“很慢”“没生效”时,可以先生成一份诊断快照。客服或运维看到快照后,也能快速判断问题是在本地路由、DNS、节点出口,还是目标网站风控。

从这个角度看,稳如狗网络这类网络工具箱把公网 IP、DNS 泄漏、WebRTC 泄漏等功能放在一起,是比较符合实际排障路径的。

十四、总结

公网 IP 查询是网络排障里的第一块拼图。它不能解决所有问题,但能最快告诉你:目标网站看到的访问来源是否符合预期。

真正稳定的排障流程应该是:

公网 IP
-> 地区/运营商/ASN
-> DNS 出口
-> IPv6
-> WebRTC
-> 路由表
-> TLS/HTTP 连接耗时
-> 目标网站风控

只要按这个顺序排查,大多数“代理没生效”“节点切了但网站没变”“访问海外服务异常”“AI 工具打不开”的问题,都能从模糊感觉变成可验证的数据。

对普通用户来说,先查 IP;对开发者和运维来说,先记录出口快照。这个习惯看起来简单,但在复杂网络环境里非常有用。稳如狗网络也可以作为日常排查时的工具入口之一,配合命令行和脚本一起使用。

参考资料

  1. 我的 IP 地址查询工具:https://www.wenrugou.net/tools/my-ip
  2. 稳如狗网络工具箱:https://www.wenrugou.net/tools
  3. curl 官方文档:https://curl.se/docs/
  4. Python requests 文档:https://requests.readthedocs.io/
  5. Microsoft PowerShell 网络命令文档:https://learn.microsoft.com/powershell/

更多推荐