关于

一次请求,一个地址,一个城市级的位置,以及一份如实列出的局限。

页面返回的内容

浏览器请求 /api/ip,服务器返回四组字段:

分组字段来源
地址IP,IPv4 或 IPv6,私有或公网连接本身,由服务器读取
位置国家、地区、城市、邮政编码、纬度、经度、时区IP 数据库
网络ISP、组织、ASN、域名IP 数据库的连接记录
解读住宅、移动、托管或企业;可能为动态或未知根据 ISP 和组织名称推断

请求路径

  1. 页面发送同源的 GET /api/ip。请求体和查询字符串中都不携带地址。
  2. Nginx 将请求转交给应用,并在边缘代理解析出客户端地址后,通过 X-Real-IP 提供该地址。
  3. 应用只接受来自该请求头的地址,用严格的 IP 解析器校验,并拒绝私有或保留地址段。
  4. 对于公网地址,服务器向 ipwho.is 查询位置和连接字段,超时时间为四秒。
  5. 结果在服务器内存中缓存最多 1 小时,并以 JSON 返回。页面仅用文本节点渲染。

主接口刻意不提供地址输入框:它只报告发起调用的连接。双栈网络中,页面还会从 IPv4 回显服务取得浏览器的 IPv4 地址,并携带短时令牌、同源校验和每客户端每日限额,将其发送到单独的接口;它不是通用的地址查询服务。

连接类型如何推断

数据库并不发布“住宅”标记。页面会在 ISP、组织和域名字段中查找关键词:

信号示例标签
托管和云服务名称Amazon、AWS、Google Cloud、Microsoft Azure、DigitalOcean、Hetzner、Cloudflare、数据中心或托管服务商数据中心 / 云
住宅接入名称Broadband、fibre、cable、DSL、Comcast、Charter、Verizon、China Telecom、China Unicom住宅宽带
移动接入名称Mobile、cellular、wireless、LTE、5G移动网络
其他具名网络公司、大学或公共机构企业网络
无可用名称空的连接记录未知

这是关键词启发式判断,而非注册信息查询。住宅线路的转售商可能显示为企业,移动运营商也可能销售家庭宽带,公共 DNS 解析器也可能位于 ISP 的地址段上。该标签只是对网络类型的提示,并不代表对用户的定性。

为何固定 / 非固定标记较为谨慎

没有公开数据库记录 ISP 是否为某条线路分配了静态地址。因此页面报告三种状态之一:

这些都不是确凿证据。住宅用户可能付费购买了静态 IP;企业也可能使用 DHCP。唯一确定的检查方式是查看 ISP 的账户记录,或连续几天观察路由器的 WAN 地址。

准确性与盲区

速率限制与缓存

上游免费接口允许本服务器每天发起有限次数的请求。页面通过三种方式降低负载:每个地址缓存 1 小时;限制并发上游请求;当服务繁忙或每日额度用尽时,仅返回 IP 并附上提示。刷新页面通常命中内存缓存,而非请求服务商。

为何页面没有地图

地图上的标记看起来精确。底层数据是城市中心点,因此标记会是一种虚假的承诺。坐标以文本形式打印,并在旁边注明精度限制。地图还需要第三方瓦片服务器,那会看到访客的地址,并向页面添加脚本。

更正

如果某个网络被错误标注或某个字段缺失,修复应落在分类表或响应映射中,而不是手工编辑页面。用于检查改动的示例包括:一个 Google 地址(数据中心)、一个 China Telecom 地址(住宅)、一个私有地址(不查询)以及一个连接记录为空的地址(未知)。