基于 Cloudflare 边缘网络构建的轻量、极速的公网 IP 及地理位置查询服务。
无需搭建服务器、无需 GeoIP 数据库、无调用限额、无额外隐私困扰的第三方收费 API。只需 Fork 本项目,即可在 1 分钟内拥有一个免费每日 100000 次请求的专属 IP-API,使用案例:Bettbox - 首页网络检测Widget。(现已更改为第三方 API )
Demo(仅作为演示使用,勿用于生产环境):
https://ipinfo-preview-no-production-environment.appshub.cc/
https://ipinfo-preview-no-production-environment.appshub.cc/json
- 低延迟:依托 Cloudflare Anycast 全球边缘节点就近响应,冷启动时间以毫秒级计。
- 零依赖:原生纯 JavaScript 实现,直接解析 Cloudflare 边缘标头与
request.cf元数据。 - 原生 Emoji:自动根据 ISO 国家代码计算 Unicode 偏移,无额外图片资源开销。
- 命令行:自动检测
curl/wget,默认纯文本输出并追加换行符,终端体验干净利落。 - 全功能:内置完整的跨域支持与预检(
OPTIONS)处理与IP信息显示,前端应用无缝对接。
你可以选择以下任意一种方式将本项目部署到你的 Cloudflare 账户:
点击下方部署按钮,按照引导授权 GitHub 并绑定 Cloudflare 账号,系统将自动 Fork 本仓库并完成首次部署上线:
- 点击本页面右上角的 Fork 按钮,将本项目 Fork 到你的个人账号下。
- 登录 Cloudflare 控制台。
- 导航至 Workers & Pages > Create application,选择 Pages / Workers 中的 Connect to Git。
- 选中你刚才 Fork 的
ipinfo仓库并点击部署。 - 部署成功后,Cloudflare 会为你分配一个
*.workers.dev访问域名;你也可以在 Triggers / Custom Domains 中绑定你自己的独立域名。 - 后续当上游仓库有更新时,在 GitHub 上点击 Sync Fork 即可自动触发边缘部署。
适合脚本、CI/CD 流程、定时任务或终端自动化。
- Endpoint:
/ - Method:
GET - Response:
text/plain
curl https://your-domain.workers.dev
返回内容:
104.28.192.1
适合前端面板、客户端网络状态监测、节点探测等场景。
- Endpoint:
/json(或通过 Query 参数?format=json,或携带 HeaderAccept: application/json) - Method:
GET - Response:
application/json
curl https://your-domain.workers.dev/json返回内容:
{
"ip": "104.28.192.1",
"flag": "🇺🇸",
"country": "US",
"countryRegion": "CA",
"city": "San Jose",
"region": "SJC",
"latitude": "37.33820",
"longitude": "-121.88630",
"asn": "AS13335",
"asOrganization": "CLOUDFLARENET"
}
| 字段 | 类型 | 说明 |
|---|---|---|
ip |
String | 客户端公网 IPv4 或 IPv6 地址 |
flag |
String | 国家对应的 Emoji 国旗图标 |
country |
String | ISO 3166-1 alpha-2 两位国家简码 |
countryRegion |
String | 省份 / 州级行政区简码 |
city |
String | 客户端所属城市名称 |
region |
String | 承接该请求的 Cloudflare 边缘数据中心机场代号(Colo) |
latitude |
String | 估计纬度 |
longitude |
String | 估计经度 |
asn |
String | 自治系统编号(ASN) |
asOrganization |
String | ASN 归属组织/运营商名称 |
注:响应头中同时附带 x-client-ip: <IP>,前端可直接从 Header 提取 IP。
fetch("[https://your-domain.workers.dev/json")
.then((res) => res.json())
.then((data) => {
console.log(`当前 IP: ${data.ip} (${data.flag} ${data.country} - ${data.city})`);
});import 'dart:convert';
import 'package:http/http.dart' as http;
Future<void> fetchIpInfo() async {
final response = await http.get(Uri.parse('https://your-domain.workers.dev/json'));
if (response.statusCode == 200) {
final Map<String, dynamic> data = jsonDecode(response.body);
print('IP: ${data['ip']} | Colo: ${data['region']} \vert{} Org:${data['asOrganization']}');
}
}
本项目基于 MIT License 协议发布,可自由 Fork、修改部署。