您需要了解的 IP 数据字段完整列表
GeoIPHub 线上响应中的每一个 IP 数据字段:10 个分组共 103 个字段,各附类型、真实示例值,并明确标出 11 个占位字段。

问起“从 IP 地址能获取哪些数据?”,多数回答只停留在“一个大致位置”。而这只是IP 情报全貌中最小的一部分。同一个地址还能告诉您它属于哪个网络,它是家庭线路还是租用的服务器,它是不是 VPN、Tor 出口或隐私中继,是否被某个封禁名单收录,以及它是不是经过验证的爬虫。关于检测类字段是如何构建的,请参阅 VPN 与代理检测的工作原理。
自七月版本以来,这份参考发生了很大变化。API 新增了三个字段,我们的表格漏掉了两个字段,一个 Tor 出口的评分从 79 变成了 100,还有几个字段返回的值与七月表格中的描述不符。下面的每个示例都来自 2026 年 10 月 22 日的 GET api.geoiphub.com/v1/lookup/{ip},您可以用免费的 IP 查询工具复现其中任何一个。

我们在 2026 年 10 月 22 日的七个线上响应中统计出 103 个字段
我们于 2026 年 10 月 22 日 04:56 到 04:57(UTC)之间抓取了七个响应,统计出 10 个分组共 103 个字段。自七月以来,有五个字段是这份列表新增的,11 个是占位符。这七个地址都是公共基础设施,选择它们是为了点亮不同的分组:
| IP | 它是什么 | 2026 年 10 月 22 日的判定 |
|---|---|---|
| 185.220.101.1 | Tor 出口,TORSERVERS-NET,汉堡 | 100,block |
| 185.213.155.73 | Mullvad VPN 服务器,法兰克福 | 100,block |
| 66.249.66.1 | Googlebot | 0,allow |
| 104.28.46.99 | Cloudflare 上的 iCloud Private Relay 出口 | 9,allow |
| 45.33.32.156 | scanme.nmap.org,一台 Linode 服务器 | 10,allow |
| 8.8.8.8 | Google 公共 DNS(任播) | 10,allow |
| 1.1.1.1 | Cloudflare DNS(任播) | 10,allow |
我们用一个小型 Node 脚本遍历了每个响应并列出所有叶子字段,其中 geo.country_names 因为是翻译映射,计作一个字段。七个响应的键完全相同,都是这 103 个。它们的分布如下:
| 分组 | 字段数 | 目前的占位符 |
|---|---|---|
| ip | 1 | 0 |
| asn | 12 | 0 |
| geo | 15 | 0 |
| whois | 8 | 0 |
| network | 7 | 3(open_ports、service、cloud_region) |
| detection | 23 | 0 |
| threat | 25 | 7(blocklist_sources、crawler.spoofed、botnet.last_seen、3 个 honeypot 字段、spammer_last_seen) |
| dns | 3 | 0 |
| scoring | 4 | 0 |
| meta | 5 | 1(sources) |
| 合计 | 103 | 11 |
有五个字段是这份列表新增的。其中三个是 10 月新增到 API 的:detection.residential_proxy_status、residential_proxy_evidence 和 residential_proxy_last_seen。它们现在已列入 API 字段参考,并标注为保留字段。另外两个,threat.crawler.unverified 和 threat.spammer_last_seen,七月时就已经在响应中了,只是我们旧的表格漏掉了。七月列表中的字段没有被移除。
有 11 个字段是占位符。我们检查了 API 的响应构建器:其中十个在每次查询时都被写成固定的空值([]、"none" 或 0),而 crawler.spoofed 背后还没有数据源。另有八个字段带有数据但属于保留字段,我们不打印它们的值:blocklist_count、两个分组中的 ptr_pattern,以及五个住宅代理字段。下面的表格会标出这两种情况。
用一次 Tor 出口查询看这 10 个分组如何配合
通过追踪一个地址,最容易理解这些分组。下面是 Tor 出口 185.220.101.1 的真实响应,仅保留了能说明其情况的字段:
{
"ip": "185.220.101.1",
"asn": {
"asn": 60729,
"org": "TORSERVERS-NET - Stiftung Erneuerbare Freiheit",
"asn_type": "hosting",
"connection_type": "datacenter",
"rpki": "valid"
},
"geo": {
"country_code": "DE",
"city": "Hamburg (Hamburg-Nord)",
"timezone": "Europe/Berlin",
"geo_confidence": 0.8
},
"whois": {
"org": "none",
"netname": "ARTIKEL10",
"status": "ASSIGNED PA",
"registered": "2017-09-12T00:00:00.000Z"
},
"network": {
"ptr_record": "none",
"fcrdns_valid": "none",
"abuse_contact": "abuse@artikel10.org"
},
"detection": {
"is_vpn": false,
"is_tor": true,
"is_hosting": true,
"is_anonymous": true,
"anonymity_level": "high"
},
"threat": {
"is_spammer": true,
"threat_types": ["spammer", "tor"],
"dnsbl_sources": ["zen.spamhaus.org"]
},
"scoring": {
"fraud_score": 100,
"confidence": 0.7402500000000001,
"recommended_action": "block",
"detection_methods": ["tor_exit", "datacenter_blocklisted", "no_ptr_datacenter", "known_spammer"]
},
"meta": {
"last_classified_at": "2026-10-22T04:56:41.816Z",
"last_scanned": "2026-10-20T18:45:48.000Z",
"latency_ms": 2
}
}
这些分组相互印证。ASN 显示为托管,detection.is_tor 来自 Tor Project 的出口列表,threat.dnsbl_sources 显示被 Spamhaus ZEN 收录,而 scoring 分组把这一切汇总为 block,并列出触发的四种方法。
响应中还暴露了一个缺口。ptr_record 是 "none",因此触发了 no_ptr_datacenter,然而同一天早晨实时执行 dig -x 185.220.101.1 却返回了一个 tor-exit 主机名。对部分地址,API 存储的反向 DNS 落后于实时记录。这个缺口也是本文七月版本中展示的 rdns_tor 不再触发的原因。分组之间的这种交叉验证,正是需要携带这么多字段的原因。下面依次介绍每个分组。
1. IP 本身(ip)
ip 字段以字符串形式回显 API 所解析的确切地址。用它来确认您查询的就是您想查询的地址,尤其是在解析 X-Forwarded-For 请求头之后,选错跳数是一个典型的错误。它也是您自己缓存的天然键。
IPv4 和 IPv6 都可接受。如果您不确定自己的公网地址是什么,我的 IP 是什么工具会连同网站能从中推断出的一切信息一起显示。
2. 网络与 ASN 数据(asn)
asn 分组告诉您是哪个网络宣告了该地址,它是您能获得的最可靠的 IP 数据之一。每个可路由的 IP 都属于一个自治系统,这来自全球路由表,而不是估算。
| 字段 | 类型 | 它告诉您什么 | 示例(8.8.8.8) |
|---|---|---|---|
| asn | number | 宣告该 IP 的自治系统编号 | 15169 |
| org | string | 运营该自治系统的组织 | GOOGLE - Google LLC |
| asn_type | string | 网络类别:isp、hosting、cdn、mobile、satellite、unknown | hosting |
| user_type | string | 使用类别,例如 hosting、residential、cellular、content_delivery_network | hosting |
| isp | string | ISP 名称(目前与 org 的值相同) | GOOGLE - Google LLC |
| domain | string | 与该网络关联的域名 | none |
| connection_type | string | datacenter、residential、mobile、satellite、unknown | datacenter |
| access_type | string | 根据 rDNS 标记读取的接入介质:fiber、cable、dsl、cellular、datacenter | datacenter |
| carrier | string | 移动运营商名称,适用于蜂窝网络 IP | none |
| mcc | string | 移动国家代码,适用于蜂窝网络 IP | none |
| mnc | string | 移动网络代码,适用于蜂窝网络 IP | none |
| rpki | string | RPKI 路由起源验证:valid、invalid、unknown | valid |
这些值随地址而变。1.1.1.1 返回 asn_type: "cdn" 和 user_type: "content_delivery_network",Googlebot 返回 user_type: "search_engine_spider"。Private Relay 出口返回 asn_type: "unknown"、connection_type: "unknown" 和 user_type: "consumer_privacy_network"。自七月以来有一处变化:8.8.8.8 现在返回 rpki: "valid",而我们文档中的示例仍显示 "invalid"。
需要关注的字段是 connection_type。消费者登录时出现的数据中心地址值得再看一眼。不过,仅仅是托管并不等于欺诈:45.33.32.156 是普通的托管,得分 10,allow。您可以用免费的数据中心 IP 检查检查任意地址,IP 地理定位 API 页面介绍了 ASN 模型。
3. 地理定位数据(geo)
geo 分组把地址放到地图上,这是最常被过度信任的分组。在我们执行的每次查询中,全部 15 个字段都带有数据。
| 字段 | 类型 | 它告诉您什么 | 示例(1.1.1.1) |
|---|---|---|---|
| country_code | string | ISO 3166-1 alpha-2 国家代码 | AU |
| country_name | string | 国家名称 | Australia |
| country_names | object | 以语言代码为键的本地化国家名称 | { en, de, es, fr, ja, ... } |
| country_geoname_id | number | 该国家的 GeoNames ID | 2077456 |
| continent_code | string | 两位字母的大洲代码 | OC |
| continent_name | string | 大洲名称 | Oceania |
| continent_geoname_id | number | 该大洲的 GeoNames ID | 6255151 |
| is_in_european_union | boolean | 该国家是否为欧盟成员国 | false |
| flag_emoji | string | 该国家的 Unicode 国旗 | 🇦🇺 |
| region | string | 州、省或地区 | New South Wales |
| city | string | 最佳估计的城市 | Sydney |
| timezone | string | IANA 时区,或 "none" | Australia/Sydney |
| latitude | number | 大致纬度 | -33.8688 |
| longitude | number | 大致经度 | 151.209 |
| geo_confidence | number | 对城市答案的置信度,0 到 1 | 0.8 |
国家是可靠的,城市则是大致的。一项关于反向 DNS 地理定位的同行评审研究,使用 2018 年的数据,测得两个商业数据库的中位误差分别为 11.1 公里和 16.7 公里。更多证据见 IP 地理定位有多准确。请把城市当作一个半径,而不是一个图钉,也永远不要用 IP 去定位某个人。
请把 geo_confidence 与 detection.is_anycast 对照着读。1.1.1.1 为悉尼返回了 0.8,但它同时也是 is_anycast: true,因为同一个地址在许多地方同时被宣告。对于任播地址,城市只是几个可能位置之一。
还出现了两处缺口。我们查询的三个美国地址(8.8.8.8、Googlebot 的 66.249.66.1 和 45.33.32.156),timezone 全部返回 "none",而城市却已填写,所以需要时请自行推导时区。另外,Private Relay 出口 104.28.46.99 被定位到安哥拉的罗安达,而 Apple 自己的出口列表把该地址段放在赞比亚的卢萨卡。对于中继,请以 Apple 列表中的行为准获取位置,我们在将中继 IP 与 Apple 出口列表进行匹配中对此有说明。
4. WHOIS 与注册数据(whois)
whois 分组说明了谁在何时注册了该地址段,数据通过 RDAP 从五个区域互联网注册机构获取。它增加了地理定位所缺失的归属层信息。
| 字段 | 类型 | 它告诉您什么 | 示例(1.1.1.1) |
|---|---|---|---|
| org | string | 注册组织 | APNIC and Cloudflare DNS Resolver project |
| country | string | 注册国家(可能与 geo 不同) | AU |
| netname | string | 网段名称 | APNIC-LABS |
| status | string | 该地址段的分配状态 | ASSIGNED PORTABLE |
| registered | string (ISO 8601) | 注册日期(若有公布) | 2011-08-11T00:00:00.000Z |
| last_changed | string (ISO 8601) | 注册机构记录上次变更的时间 | 2023-04-26T22:57:58.000Z |
| has_vpn_keywords | boolean | 注册信息文本匹配了 46 个 VPN 关键词之一 | false |
| has_hosting_keywords | boolean | 注册信息文本匹配了 27 个托管关键词之一 | false |
覆盖情况因注册机构而异。8.8.8.8 和 45.33.32.156 的 org、netname、status 和 last_changed 都返回了 "none",只填充了 country 和 registered。Mullvad 服务器的记录则很丰富:netname: "NET-31173-185-213-155-0-24",注册于 2017-07-19,最近变更于 2025-11-11。
关键词标记只是辅助证据,绝不能作为标记某个地址的唯一理由。七个地址的这两个标记全部为 false,包括 Mullvad 服务器,其注册信息中的 org 写的是“31173 Services AB infrastructure in Frankfurt, DE.”,丝毫没有提到 VPN。这就是后面几节中的服务商名单更为重要的原因。
5. 网络证据(network)
network 分组包含反向 DNS 和注册机构的滥用联系人。它的七个字段中,有三个目前是占位符。
| 字段 | 类型 | 它告诉您什么 | 示例(8.8.8.8) |
|---|---|---|---|
| ptr_record | string | 已存储的反向 DNS(PTR)主机名 | dns.google |
| ptr_pattern | string | PTR 主机的分类。保留字段:我们不打印它的值 | (不显示) |
| fcrdns_valid | boolean, or "none" | PTR 主机可解析回此 IP;未存储 PTR 时为 "none" | true |
| abuse_contact | string | 注册记录中的滥用举报地址 | network-abuse@google.com |
| open_ports | number[] | 占位符:目前始终为 [] | [] |
| service | string | 占位符:目前始终为 "none" | none |
| cloud_region | string | 占位符:目前始终为 "none" | none |
当您需要举报某项活动时,就会用到 abuse_contact,在我们的七个地址中,有五个填充了该字段。fcrdns_valid 并不是单纯的布尔值:对于没有存储 PTR 的 Tor 出口、Mullvad 服务器和中继,它返回的是字符串 "none"。用 === false 做判断的代码会漏掉这种情况。
不要未经检查就相信已存储的 PTR。对于 Googlebot 的 66.249.66.1,已存储的 ptr_record 属于相邻地址,而实时的 dig -x 返回的是 crawl-66-249-66-1.googlebot.com。同一天早晨,我们用 dig -x 确认了 8.8.8.8 的值(dns.google)和 1.1.1.1 的值(one.one.one.one)。
即使探测有应答,open_ports 也是空的。每次查询它都被写成 []。请注意,Mullvad 服务器的 wireguard_open 并不是探测结果:它表示 Mullvad 的服务器列表将该服务器标记为 WireGuard。在该字段接入之前,请从 scoring.detection_methods 中读取 openvpn_open 之类的探测结果。
6. VPN、代理、Tor 与中继检测(detection)
detection 分组回答该地址是否会匿名化其用户,以及如何匿名化。它有 23 个字段,是最大的分组,其中三个是自七月以来新增的。
| 字段 | 类型 | 它告诉您什么 | 示例(185.213.155.73,Mullvad) |
|---|---|---|---|
| is_proxy | boolean | 在主动探测中表现为开放代理 | false |
| is_vpn | boolean | 通过握手、服务商名单、ASN 或 WHOIS 判定为 VPN 基础设施 | true |
| is_tor | boolean | 在 Tor Project 的出口列表上,每日刷新 | false |
| is_hosting | boolean | 托管或云基础设施 | true |
| is_relay | boolean | 隐私中继,与 VPN 分开报告 | false |
| is_mobile | boolean | 移动运营商网络 | false |
| is_satellite | boolean | 卫星 ISP | false |
| is_anycast | boolean | 从多个地点宣告 | false |
| is_residential_proxy | boolean | 保留字段:并非可用功能,请勿依赖 | (不显示) |
| is_public_proxy | boolean | 公开列出的开放代理 | false |
| is_anonymous | boolean | 适用 VPN、代理或 Tor 时为 true | true |
| proxy_type | string | 检测到的代理的协议 | none |
| anonymity_level | string | none、low、medium 或 high | medium |
| vpn_provider | string | VPN 运营方名称(在名单上时) | Mullvad |
| vpn_provider_tier | string | 由服务商名称派生的标签;请勿基于它构建逻辑 | (不显示) |
| relay_provider | string | 中继运营方名称 | none |
| proxy_score | number | 0 到 100 的代理可能性 | 0 |
| vpn_confidence | number | 0 到 100;同时显示触发了哪条命名路径 | 95 |
| residential_proxy_status | string | 2026 年 10 月新增,未收录于 /docs。保留字段 | (不显示) |
| residential_proxy_evidence | string | 2026 年 10 月新增,未收录于 /docs。保留字段 | (不显示) |
| residential_proxy_last_seen | string | 2026 年 10 月新增,未收录于 /docs。保留字段 | (不显示) |
| residential_proxy_score | number | 与 is_residential_proxy 一同保留 | (不显示) |
| last_seen | string (ISO 8601) | 检测结果上次变更的时间 | 2026-10-20T20:17:50.000Z |
vpn_provider 是需要圈出来的字段。大多数 API 都能说出某个 IP 是“一个 VPN”;说出运营方则需要服务商名单。我们根据九家服务商自己的服务器列表、一份公开的第三方列表,或一张简短的已知 VPN 网络表来命名 VPN,vpn_confidence 显示触发的是哪条路径:这里的 95 表示来自 Mullvad 自己的列表。当地址不在任何名单上时,即使握手证明它是 VPN,vpn_provider 也会返回 "none"。我们在如何根据 VPN 自己的服务器列表识别其名称中追踪了这些路径,您可以用 VPN 检测测试测试任意地址。
is_relay 和 relay_provider 成对使用。104.28.46.99 返回了 is_relay: true、relay_provider: "iCloud Private Relay"、评分 9 和 allow。对于 Cloudflare 公布的 WARP 连接地址段(即 WARP 应用所连接的地址),API 也会返回 "Cloudflare WARP";对于 Apple 列表未涵盖的其他 Cloudflare 隐私出口,则会返回一个未写入文档的 "Cloudflare"。
is_anonymous 不涵盖中继。/docs 将其描述为对包括中继在内的任何匿名化服务都为 true,但中继出口返回的是 is_anonymous: false 且 anonymity_level: "medium"。该标记只跟踪 VPN、代理和 Tor,所以请单独读取 is_relay。
新增的三个住宅代理字段是保留字段。它们随 10 月的一次后端变更而出现,尚未写入文档。住宅代理检测目前不是我们提供的功能,所以请把全部五个住宅代理字段视为保留字段,不要基于它们制定规则。如果您担心这类流量,我们在这里说明了 IP 查询能看到什么、看不到什么。
7. 威胁与机器人情报(threat)
threat 分组询问该地址是已知的滥用来源,还是已知的友好机器人。它有 25 个字段,其中七个是占位符。
| 字段 | 类型 | 它告诉您什么 | 示例(66.249.66.1,Googlebot) |
|---|---|---|---|
| is_abusive | boolean | 在以滥用为重点的威胁数据源中 | false |
| is_bogon | boolean | 未分配或保留的地址空间 | false |
| is_crawler | boolean | 已知的爬虫或 AI 机器人 | true |
| is_spammer | boolean | 已知的垃圾信息来源 | false |
| is_scanner | boolean | 全互联网范围的扫描器地址段 | false |
| is_botnet | boolean | 僵尸网络 C2 地址(Feodo Tracker 数据) | false |
| is_cgnat | boolean | 运营商级 NAT;评分会被封顶 | false |
| threat_types | string[] | 适用的每一个威胁类别 | [] |
| blocklist_count | number | 保留字段:请勿依赖 | (不显示) |
| blocklist_sources | string[] | 占位符:目前未填充 | (不显示) |
| dnsbl_sources | string[] | 3 个 DNS 封禁名单区域中,哪些收录了它 | [] |
| crawler.verified | boolean | 匹配了运营方的官方 IP 地址段 | true |
| crawler.unverified | boolean | 像爬虫但不在官方地址段内 | false |
| crawler.spoofed | boolean | 占位符:尚无数据源 | (不显示) |
| crawler.name | string | 机器人名称,不含连字符 | Googlebot |
| crawler.operator | string | 谁在运营该机器人 | |
| crawler.category | string | 机器人类别 | search_engine |
| crawler.verification_method | string | 身份是如何确认的 | ip_range_list |
| botnet.role | string | 在僵尸网络中的角色(若已知) | none |
| botnet.family | string | 恶意软件家族(若已知) | none |
| botnet.last_seen | string | 占位符:目前始终为 "none" | none |
| honeypot.hits_30d | number | 占位符 | (不显示) |
| honeypot.type | string | 占位符 | (不显示) |
| honeypot.last_hit | string | 占位符 | (不显示) |
| spammer_last_seen | string | 占位符:目前始终为 "none" | none |
Tor 出口补全了这张表的另一半:is_spammer: true、threat_types: ["spammer", "tor"] 和 dnsbl_sources: ["zen.spamhaus.org"]。Mullvad 服务器返回了 threat_types: ["vpn"],所以这个数组也会回显匿名化标记。
crawler 对象是机器人决策所在之处。对于 66.249.66.1,API 返回了 verified: true、name: "Googlebot"、operator: "Google" 和 verification_method: "ip_range_list",匹配的是来自 10 个运营方的 19 个官方爬虫地址段数据源。我们在 10 月的查询中见过的类别有 search_engine、ai 和 fetcher。名称会去掉连字符,所以 Google 的用户触发抓取器返回为 GoogleUserTriggeredFetcher。
欺骗检测发生在您的代码里。API 只能看到 IP,永远看不到 User-Agent。声称自己是 Googlebot 但返回 crawler.verified: false 的请求就是未经验证的,这个比较需要由您来做。我们在按 IP 检测机器人和通过 IP、rDNS 和 CIDR 验证 AI 爬虫中展示了这一点。
is_cgnat 应该让决策变得更宽松,而不是更严格。CGNAT 地址由许多用户共享,所以评分在此被封顶,不应因为一个恶意用户而封掉整个运营商。该分组背后的数据源,请参阅威胁情报概览。
8. 反向 DNS(dns)
dns 分组重复了 network 中的三个反向 DNS 字段,因此只需要 rDNS 的代码可以读取这一个小对象。在我们抓取的每个响应中,这些值都与 network 中的副本相同。
| 字段 | 类型 | 它告诉您什么 | 示例(1.1.1.1) |
|---|---|---|---|
| ptr_record | string | 已存储的 PTR 主机名 | one.one.one.one |
| ptr_pattern | string | 保留字段:我们不打印它的值 | (不显示) |
| fcrdns_valid | boolean, or "none" | PTR 可解析回此 IP | true |
fcrdns_valid 是值得信任的那个。能正向解析回同一个 IP 的 PTR,比单独一个 PTR 字符串是强得多的证据,因为任何控制反向区域的人都可以设置后者。第 5 节的提醒同样适用:在引用之前,请先把已存储的 PTR 与实时的 dig -x 对比一下。
9. 风险评分(scoring)
scoring 分组把证据转化为决策。它有四个字段,而 detection_methods 是让评分可审计的那一个。
| 字段 | 类型 | 它告诉您什么 | 示例(185.220.101.1,Tor) |
|---|---|---|---|
| fraud_score | number | 0 到 100 的风险评分,越高越危险 | 100 |
| confidence | number | 判定背后的证据强度,0 到 1 | 0.7402500000000001 |
| recommended_action | string | allow、review、step_up 或 block | block |
| detection_methods | string[] | 触发的具体信号 | tor_exit, datacenter_blocklisted, no_ptr_datacenter, known_spammer |
fraud_score 综合了 36 项加权理由,其中有些理由是减分的。Googlebot 就是个例子:datacenter_ip 和 verified_crawler 都触发了,评分最终落在 0。中继永远不会达到 block,因为中继评分被封顶在 60。recommended_action 把评分映射到各个区间:
| 评分 | recommended_action | 含义 |
|---|---|---|
| 0 到 25 | allow | 没有明显的风险证据 |
| 26 到 50 | review | 触发了一些信号;记录并观察 |
| 51 到 75 | step_up | 有实质性证据;增加验证挑战 |
| 76 到 100 | block | 来自多个信号的强有力证据 |
请把 confidence 作为数字而不是字符串来输出:它返回时带有完整的浮点噪声。我们在 IP 欺诈评分指南和每项理由如何设定评分及其置信度中解释了该模型,并在为登录、注册和结账选择 IP 欺诈评分阈值中说明了阈值的设置位置。您可以用 IP 欺诈评分检测对任意地址打分。
10. 元数据(meta)
meta 分组为答案标注时间并标识该请求。它的五个字段中有两个的含义与字面名称所暗示的不同。
| 字段 | 类型 | 它告诉您什么 | 示例(104.28.46.99) |
|---|---|---|---|
| last_classified_at | string (ISO 8601) | 此响应的构建时间 | 2026-10-22T04:56:51.010Z |
| last_scanned | string (ISO 8601) | 此 IP 的检测结果上次变更的时间 | 2026-10-20T18:52:36.000Z |
| request_id | string | 本次查询的唯一 ID;联系支持时请引用 | aa25852e-0dc1-4fd6-8780-3b9283d13aba |
| latency_ms | number | 服务器端处理时间 | 3 |
| sources | string[] | 占位符:目前始终为 [] | [] |
last_classified_at 是响应时间,而不是分类时间。在全部七次查询中,它都落在我们发出请求前后约一秒之内。请改用 last_scanned 来判断新鲜度。在每个响应中它与 detection.last_seen 的值相同,七个都标注为 10 月 20 日。
过期的 IP 数据就是错误的 IP 数据,因为地址段会易手。如果您认为某项分类有误,就引用 request_id。在这七次查询中,服务器端延迟为 0 到 3 毫秒。
其他服务商如何命名相同的字段
其他 IP 数据服务商涵盖的内容有所重叠,但字段名称不同,有的把更丰富的字段放在更高的套餐里。我们在 2026 年 10 月 22 日阅读了三家服务商的公开文档,只保留了这些页面上明确陈述的内容。
| 服务商 | 其文档中的字段 | 其文档所述 | 最接近的 GeoIPHub 字段 |
|---|---|---|---|
| MaxMind | location.accuracy_radius | 坐标周围“以公里为单位的大致精度半径” | geo.geo_confidence(0 到 1,没有半径) |
| MaxMind | traits.user_type | 15 个取值,包括 consumer_privacy_network、content_delivery_network 和 search_engine_spider | asn.user_type,在我们的查询中返回了同样的这三个字符串 |
| MaxMind | anonymizer 对象 | 匿名化标记从 traits 移到一个独立对象中,其中包含 provider_name | detection.vpn_provider |
| IPinfo | vpn, proxy, tor, relay, hosting, service | service 是“VPN、代理或匿名化服务的名称” | detection.is_* 标记、vpn_provider、relay_provider |
| IPinfo | 套餐覆盖范围 | Core 只包含 is_anonymous 和 is_hosting;Plus 和 Max 使用 /anonymous 端点 | 所有套餐都提供每一个字段 |
| IPinfo | asn.type | 给出的示例:isp、business、hosting、education | asn.asn_type |
| IPQualityScore | fraud_score | 基于 IP、用户代理、语言及其他可选输入构建;75 以上为可疑,并建议在 90 以上进行标记或封禁 | scoring.fraud_score,仅基于 IP;高于 75 即 block |
| IPQualityScore | is_crawler | 经确认的搜索引擎爬虫,通过主机名或 IP 验证 | threat.crawler.verified,通过官方 IP 地址段 |
| IPQualityScore | connection_type | Residential、Corporate、Education、Mobile 或 Data Center | asn.connection_type |
来源:MaxMind GeoIP 网络服务响应、IPinfo 隐私检测数据、IPinfo ASN 数据和 IPQualityScore 代理检测响应参数。
由此得出两点实用的结论。评分的刻度只有对照其文档所述阈值才有意义:IPQualityScore 的 75 是“可疑”,而我们的 76 就已经是 block。此外,同名字段可能含义不同,所以请按文档所述的含义而不是名称来映射字段。我们的选择 IP 数据服务商的买家清单把这点变成了一个可以对任何 API 运行的简短测试。
每项决策该关注哪些 IP 数据字段
您很少需要同时用到全部 103 个字段。把字段与决策匹配起来,并跳过占位符:
| 使用场景 | 最重要的字段 | 注意事项 |
|---|---|---|
| 登录或结账时的欺诈检查 | scoring.fraud_score、recommended_action、detection_methods、detection.is_vpn、is_tor、is_proxy | 不要仅凭地理位置硬性封禁;is_cgnat 封顶评分是有原因的 |
| 地域合规与授权 | geo.country_code、geo.region、detection.is_relay | 城市是大致的;中继的地理位置可能与 Apple 的列表不一致 |
| 机器人与爬虫管理 | threat.crawler.verified、crawler.name、crawler.category | 请自行与声称的 User-Agent 对照;crawler.spoofed 是占位符 |
| 滥用举报与调查 | network.abuse_contact、whois.netname、threat.dnsbl_sources | 引用已存储的 PTR 之前,先用 dig 检查 |
| 本地化 | geo.country_code、geo.timezone | timezone 可能是 "none";对任播 IP,geo_confidence 只是个提示 |
在调查时,阅读各个分组的顺序和字段本身同样重要。我们的调查 IP 地址的分步指南用三个真实 IP 演示了十二项被动检查,依次用到这些分组。
动手开发之前,先自行核对字段
字段列表会发生变化,所以最稳妥的习惯是自己数一数。运行一次查询并列出叶子键:
curl -s https://api.geoiphub.com/v1/lookup/8.8.8.8 \
-H "x-api-key: YOUR_API_KEY" \
| jq 'del(.geo.country_names)
| [paths(type != "object") | select(all(.[]; type == "string"))]
| length + 1'
该过滤器把每个数组算作一个字段,跳过数组元素,并把 country_names 作为一个字段加回去。对于我们保存的七个响应,它全都输出了 103。如果您得到的数字不同,请把键与 API 参考和本文进行比对。如果您不带密钥测试,请控制调用节奏:一分钟内第 30 次无密钥请求就会返回 429,并把您的 IP 锁定两小时。
常见问题
从 IP 地址能获取哪些数据?
远不止位置。2026 年 10 月 22 日的一次 GeoIPHub 线上查询返回了 10 个分组共 103 个字段:IP 本身、网络(ASN、ISP、连接类型、RPKI)、大致地理定位、WHOIS 注册数据、网络证据与反向 DNS、VPN、代理、Tor 与中继检测(在名单上时会给出服务商名称)、威胁与已验证爬虫信号、可解释的 0 到 100 风险评分,以及请求元数据。其中 11 个字段是占位符,目前返回固定的空值。
IP 地址会暴露我的确切家庭住址吗?
不会。IP 地理定位估算的是一个大致区域(至多到城市或地区),绝不是街道地址或某个具体的人。城市级结果并不精确,移动网络、CGNAT 和 VPN 连接会让它更不可靠。任何声称仅凭 IP 就能达到地址级精度的说法都是夸大。
IP 数据中的 ASN 是什么?
自治系统编号(ASN)标识向互联网宣告某个 IP 地址的网络。例如,8.8.8.8 返回 AS15169,GOOGLE - Google LLC。ASN 及其所属组织来自全球路由表,因此是最可靠的 IP 数据字段之一,不同于对物理位置的猜测。
什么是 IP 欺诈评分,它是如何计算的?
IP 欺诈评分是一个 0 到 100 的数字,概括了某个地址看起来有多危险。GeoIPHub 综合 36 项加权理由,减去已验证爬虫等豁免类理由,并返回触发的具体方法以及建议操作:25 及以下为 allow,50 及以下为 review,75 及以下为 step_up,高于 75 为 block。我们在 2026 年 10 月 22 日查询的一个 Tor 出口得分为 100,列出了四种方法。
住宅 IP 和数据中心 IP 有什么区别?
住宅 IP 由消费级 ISP 分配给家庭连接;数据中心(托管)IP 属于云或服务器服务商。这种区别体现在 asn.connection_type 和 asn.asn_type 字段中。在我们 10 月份的七次查询中,Mullvad VPN 服务器、Tor 出口和 Googlebot 返回的都是 connection_type 为 datacenter。
所有 IP API 服务商在每个套餐中返回的字段都一样吗?
不一样。IPinfo 的文档称,其 Core 套餐只包含 is_anonymous 和 is_hosting 两个隐私标记,更完整的隐私字段在 Plus、Max 和定制 API 中提供。GeoIPHub 在所有套餐(包括每天 1,500 次查询的免费套餐)中返回每一个字段。
IP 地理定位中的精度半径是什么意思?
精度半径是以返回坐标为中心、以公里为单位的距离,真实位置很可能落在这个范围内。MaxMind 的文档将其记录为 location.accuracy_radius。GeoIPHub 不返回半径;它返回 geo.geo_confidence,一个 0 到 1 的值,当没有足够证据判断城市时为 0。
GeoIPHub API 背后的团队
由 GeoIPHub 团队撰写,即构建 GeoIPHub IP 情报 API 及其扫描器的团队。草稿在 AI 辅助下完成,并由团队编辑;除非标注为示例,API 示例均为针对线上 API 的真实查询。


