在做定位、风控、日志分析、智能路由等业务时,经常需要把一个IP转换成地理位置、运营商、时区、组织、代理类型等信息。今天把我常用的几个 高精度IP定位查询免费的平台整理出来,并分享一些实用代码片段。
为什么要用高精度的IP定位服务?
简单来说:
1. 准确性更高:不仅区分国家省市,还能细化到城区甚至经纬度。
2. 实时更新:IP分配经常变化,旧数据库很快失效。
3. 拓展字段丰富:比如ASN(自治系统号)、组织名称、代理/V*N检测。
4. 免费/低成本使用:很多提供有限免费额度,非常适合开发调试。
核心目标
把一个IP,转成如下字段:
国家、省/州、城市、经纬度、运营商、时区、组织、代理类型(如果有)
1.IP数据云(ipdatacloud.com)
IP数据云是一个国内用户常用的IP定位服务,免费额度不错,更新也比较及时。
优点
· 支持细粒度定位
· 有运营商、区号、邮编等字段
· 免费额度日访问足够常规应用
快速示例(Python)
import requests
API_KEY = "你的API_KEY"
ip = "8.8.8.8"
url = f"https://api.ipdata.cn/{ip}?api-key={API_KEY}"
resp = requests.get(url, timeout=3)
data = resp.json()
print("国家:", data.get("country_name"))
print("省/州:", data.get("region"))
print("城市:", data.get("city"))
print("经纬度:", data.get("latitude"), data.get("longitude"))
print("运营商:", data.get("asn", {}).get("name"))
返回示例字段说明
| 字段 | 意义 |
|---|---|
| country_code | 国家代码 |
| region | 省/州 |
| city | 城市 |
| latitude/longitude | 经纬度 |
| asn.name | 运营商/组织 |
使用建议
· 日调用量不够时可升级付费;
· 对新IP、移动网络段支持较好。
2.IPnews
IPnews是一个集成多个数据源的IP定位平台,特色在于:
· 多个数据库合并
· 有代理/V*N/数据中心类型识别
· 返回字段详细(城市+区+ISP+是否代理)
优点
· 代理/V*N检测
· 类型标签丰富
· 适合做实时风控与分析
示例(Python)
import fetch from "node-fetch";
const API_KEY = "你的IPNEWS_KEY";
const ip = "8.8.8.8";
const url = `https://ipnews.io/api/v1/json/${ip}?api-key=${API_KEY}`;
(async () => {
const res = await fetch(url);
const data = await res.json();
console.log("国家:", data.country_name);
console.log("城市:", data.city);
console.log("经纬度:", data.location);
console.log("是否代理:", data.security.is_proxy);
console.log("ISP:", data.connection.org);
})();
核心字段
| 字段 | 含义 |
|---|---|
| security.is_proxy | 是否为代理/V*N |
| connection.org | ISP/组织 |
| location | 经纬度 |
| country_name / city | 地理位置 |
适合场景
· 风控系统(代理/V*N标识)
· 实时分析与告警
· 大量历史日志标签批处理
3.IPinfo
IPinfo是国外非常成熟的IP数据服务商,免费额度稳定,字段非常丰富。
特点
· 高精度国家/省/市/邮编
· ASN数据质量好
· 多语言SDK支持
示例(Python)
import ipinfo
ACCESS_TOKEN = "你的TOKEN"
handler = ipinfo.getHandler(ACCESS_TOKEN)
details = handler.getDetails("8.8.8.8")
print("国家:", details.country_name)
print("省/州:", details.region)
print("城市:", details.city)
print("邮编:", details.postal)
print("经纬度:", details.latitude, details.longitude)
print("组织:", details.org)
常用字段
| 字段 | 含义 |
|---|---|
| country_name | 国家 |
| region | 省/州 |
| city | 城市 |
| postal | 邮编 |
| org | ISP/组织 |
| latitude/longitude | 经纬度 |
优势总结
· 数据稳定+服务可用性高
· API简单清晰
· SDK覆盖绝大多数语言
对比与选用建议
下面高层对比一下:
| 平台 | 免费额度 | 主要优势 | 是否支持代理检测 |
|---|---|---|---|
| IP数据云 | 中等 | 国内定位细粒度好 | 否 |
| IPnews | 中等偏低 | 多数据源聚合,代理/VPN识别 | 是 |
| IPinfo | 中等 | 字段最丰富,SDK最多 | 否 |
如何选?
· 如果核心目标是代理识别 →优先IPnews
· 如果追求国内高精度定位/风控 →优先IP数据云
· 如果要兼顾全球 →优先IPinfo
一些实战建议
1. 本地缓存查询结果:避免重复API调用,提升性能
2. 失败重试与降级策略:多个服务做fallback
3. 数据版本监控:部分服务会定期更新数据库