免费 IP 查询 API
给它一个 IP 地址,返回该地址的国家、城市、网络运营商,以及它是否属于数据中心或 VPN。无需密钥,无需注册,完全免费。
- 无需密钥 — 现在就能从任何地方调用
- CORS — 可在浏览器 JavaScript 中直接使用
- 60/min — 按客户端计算,无需购买配额
- JSON — 字段集稳定,绝不缺键
试一试
这是你自己的 IP,在你打开本页时从 API 实时获取:
加载中……
接口
GET https://www.unblockmaster.com/api/v1/ip
查询调用方自己的 IP 地址。
curl https://www.unblockmaster.com/api/v1/ip
GET https://www.unblockmaster.com/api/v1/ip/<ip>
查询任意 IPv4 或 IPv6 地址。
curl https://www.unblockmaster.com/api/v1/ip/8.8.8.8
响应
{
"ip": "8.8.8.8",
"is_vpn": true,
"provider": "Google LLC",
"country": "United States",
"country_code": "US",
"city": "Mountain View",
"lat": 37.4056,
"lon": -122.0775
}
| 字段 | 类型 | 含义 |
|---|---|---|
ip | string | 被查询的地址。 |
is_vpn | bool | null | 当地址属于已知数据中心或 VPN 段时为 true。null 表示查询未能完成——而不是 false。 |
provider | string | 已知时给出网络运营商。 |
country | string | 英文国家名称。 |
country_code | string | 两位 ISO 3166-1 代码。 |
city | string | 已知时给出城市名称。 |
lat, lon | float | null | 城市的大致坐标,而非设备坐标。 |
所有字段始终存在。我们没有的值会是空字符串或 null,而不会是缺失的键——因此你读取响应时无需逐个字段做判断。
在 JavaScript 中
const res = await fetch("https://www.unblockmaster.com/api/v1/ip");
const data = await res.json();
if (data.is_vpn === true) {
console.log("Visitor is behind a VPN or proxy");
} else if (data.is_vpn === false) {
console.log("Visitor is on a residential connection");
} else {
console.log("Could not determine"); // upstream was unavailable
}
在 Python 中
import requests
r = requests.get("https://www.unblockmaster.com/api/v1/ip/1.1.1.1", timeout=5)
print(r.json()["country"]) # Australia
速率限制与错误
限制为每个客户端每分钟 60 次请求。每个成功响应都会带上 X-RateLimit-Limit 和 X-RateLimit-Remaining,因此你可以在触及上限之前就减速,而不是之后。
| 地位 | error | 触发条件 |
|---|---|---|
| 400 | invalid_ip | 路径片段不是有效的 IPv4 或 IPv6 地址。 |
| 405 | method_not_allowed | 除 GET、HEAD、OPTIONS 之外的任何方法。 |
| 429 | rate_limited | 超出限制。请遵守 Retry-After 响应头。 |
合理使用
- 个人和商业用途均免费。无需署名——当然,一条回链我们总是欢迎的。
- 尽量在你那一侧缓存结果。地理位置不会每分钟都变。
- 我们会把每个地址缓存一小时,因此重复查询同一个 IP 对双方都很省。
- 除常规的 Web 服务器访问日志外,我们不会记录你所查询地址的任何信息。
- 这是一项尽力而为的免费服务,不提供可用性保证。请勿在其上构建对安全性要求严苛的系统。