AI摘要

开源纯真IP库在线查询系统,支持IP地理位置、本机IP、域名解析及批量查询,提供RESTful API、中英文界面与自动更新。内置CC防护与限流,支持Nginx反代及CDN,适合集成或自建IP查询服务。

开源一个纯真IP库在线查询系统,支持IP地理位置查询、本机IP查询、域名解析等,支持API接口调用。

本项目全程由AI辅助开发!

Hermes Agent 部署全指南,手把手教你搭建你的第一个AI助手:https://blog.zeruns.com/archives/939.html


项目简介

ip-query-web 是一个基于纯真 IP 数据库(qqwry.ipdb)的 IP 地理位置在线查询系统。你可以用它:

  • 查询 IP 归属地 — 输入任意 IPv4/IPv6 地址,获取国家、省份、城市、区县、运营商等信息
  • 域名解析 — 自动解析域名的 A/AAAA 记录并查询每个 IP 的地理位置
  • 获取客户端 IP — 通过 /api/myip/api/mylocation 获取访问者真实的来源 IP
  • 批量查询 — 通过 POST /api/batch 单次最多查询 50 个 IP 地址
  • API 服务 — 提供 RESTful API,支持 JSON 和纯文本双格式,方便集成到各类应用中
  • 网站统计 — 内置 PV 和 API 调用统计面板,基于 Chart.js 图表展示日/周/月/年数据
  • 自动更新 — 每周一凌晨 3:00 自动从纯真 IP 库 GitHub 仓库拉取最新数据
  • 中英文双语 — 支持中文 / English 界面切换,自动检测浏览器语言
  • 命令行工具node cli.js <IP/域名> 直接查询

适用场景

  • 获取网站访客来源信息(配合 Nginx 反代可识别真实 IP,支持 Cloudflare / 阿里云 CDN 等)
  • 为其他应用提供 IP 地理位置查询 API
  • 用作自定义查询工具或集成到自动化脚本中
  • 学习 Node.js/Express Web 开发与项目架构

安装部署

方式一:裸机安装(推荐)

# 需要 Node.js 18+
git clone https://github.com/zeruns/ip-query-web.git
cd ip-query-web
npm install --production
cp .env.example .env
node server.js

方式二:Docker 部署

# Docker Compose V2(Docker Desktop / Docker Engine 20.10+)
docker compose up -d --build

# Docker Compose V1(旧版,命令带横线)
docker-compose up -d --build

方式三:宝塔面板

在宝塔「Node 项目管理」中添加项目,启动命令 node server.js,端口 6688。

访问

地址说明
http://localhost:6688主查询界面
http://localhost:6688/api-docs.htmlAPI 文档(在线测试)
http://localhost:6688/stats.html网站统计(Chart.js 图表)

在线演示

🔗 https://ip-query.zeruns.com/

功能特性

  • IPv4 / IPv6 双栈双库 — IPv4 查询使用纯真 Dat 格式(qqwry.dat),IPv6 查询使用 IPIP.net 格式(qqwry.ipdb),数据更精准
  • 域名解析 — 自动解析 A / AAAA 记录并查询每个 IP
  • 双格式 API — JSON 和纯文本(.txt)输出,适应不同场景
  • 暗色 Web 界面 — 自带查询页面、API 文档、统计面板
  • 中英文双语 — 支持中文和 English 界面切换,自动检测浏览器语言偏好
  • 命令行工具node cli.js <IP/域名> 直接查询
  • IP 库自动更新 — 每周一凌晨 3:00 自动拉取最新纯真 IP 库(支持 GitHub 镜像加速)
  • 网站统计 — PV 和 API 调用统计,基于 Chart.js 图表展示
  • 三层安全防护 — CC 防护 + 全页面分级限流(普通API 120次/分钟、DNS 30次/分钟、页面 120次/分钟)+ 安全头

API 接口

所有接口支持 JSON 和纯文本(后缀 .txt?format=txt)双格式。

