免费 IP 查询 API

完全免费,无需注册即可调用(匿名有频率限制);注册后凭 API Key 可提升额度。返回 JSON,支持跨域。

1. 查询本机 IP

GET /api/myip

返回调用方公网 IP 及归属地。

2. 查询指定 IP

GET /api/ip?ip=8.8.8.8

可选参数 &key=你的APIKEY 提升调用额度。

3. 查询域名(解析并逐 IP 归属)

GET /api/ip?domain=baidu.com

返回域名解析出的各 IP 及归属地列表。

4. 命令行纯文本查询

GET /ip

专为 curl / shell 脚本设计,返回一行纯文本而非 JSON,方便直接用在脚本里。

$ curl https://www.i5p.com/ip
103.118.252.70 | 中国 香港 港岛 | 阿里云
$ curl "https://www.i5p.com/ip?ip=8.8.8.8"
8.8.8.8 | 美国 加利福尼亚州 山景城 | Google Cloud/DNS/DoH/DoT

不带参数查自己;?ip= 查指定地址;?lang=en 或 ja 切换语言。

# 通过代理查询,看到的就是代理的出口 IP(无账号密码)
curl -x http://127.0.0.1:8080 https://www.i5p.com/ip

# 代理需要账号密码时
curl -x http://user:password@127.0.0.1:8080 https://www.i5p.com/ip

socks5 代理把 http:// 换成 socks5:// 即可。这是确认代理有没有生效、出口落在哪里最快的办法。

返回示例

{
  "code": 0,
  "msg": "ok",
  "data": {
    "ip": "8.8.8.8",
    "country": "美国",
    "province": "加利福尼亚州",
    "city": "山景城",
    "zip": "",
    "isp": "Google Cloud/DNS/DoH/DoT"
  }
}

5. 二维码生成

GET /qr/?data=内容

GET 请求直接返回 image/png 图片,可直接用在 <img> 标签里。

基础参数

th_paramth_descth_req
data二维码内容。必填,需 URL 编码,上限 1200 字节。req_yes
size图片边长,80–1200,默认 320。实际输出取不超过该值的码点整数倍,所以可能比你给的略小几像素——这样每个码点才是整像素、扫码更稳。req_no
level纠错级别 L(7%) / M(15%) / Q(25%) / H(30%),默认 H。加 Logo 必须用 H,否则中心被遮挡后可能扫不出。req_no
p样式编号。可以是预置模板号(1–120),也可以是登录后生成的专属编号(形如 u7)。不传则黑白。req_no
formatpng(默认,直接返回图片)或 base64(返回 JSON,内含 data URI,方便前端直接塞进 src)。req_no

样式参数(可直接写在 URL 上)

