简短回答
没有任何一项检查能单独证明某个代理是移动代理或住宅代理。最有力的信号是出口 IP 所属的网络:自治系统号(ASN)、它的注册方,以及这是什么类型的网络。用 RDAP 和 PeeringDB 查这些信息,再对比至少两个 IP 数据库,因为它们的结果并不一致。在我们的测试中,数据中心 IP 在每一项检查里都暴露了身份;而一条 Singtel 移动线路则根据所连接的网站,出现在两个不同的网络中。
我们在 2026 年 11 月 8 日 UTC 12:06 至 13:18 测试了:
- 测试机: ipvolt 位于芬兰赫尔辛基的服务器,运行 Ubuntu,使用 curl 8.18.0 和 dig 9.20。
- 数据中心样本: 这台服务器自己的 IPv4 地址,属于一家托管公司。
- 移动样本: ipvolt 在新加坡 Singtel 网络上的测试线路,以带用户名和密码的 HTTP 及 SOCKS5 代理使用,并轮换 IP 10 次。
- 住宅样本: 没有。我们没有可供测试的家庭宽带,因此下文关于住宅 IP 的内容都不来自我们自己的测量。
- 脱敏: 本文和结果文件中的 IPv4 地址都截断到 /24(203.0.113.x);结果文件列出了每一次查询及其时间。
下面的命令使用 203.0.113.7,这是专供文档使用的保留地址。请换成你的代理出口 IP。
最快的检查:ipvolt 代理检测工具
把代理以 host:port:user:pass 或 socks5:// URL 的形式粘贴到免费的代理检测工具。它会通过代理连接到自己的回显服务器,并为每个代理显示:
- 状态: 通过它能否使用 HTTP、HTTPS 和 IPv6。协议区别见 HTTP 与 SOCKS5 代理。
- 出口 IP: 回显服务器看到的地址。
- ASN 和网络: 来自 DB-IP Lite。
- 网络类型: 托管或数据中心、移动运营商、运营商(移动和固定线路)、互联网服务商或未知。这是根据 ASN 做出的估计,依据已知网络列表或网络名称中的词,并不检测设备本身。
- 位置: DB-IP Lite 给出的出口 IP 所在城市和国家。
- 请求头: 代理是否添加了会暴露你自己 IP 的请求头。
我们把两个样本直接交给检测工具背后的服务(也就是页面提交列表的那个服务),结果如下:
| 数据中心(ipvolt 的服务器) | 移动线路(Singtel 测试线路) | |
|---|---|---|
| 状态 | 未检测:检测工具拒绝检测 ipvolt 自己的服务器,所以我们直接用它的查询代码查了这个地址 | HTTP 和 SOCKS5 均可用;不支持 IPv6 |
| 出口 IP | 204.168.249.x | 165.173.26.x |
| ASN 和网络 | AS24940,Hetzner Online GmbH | AS56300,MYREPUBLIC LIMITED |
| 网络类型 | 托管或数据中心(估计) | 互联网服务商(估计) |
| 位置 | 芬兰赫尔辛基 | 新加坡(Toa Payoh New Town) |
| 添加的请求头 | 未检测 | 没有,你的 IP 没有被转发 |
数据中心这一列符合预期,移动线路这一列则不然。在全部四次检测中(12:06 一次,12:58 至 12:59 UTC 之间三次),检测工具的回显服务器看到线路从 165.173.26.x 出口,它属于 AS56300,是登记在 MYREPUBLIC LIMITED 名下的地址段,所以估计结果是“互联网服务商”而不是“移动运营商”。在同一个小时里,另外四个网站通过同一条线路看到的都是 Singtel Mobile 地址,而检测工具的查询代码会把这些地址标为“移动运营商”。详见第 5 节。只检查一个目的地是不够的。
逐项检查
1. ASN 和 RDAP:这是谁的网络?
自治系统是"a connected group of one or more IP prefixes run by one or more network operators which has a SINGLE and CLEARLY DEFINED routing policy"(RFC 1930),即由一个或多个网络运营商运行、具有单一且明确路由策略的一组 IP 前缀。先查出是哪个自治系统在宣告这个出口 IP。RIPEstat 的 network-info 接口会根据 RIPE 的路由数据返回所在的路由前缀和宣告它的 ASN:
curl -s "https://stat.ripe.net/data/network-info/data.json?resource=203.0.113.7"然后向注册机构查询地址和 ASN 的持有者。RDAP 是注册机构提供这些数据的 JSON 接口,是 WHOIS 的替代方案(APNIC)。IANA 发布的引导文件列出了每个地址段由哪个注册机构的 RDAP 服务器负责(RFC 9224)。RIPE NCC 的服务器还会用 HTTP 301 把其他地区的查询重定向到正确的注册机构(RIPE Database 文档),所以加上 -L 用一个 URL 就够了:
curl -sL "https://rdap.db.ripe.net/ip/203.0.113.7"
curl -sL "https://rdap.db.ripe.net/autnum/64496"如果还想用离线数据核对,iptoasn.com 数据集在一个文件里把地址范围映射到 ASN。我们用的是 2026 年 11 月 1 日 的版本。
查询结果:
| 数据中心 | 移动线路 | |
|---|---|---|
| 前缀和 ASN(RIPEstat) | 204.168.128.0/17,AS24940 | 119.234.24.0/21,AS45143 |
| AS 持有者(RIPEstat) | HETZNER-AS Hetzner Online GmbH | SINGTELMOBILE-AS-AP - SINGTEL MOBILE INTERNET SERVICE PROVIDER Singapore |
| RDAP 注册机构 | RIPE NCC(IANA 文件指向 ARIN,ARIN 用 HTTP 303 重定向) | APNIC(RIPE 的服务器用 HTTP 301 重定向) |
| RDAP 网络名称和地址段 | CLOUD-HEL1,204.168.240.0/20 | SINGTELMOBILE,119.234.0.0/17 |
| RDAP 持有者 | Hetzner Online GmbH | Singapore Telecom Mobile Pte Ltd |
| iptoasn.com | AS24940,国家 DE | AS45143,国家 SG |
移动地址段登记在 Singapore Telecom Mobile 名下,ASN 名称里带有"mobile"。数据中心地址段登记在一家托管公司名下。名称只是名称,但这是首先应该拿来和代理宣传类型对比的信息。
有一个请求说明了网络类型在实际中的影响。rdap.org 是一个把 RDAP 查询转发到正确注册机构的公共服务,我们每次从数据中心服务器访问(12:06、12:56 和 13:15 UTC),它都返回 Cloudflare 的 403 页面。而在 13:15 通过移动线路发出的同一请求,无论走 HTTP 还是 SOCKS5,都得到了指向注册机构的 302 重定向。
2. PeeringDB:这是什么类型的网络?
在 PeeringDB 上,各个网络向其他网络介绍自己。每个条目都有网络类型,例如 Cable/DSL/ISP、Content 或 Enterprise。PeeringDB 自己说这些数据是"self-declared and might be rarely updated"(由网络自行声明,可能很少更新),并且"We haven't commissioned research into the accuracy of the data"(PeeringDB)。它的 API 无需账号即可查询:
curl -s "https://www.peeringdb.com/api/net?asn=64496"看返回中的 info_types 字段。我们的结果:
- AS24940(数据中心): 条目名为 Hetzner Online,
info_types为 Content,范围为 Europe。 - AS45143(Singtel Mobile): 没有条目;API 返回 HTTP 404。
- AS56300(MyRepublic,即 ipvolt 检测工具看到的网络,见第 5 节): 条目名为 MyRepublic Singapore,
info_types为 Cable/DSL/ISP、Content 和 NSP。
一个把自己标为 Content 的托管 ASN 符合数据中心的特征。很多接入网络在 PeeringDB 上根本没有条目,所以没有条目本身说明不了任何问题。
3. 反向 DNS:这个地址怎么称呼自己?
PTR 记录在 in-addr.arpa 域下把地址映射回一个名称(RFC 1035 第 3.5 节)。是否有 PTR、内容是什么,由负责该地址段反向区域的一方决定。
dig -x 203.0.113.7 +short- 数据中心:
static.x.249.168.204.clients.your-server.de,名称里是倒序书写的地址(这里隐去了最后一段)。该名称能解析回同一地址,反向区域的主域名服务器是托管公司的ns1.your-server.de。 - 移动线路: 该线路使用过的 17 个 Singtel 地址都没有 PTR 记录(NXDOMAIN)。对 119.234 开头的地址,回答来自 APNIC 自己的
119.in-addr.arpa区域,说明运营商没有为它们设置反向区域。唯一的 MyRepublic 地址有 PTR 名称165-173-26-x.myrepublic.com.sg,但这个名称无法正向解析回地址。
带有"static""server"或托管公司域名的名称指向服务器。没有名称在移动网络中很常见,在许多其他网络中也一样,所以单凭这一点证明不了什么。
4. IP 数据库:免费版怎么说?
我们向三个免费数据源查询了每个地址。没有一个返回连接类型或使用类型:
- ipinfo,不带令牌的 JSON API: ASN 和网络名称、有 PTR 时的主机名,以及城市。没有类型字段。它免费的 Lite API 返回 ASN、AS 名称、AS 域名、国家和大洲(IPinfo 文档)。
- IP2Location.io,不带密钥: ASN、网络名称、位置和
is_proxy标志。它的usage_type字段使用 MOB(Mobile ISP)、ISP(Fixed Line ISP)和 DCH(Data Center/Web Hosting/Transit)等代码(IP2Location.io 文档),只在付费套餐中提供;免费套餐的代理检测只覆盖公开的开放代理(IP2Location.io 价格)。 - DB-IP Lite,即 ipvolt 代理检测工具使用的数据库(2026 年 11 月 1 日 构建):ASN、网络名称和城市。它的 IP to ASN 文件只列出每个地址范围的起止地址、AS 号和 AS 组织(DB-IP)。
MaxMind 把连接类型(Cable/DSL、Cellular、Corporate、Satellite)作为单独的数据库出售(MaxMind);我们没有购买。
免费数据源不一致的地方:
- 数据中心在哪里。 ipinfo 和 DB-IP Lite 把 204.168.249.x 定位在芬兰赫尔辛基,服务器确实在那里;IP2Location.io 把它定位在荷兰阿姆斯特丹。iptoasn.com 为该地址范围给出的国家是 DE,这是网络的注册国家,而不是服务器所在地。
- 移动线路在哪里。 ipinfo 和 IP2Location.io 对每个 Singtel 地址都回答新加坡。DB-IP Lite 为 17 个地址给出了 11 个不同的地点,从 Punggol 到 Tanjong Pagar。对于 MyRepublic 地址,ipinfo 给出 Yishun New Town,DB-IP Lite 给出 Toa Payoh New Town。
- 是不是代理。 对我们查询的每个地址,包括这条代理线路的每个出口,IP2Location.io 都返回
is_proxy: false。
5. 轮换与 CGNAT(仅移动代理)
轮换会让设备重新连接运营商,由运营商分配新的公网 IP;ipvolt 设备上的做法见 IP 轮换。我们的测试线路每 4 分钟只接受一次轮换,更早的请求会得到 HTTP 429,所以我们每隔 250 秒轮换一次,共 10 次。
10 次轮换请求全部被接受,每次 ipify 都在 6.3 到 7.7 秒后看到新地址(中位数 6.5 秒)。10 个新地址各不相同,分布在 10 个不同的 /24 地址块中。iptoasn.com 把每一个都归入 AS45143,RDAP 把每一个都标为 SINGTELMOBILE(APNIC),RIPEstat 对它返回了数据的 8 个地址也给出相同结论。它们都没有 PTR 记录,ipinfo 和 IP2Location.io 把它们全部定位在新加坡。地址在不轮换时也会变化:10 轮中有 5 轮,新地址和几秒后的三次检查结果并不完全一致。
运营商可以用运营商级 NAT(CGNAT)让许多用户共用一个公网 IPv4 地址。RFC 6598 把 100.64.0.0/10 保留为"Shared Address Space",供运营商为 CGN 设备与用户设备之间的链路编址(RFC 6598)。在这种 NAT 后面,"A public IPv4 address in the CGN pool is shared by several subscribers at the same time",即 CGN 地址池中的一个公网地址同时被多个用户共用(RFC 6269)。这有两点影响:
- 封锁会波及共用地址的所有人。 RFC 6269 指出,在登录失败后限制一个共享地址,"may block out other users who have not made any previous attempts"。
- 定位很粗略。 "A subscriber behind a CGN geo-locates to wherever the prefix of the CGN appears to be"(RFC 6269 第 7 节):CGN 后面的用户会被定位到 CGN 前缀所在的位置。
从外部看不到 CGNAT。通过代理,我们只看到了公网地址,从未看到 100.64.0.0/10 中的地址。我们能看到的是出口的表现:
第 10 次轮换之后,我们没有再轮换,而是在大约 90 秒内向四个回显服务(ipify、icanhazip、ifconfig.me 和 checkip.amazonaws.com)发送了 24 个请求,其中 16 个走 HTTP,8 个走 SOCKS5。它们来自两个公网地址,都属于 Singtel Mobile(AS45143):16 个请求来自 119.234.48.x,8 个来自 119.234.44.x。所有 SOCKS5 请求都使用 119.234.48.x;HTTP 请求则在两者之间切换。
与此同时,ipvolt 检测工具在每次检测中看到的都是 MyRepublic 的 AS56300 中的 165.173.26.x,HTTP 和 SOCKS5 都是如此。这个地址在 myrepublic.com.sg 下有 PTR 名称。所以同一条线路至少通过两个网络中的三个公网地址访问互联网,网站看到哪个地址取决于是哪个网站。同时出现多个 Singtel 地址,符合运营商 NAT 从地址池中给不同连接分配不同地址的情况,但我们看不到这个 NAT,也无法从外部判断为什么有一个目的地看到的是另一个网络。
结果对照
| 检查 | 数据中心(ipvolt 的服务器,赫尔辛基) | 移动线路(Singtel 测试线路,新加坡) |
|---|---|---|
| ASN 和持有者 | AS24940,Hetzner Online GmbH | AS45143,Singapore Telecom Mobile Pte Ltd(17 个地址);AS56300,MYREPUBLIC LIMITED(1 个地址,只有 ipvolt 检测工具看到) |
| RDAP 网络名称 | CLOUD-HEL1(RIPE NCC) | SINGTELMOBILE(APNIC);检测工具看到的地址为 MYREPUBLIC-SG |
| PeeringDB 类型 | Content | AS45143 没有条目;AS56300:Cable/DSL/ISP、Content、NSP |
| 反向 DNS | static.x.249.168.204.clients.your-server.de,可解析回原地址 | 所有 Singtel 地址都没有;检测工具看到的地址为 165-173-26-x.myrepublic.com.sg |
| ipvolt 检测工具 | 托管或数据中心(仅查询代码) | 4 次检测都是互联网服务商(出口在 AS56300) |
| ipinfo,不带令牌 | 赫尔辛基;没有类型字段 | 新加坡;没有类型字段 |
| IP2Location.io,不带密钥 | 阿姆斯特丹;is_proxy 为 false;没有 usage_type | 新加坡;is_proxy 为 false;没有 usage_type |
| DB-IP Lite | 赫尔辛基 | 新加坡境内 11 个不同地点 |
| rdap.org | HTTP 403(Cloudflare) | HTTP 302 重定向到注册机构 |
| 10 次轮换 | 不适用 | 10 个新地址,全部在 AS45143,中位数 6.5 秒 |
| 同时出现的地址 | 一个 | 24 个请求中有两个 Singtel 地址,另有检测工具看到的 MyRepublic 地址 |
没有住宅这一列:我们没有可供测试的家庭宽带。
"移动"或"住宅"代理名不副实的迹象
以下每一条都来自我们的测试或上面的来源:
- ASN 属于托管公司。 我们的数据中心地址位于 Hetzner Online 的 AS24940。RDAP 把它所在的地址段命名为 CLOUD-HEL1,PeeringDB 把这个网络列为 Content。
- 反向 DNS 指向服务器。 我们看到的是
static.x.249.168.204.clients.your-server.de,一个托管公司域名下的静态名称。 - 拒绝数据中心地址段的网站会拒绝它。 rdap.org 给我们的服务器返回了 Cloudflare 403,而给移动线路返回了重定向。
- 出口网络随目的地而变。 作为移动线路出售的代理,访问任何网站都应该从运营商网络出口。我们的线路访问四个回显服务时来自 Singtel Mobile,访问 ipvolt 检测工具时却来自 MyRepublic 的 AS56300,其 PeeringDB 类型为 Cable/DSL/ISP、Content 和 NSP。至少用两个服务检查出口 IP,并查询看到的每一个 ASN。
- 轮换后的地址离开了运营商。 在我们的线路上,10 个新地址都留在 AS45143。如果新地址落在托管 ASN 中,就说明这些“移动”IP 并不在运营商网络里。
第 1 至 3 条同样适用于“住宅”代理。我们没有住宅线路可以用来验证。
这些检查无法告诉你的事
- 设备本身。 ASN 描述的是网络,而不是网络中的设备。许多运营商用同一个 ASN 同时服务手机和家庭线路,任何外部查询都无法判断请求来自哪一种。所以代理检测工具有"运营商(移动和固定线路)"这一类型,移动代理与住宅代理也把两者视为有重叠的类别。
- 自我描述是否准确。 PeeringDB 的类型由各网络自行声明,RDAP 名称是持有者自己登记的,而且很多接入网络在 PeeringDB 上没有条目。AS45143 就没有。
- 数据库之间是否一致。 免费数据库彼此并不一致:同一天里,其中两个把我们的数据中心地址放在了两个不同的国家。
- 免费获取连接类型。 我们用过的免费版都不返回这一字段。
- CGNAT。 从外部看不到它。我们看到的是出口的表现,而不是运营商的 NAT。
- 你没有测试的路径。 代理可以把不同目的地经由不同路线发送。每项检查只能说明它自己建立的那条连接。
- 我们的样本。 一个运营商的一条移动线路、一个数据中心地址、一天时间,没有住宅线路。
**立即检测代理:**把代理粘贴到 ipvolt 免费的代理检测工具,再用上面的命令查询它显示的 ASN。
需要特定国家的移动 IP? 专属移动代理每天 $9 起。
参考来源
- RFC 1930:自治系统(AS)的创建、选择与注册指南
- RIPEstat Data API:network-info
- RFC 9224:查找权威 RDAP 服务
- IANA:IPv4 地址分配的 RDAP 引导文件
- RIPE Database 文档:注册数据访问协议(RDAP)
- APNIC:注册数据访问协议(RDAP)
- PeeringDB API 规范
- PeeringDB:Network Type: What's it for? How to use it?
- RFC 1035:域名的实现与规范(第 3.5 节,IN-ADDR.ARPA)
- iptoasn.com:IP 到 ASN 数据集
- IPinfo Lite API 文档
- IP2Location.io API 文档
- IP2Location.io 价格与套餐
- DB-IP:IP to ASN Lite
- MaxMind:GeoIP Connection Type 数据库
- RFC 6598:IANA 为共享地址空间保留的 IPv4 前缀
- RFC 6269:IP 地址共享带来的问题