接口说明限流(次/分钟)
GET /api/query?q=<IP或域名>综合查询(推荐,支持IP和域名)30
GET /api/myip获取客户端 IP 地址(通过请求头识别)120
GET /api/location?q=<IP>IP 查地理位置(仅支持 IP)120
GET /api/mylocation获取访问者来源 IP 及地理位置120
GET /api/resolve4?q=<域名>域名解析 IPv4 地址30
GET /api/resolve6?q=<域名>域名解析 IPv6 地址30
GET /api/info数据库版本信息120
GET /api/status数据库状态(含可用性检查)120
GET /api/stats?range=daily weekly monthly yearly网站统计数据120
POST /api/batch批量 IP 查询(≤50)120
GET /health健康检查(无限制)

调用示例

# JSON 格式 — 综合查询(支持 IP 和域名)
curl http://localhost:6688/api/query?q=8.8.8.8

# 纯文本格式
curl http://localhost:6688/api/query.txt?q=8.8.8.8

# 获取客户端 IP
curl http://localhost:6688/api/myip

# 批量查询
curl -X POST http://localhost:6688/api/batch \
  -H "Content-Type: application/json" \
  -d '{"ips":["8.8.8.8","1.1.1.1","2001:4860:4860::8888"]}'

命令行查询

node cli.js 114.114.114.114     # 查 IP 归属地
node cli.js blog.zeruns.com     # 查域名(解析 + 归属地)
node cli.js -6 ipv6.google.com  # 强制 IPv6

配置

所有配置通过环境变量或 .env 文件管理。源码中配置位于 src/config.js.env.example 包含完整模板。

cp .env.example .env   # 复制默认配置
vim .env               # 按需修改

服务配置

变量默认值说明
PORT6688服务端口
HOST::监听地址:::=双栈(推荐)、0.0.0.0=仅IPv4、127.0.0.1=仅本地
LOG_LEVELinfo日志级别:debuginfowarnerror

限流配置

变量默认值说明
RATE_LIMIT_MAX120普通 API 查询限流(次/分钟/单IP)
RATE_LIMIT_DNS30域名查询接口限流(涉及 DNS 解析,限制更严)
RATE_LIMIT_PAGE120页面/静态资源限流(次/分钟/单IP)

CC 防护配置

变量默认值说明
CC_MAX_CONCURRENT20单 IP 最大并发连接数,超限自动封禁
CC_BURST_WINDOW2000突发检测窗口(毫秒)
CC_BURST_MAX40窗口内最大新建连接数
CC_SLOW_TIMEOUT15000慢速攻击超时(毫秒),超时未完成请求视为攻击
CC_BLOCK_DURATION60000自动封禁时长(毫秒),默认 60 秒
CC_WHITELISTIP 白名单(逗号分隔),白名单内 IP 不受任何限制
CC_BLACKLISTIP 黑名单(逗号分隔),永远拦截

DNS 和网络配置

变量默认值说明
PUBLIC_DNS8.8.8.8,8.8.4.4域名解析用公共 DNS 服务器(逗号分隔,依次尝试)
PUBLIC_IP_SOURCEShttps://ipinfo.io/ip,https://api.ipify.org,https://checkip.amazonaws.com获取公网 IP 的查询源(逗号分隔,取最快响应)

IP 库更新配置

变量默认值说明
GITHUB_MIRRORhttps://gh-proxy.com/GitHub 镜像加速地址。境内服务器必配,境外留空直连
DATA_DIR./dataIP 数据库和统计文件存放目录

HTTPS 配置

变量默认值说明
SSL_KEYSSL 私钥文件路径,设置后启用 HTTPS
SSL_CERTSSL 证书文件路径
如使用 Nginx/Caddy 反向代理做 SSL 终端,这两个变量保持注释即可。

网站信息配置(静态文件)

以下配置项通过修改 HTML 静态文件完成,详见各文件内的标签:
配置项修改位置说明
网站域名各 HTML 页面 <meta name="site-url">用于 SEO 的 canonical URL
ICP 备案号public/components/footer.html底部备案号链接
SEO 标题/描述/关键词各 HTML 页面 <title><meta name="description"><meta name="keywords">搜索引擎优化

示例 .env

# 服务端口
PORT=6688

# 国内服务器推荐配置
GITHUB_MIRROR=https://gh-proxy.com/