th_paramth_desc
fg前景色(码点颜色),十六进制,如 %23e11d48(# 需转义成 %23)。
bg背景色,同上。
fg2渐变副色。仅当 grad 不为 none 时生效。
grad渐变方向:none 无 / h 水平 / v 垂直 / d 对角。
shape码点形状:square 方形 / dot 圆点 / rounded 圆角。
eye三个定位图的形状:square / rounded / circle。
margin静区边距,按码点个数算,0–10,默认 2。留白太少会影响识别率。
text底部文字,最多 30 字。传空值(&text=)可显式去掉编号里设的文字。
text_color底部文字颜色,十六进制。

参数优先级:URL 覆盖编号

以 p 指向的样式为基底,URL 上显式给出的参数逐项覆盖它,没给的沿用编号里的设置。所以 p=u7&size=600 是「u7 的样式、尺寸改成 600」,u7 里的颜色、码点、底部文字都还在。不传 p 时基底是默认黑白。

唯一的例外是 Logo:它是存在服务器上的文件,只能通过编号带出来,没法用 URL 参数传。想要带 Logo 的码,就得先生成专属编号。

三种用法

  1. 直接调用——不传 p,样式全写在 URL 上。适合临时生成、不想注册的场景。
  2. 预置模板——p=1 到 p=120,120 套配色与码点风格,无需登录。模板只管配色和形状,不含尺寸、Logo、底部文字。
  3. 专属编号——登录后在二维码生成页调好参数(含 Logo 与底部文字),点「生成 API 编号」得到形如 u7 的编号。以后只需 ?data=内容&p=u7,样式改动在我的编号里改一次,所有引用它的地方立刻跟着变,不用改代码。

域名绑定:连 p 都不用传

在我的编号里把一个域名绑到某个编号后,从该域名页面发出的请求(按 Referer 判断)只要传 data 就会自动套用绑定的样式。绑 example.com 时,www.example.com 同样命中。

示例

<!-- 默认黑白 -->
<img src="https://www.i5p.com/qr/?data=https%3A%2F%2Fwww.i5p.com">

<!-- 直接写样式:红色圆点码 + 对角渐变 -->
<img src="https://www.i5p.com/qr/?data=https%3A%2F%2Fwww.i5p.com&fg=%23e11d48&fg2=%23f59e0b&grad=d&shape=dot&eye=circle">

<!-- 用预置模板 82 号,尺寸 300 -->
<img src="https://www.i5p.com/qr/?data=https%3A%2F%2Fwww.i5p.com&size=300&p=82">

<!-- 用专属编号(尺寸、颜色、Logo、底部文字都在编号里) -->
<img src="https://www.i5p.com/qr/?data=https%3A%2F%2Fwww.i5p.com&p=u7">

<!-- 用专属编号,但这次临时把尺寸调到 600 -->
<img src="https://www.i5p.com/qr/?data=https%3A%2F%2Fwww.i5p.com&p=u7&size=600">

<!-- 返回 base64,供前端直接使用 -->
curl "https://www.i5p.com/qr/?data=https%3A%2F%2Fwww.i5p.com&p=82&format=base64"

QR QR

注意事项

  • 返回的是图片,不遵循 JSON 错误码;参数有误时改为返回 JSON 错误说明,<img> 里会显示成裂图。调试时直接在浏览器打开该地址就能看到原因。
  • 同样的参数每次生成的图片完全一致,并带 ETag 与 Cache-Control: max-age=86400,可以放心让 CDN 和浏览器缓存。
  • 匿名调用有每分钟频率限制(后台可调,当前 1200 次/分钟)。超限返回 429。
  • 内容越长、纠错级别越高,码点越密。长网址建议先短链,或把纠错级别降到 M。

完整参数与在线调试见 二维码

6. 条形码生成

GET /bar/?data=内容&type=ean13

GET 请求直接返回 image/png 图片,支持 7 种一维码制。

data 条码内容(必填);type 码制 code128 / ean13 / ean8 / upca / code39 / itf / codabar,默认 code128;w 单元宽度 1–8;h 高度 20–400;fg/bg 颜色;text=0 隐藏文字。

<img src="https://www.i5p.com/bar/?data=6901234567892&type=ean13&w=3&h=140">

Barcode

完整参数与在线调试见 条形码

请求签名

带 key 的请求必须签名,api_secret 永远不出现在 URL 里。即使链接被日志或浏览器历史记录下来,也无法伪造后续请求。

key API Key;ts Unix 时间戳(秒,容差 300 秒);nonce 6–64 位随机串(300 秒内不可重复);sign 签名值。四个参数也可改用 X-Api-Key / X-Api-Ts / X-Api-Nonce / X-Api-Sign 请求头传递。

算法:取除 sign、callback 外的全部参数,按参数名字典序升序,拼成 k1=v1&k2=v2(值用原始值,不做 URL 编码),再用 api_secret 做 HMAC-SHA256,输出小写十六进制。

// PHP
$key    = 'a1b2c3d4e5';
$secret = '你的secret';
$p = ['ip' => '8.8.8.8', 'key' => $key, 'ts' => time(), 'nonce' => bin2hex(random_bytes(6))];
ksort($p);
$base = [];
foreach ($p as $k => $v) { $base[] = "$k=$v"; }
$p['sign'] = hash_hmac('sha256', implode('&', $base), $secret);
echo file_get_contents('https://www.i5p.com/api/ip?' . http_build_query($p));
// Node.js
const crypto = require('crypto');
const key = 'a1b2c3d4e5', secret = '你的secret';
const p = { ip: '8.8.8.8', key, ts: Math.floor(Date.now() / 1000),
            nonce: crypto.randomBytes(6).toString('hex') };
const base = Object.keys(p).sort().map(k => `${k}=${p[k]}`).join('&');
p.sign = crypto.createHmac('sha256', secret).update(base).digest('hex');
const url = 'https://www.i5p.com/api/ip?' + new URLSearchParams(p);
fetch(url).then(r => r.json()).then(console.log);
#!/bin/bash
KEY="a1b2c3d4e5"; SECRET="你的api_secret"
IP="8.8.8.8"; TS=$(date +%s); NONCE=$(head -c6 /dev/urandom | xxd -p)
BASE="ip=$IP&key=$KEY&nonce=$NONCE&ts=$TS"   # 已按字典序排列
SIGN=$(printf '%s' "$BASE" | openssl dgst -sha256 -hmac "$SECRET" -r | cut -d' ' -f1)
curl "https://www.i5p.com/api/ip?$BASE&sign=$SIGN"

Key 与 Secret 在用户中心创建。若后台关闭了「API 强制签名」,则只传 key 也可调用(不推荐)。

跨域与 JSONP

所有 JSON 接口都带 Access-Control-Allow-Origin: *,可直接 fetch/XHR 跨域调用;也支持 ?callback=函数名(或 jsonp=)返回 JSONP,供 <script> 标签直接引用。

<script src="https://www.i5p.com/api/myip?callback=showIp"></script>
<script>function showIp(r) { console.log(r.data.ip); }</script>

说明