# 限流调大(高并发场景)
RATE_LIMIT_MAX=300
RATE_LIMIT_DNS=60

# CC 防护调宽松
CC_MAX_CONCURRENT=50
CC_BLOCK_DURATION=30000

安全防护

系统内置三层防护链,公网部署无需额外配置:

层级实现功能
1CC 防护(纯 Node)并发限制 + 突发检测 + 慢速攻击防御 + 自动封禁 + IP 黑白名单
2express-rate-limit按接口类型分级限流(普通 / DNS 解析)
3安全头X-Frame-OptionsX-XSS-ProtectionX-Content-Type-OptionsReferrer-PolicyCORS 控制

Nginx 反向代理

建议前面加 Nginx 做 SSL 终端:

server {
    listen 443 ssl http2;
    server_name ip.example.com;

    ssl_certificate /etc/ssl/certs/example.crt;
    ssl_certificate_key /etc/ssl/private/example.key;

    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;

    location / {
        proxy_pass http://127.0.0.1:6688;
        proxy_http_version 1.1;
        proxy_read_timeout 60s;
    }
}

CDN 兼容

系统通过 getClientIP() 智能识别客户端真实 IP,优先级从高到低:

CDN / 代理请求头自动识别
CloudflareCF-Connecting-IP
阿里云 ESAali-real-client-ip
Cloudflare / 阿里云 / Google CloudTrue-Client-IP
阿里云 CDNAli-CDN-Real-IP
Nginx 反代X-Real-IP
通用X-Forwarded-For(取第一个)

使用 CDN 时需要配置两处:

1. CDN 侧 — 开启真实 IP 传递:

  • 阿里云 ESA(方法一,推荐):ESA 控制台 → 站点 → 规则设置 → 转换规则 → 托管转换 → 开启「添加真实客户端 IP 标头」,默认标头名 ali-real-client-ip
  • 阿里云 ESA(方法二):规则设置 → 转换规则 → 新增请求头规则,将真实客户端 IP 通过 X-Forwarded-For 传递。
  • Cloudflare:默认已开启,无需额外配置。

2. Nginx 侧 — 信任代理 IP:

server {
    set_real_ip_from 0.0.0.0/0;
    real_ip_header X-Forwarded-For;
    real_ip_recursive on;

    location / {
        proxy_pass http://127.0.0.1:6688;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        ...
    }
}

Cloudflare 用户将 real_ip_header 改为 CF-Connecting-IP

第三方API推荐

除了自建服务,也可以用以下第三方 IP 查询 API:第三方API推荐

项目结构

├── server.js              # Express 服务器入口
├── cli.js                 # 命令行查询工具
├── package.json           # 项目配置与依赖
├── .env.example           # 环境变量模板
├── LICENSE                # GPL-3.0 许可证
├── src/
│   ├── config.js          # 统一配置层
│   ├── ipdb.js            # IP 库查询引擎
│   ├── updater.js         # 数据库自动更新(支持镜像加速)
│   ├── ccProtection.js    # CC 防护中间件
│   ├── stats.js           # 网站统计模块
│   └── classifier.js      # 智能字段分类器
├── public/
│   ├── index.html         # 主查询页面(暗色主题)
│   ├── api-docs.html      # API 文档(在线测试)
│   ├── api-recommend.html # 第三方 API 对比
│   ├── stats.html         # 统计面板(Chart.js 图表)
│   ├── i18n.js            # 中英文双语切换
│   ├── favicon.ico        # 网站图标
│   ├── favicon.png        # 网站图标
│   └── components/        # 页头/页尾组件
└── data/                  # IP 数据库 & 统计数据

运行条件

  • Node.js 18+
  • 内存 256MB+
  • 存储 ~150MB(含 IP 库 ~40MB)
  • 系统 Linux / macOS / Windows (WSL)

数据来源

IP 地理位置数据来自 纯真 IP 库 (CZ88.NET),通过 npm 包 qqwry.ipdb 分发,每周一凌晨 3:00 自动更新。

推荐阅读



最后修改:2026 年 05 月 27 日
如果您觉得我的文章有帮助,请随意赞赏,赞赏有助于激发博主的热情,感谢!