php-whois:轻量级PHP工具,一站式查询域名、IPv4/IPv6与MAC地址
如果你经常需要在命令行或网页里查询域名注册信息、IP 归属地、或者 MAC 地址对应的硬件厂商,那么 php-whois 是一个值得收藏的轻量级 PHP 工具。它把域名、IPv4、IPv6、MAC 四类查询整合在一个页面里,自动识别输入类型,无需手动切换。
📑 文章目录
- 项目简介
- 核心功能
- 自动识别查询类型
- 域名查询(三级策略)
- IP 查询与归属地
- MAC 地址查询
- 技术亮点
- 统一服务器发现
- IDN 域名支持
- 信息来源徽章
- 前端体验
- API 接口
- 主查询 API(?api=)
- IP 归属地 API(/ip/)
- 安装部署
- Nginx 伪静态规则
- 文件结构
- 技术栈
- 许可证
- 总结
项目简介
php-whois 是一个纯 PHP 实现的网络信息查询工具,采用 RDAP 优先 → WHOIS 回退 → ICANN 降级 的三级查询策略,服务器地址统一从 IANA 根数据库动态发现;IP 归属地采用双数据源容错;MAC 地址基于本地 IEEE OUI 数据库(53000+ 条记录)查询厂商信息。
前端为玻璃态(Glassmorphism)设计,零第三方 JS 依赖,支持 PWA 离线使用,并提供返回原始数据的 API 接口与独立的 IP 归属地 API。
在线演示:https://tool.xuanlove.host/phpwhois/
核心功能
自动识别查询类型
根据输入格式自动判定为域名、IPv4、IPv6 或 MAC 地址,无需手动切换。
域名查询(三级策略)
- RDAP 优先:HTTPS + JSON 协议,返回结构化数据
- WHOIS 回退:TCP 43 端口,返回原始文本,支持注册局→注册商二次查询
- ICANN 降级:返回 lookup.icann.org 查询链接
IP 查询与归属地
IPv4 / IPv6 均走 ARIN RDAP,自动重定向到对应 RIR(APNIC / RIPE / LACNIC / AFRINIC)。查询时自动附加归属地信息:国家、洲、省、市、邮编、经纬度、时区、ISP、组织、AS。
归属地采用双数据源容错:优先调用自建服务 tool.xuanlove.host/ip/,失败回退到 ip-api.com,并按 IP 缓存 7 天。
MAC 地址查询
基于本地 IEEE OUI 数据库(53000+ 条记录),查询厂商名称、地址、注册类型(MA-L / MA-M / MA-S / IAB / CID)、OUI 前缀。支持多种格式:aa:bb:cc:dd:ee:ff、aa-bb-cc-dd-ee-ff、aabb.ccdd.eeff、aabbccddeeff,严格正则匹配避免域名被误识别。
技术亮点
统一服务器发现
从 IANA 根数据库动态抓取每个 TLD 的 RDAP 与 WHOIS 服务器,本地缓存 7 天;多级后缀优先匹配(com.cn 优先于 cn),RDAP 与 WHOIS 独立查找各自最长匹配。
IDN 域名支持
支持 Punycode 转换,可查询中文等国际化域名。
信息来源徽章
- RDAP(蓝色)—— 域名 / IP 的 RDAP 协议查询
- WHOIS(灰色)—— 域名 WHOIS 协议(TCP 43)查询
- MAC(绿色)—— 本地 IEEE OUI 数据库查询
- GEO(紫色)—— IP 归属地查询(动态显示真实数据源)
前端体验
- 玻璃态 UI:backdrop-filter 模糊 + 多层玻璃卡片
- 主题系统:CSS 变量驱动的亮 / 暗色模式,自动跟随系统或手动切换
- 多语言:简体中文、繁体中文、英语、俄语、西班牙语,零 CDN 依赖
- 查询历史:本地存储最近 50 条,右下角浮动按钮 + 底部抽屉
- 响应式设计:桌面与移动端自适应
- PWA 支持:可安装到桌面,Service Worker 离线缓存
- 截图导出:一键将查询结果导出为图片
- XSS 防护:所有外部数据 HTML 转义后渲染
API 接口
主查询 API(?api=)
与网页共用 index.php,通过 ?api=<查询目标> 触发 API 模式,返回纯原始数据(零包装)。
| 场景 | HTTP 状态码 | Content-Type | 响应体 |
|---|---|---|---|
| 域名 RDAP 命中 | 200 | application/rdap+json | 原始 RDAP JSON |
| 域名 WHOIS 命中 | 200 | text/plain | 原始 WHOIS 文本 |
| MAC 命中 | 200 | text/plain | CSV 原始行 |
| 域名未注册 | 404 | text/plain | Domain Not Registered |
| MAC 未找到 | 404 | text/plain | MAC Not Found |
| 查询失败 | 502 | text/plain | 错误信息 |
| 超出限流 | 429 | text/plain | Rate limit exceeded(含 Retry-After 头) |
IP 归属地 API(/ip/)
独立的 IP 归属地查询接口,CORS 全开,支持任意客户端调用:
# 查询调用者公网 IP
curl https://tool.xuanlove.host/ip/
# 查询指定 IP(GET 参数)
curl "https://tool.xuanlove.host/ip/?ip=8.8.8.8"
# 查询指定 IP(POST JSON body)
curl -X POST https://tool.xuanlove.host/ip/ \
-H "Content-Type: application/json" \
-d '{"ip": "54.255.104.99"}'
安装部署
- 克隆仓库(含 mac.csv 数据库):
git clone https://github.com/xuanlove/php-whois.git - 将文件放置在 Web 服务器目录中
- 确保 Web 服务器支持 PHP(建议 PHP 7.4+,需启用 cURL 与 intl 扩展)
- 访问 index.php 即可使用
网络要求:服务器需能访问 iana.org 与各 RDAP/WHOIS 服务器。首次查询某 TLD 时会抓取 IANA 详情页并缓存到 servers-cache.json,后续 7 天内直接读缓存。
Nginx 伪静态规则
# IP 归属地查询 API(/ip/ → ip.php)
location = /ip/ {
try_files $uri /ip.php;
}
location = /ip {
try_files $uri /ip.php;
}
# 主应用(WHOIS/RDAP/MAC 查询 + 前端页面)
location / {
try_files $uri $uri/ /index.php;
}
文件结构
| 文件 | 说明 |
|---|---|
| index.php | 统一入口(前端页面 + API 路由,HTML/CSS/JS 全部内嵌) |
| whois.php | 后端查询库(可独立访问) |
| ip.php | IP 归属地查询 API 独立入口(/ip/ 路径) |
| mac.csv | MAC 地址厂商数据库(IEEE OUI 分配表,53000+ 条) |
| manifest.json | PWA 配置 |
| service-worker.js | PWA 离线缓存策略 |
| locales/ | 旧版语言文件(保留兼容) |
| whois.json | 旧版 TLD-WHOIS 映射表(保留兼容) |
技术栈
| 层 | 技术 |
|---|---|
| 前端 | 原生 HTML + CSS(CSS 变量主题)+ 原生 JavaScript(fetch + AbortController),零第三方 JS 依赖 |
| 后端 | PHP(cURL + socket),建议 PHP 7.4+ |
| 数据源 | IANA 根数据库、IEEE OUI 数据库、tool.xuanlove.host/ip/、ip-api.com |
许可证
本项目采用 MIT License,欢迎提交 Pull Requests 或创建 Issues 来改进项目。
总结
php-whois 用单文件架构把域名、IP、MAC 三类查询整合成一个零依赖的 PHP 应用,既有漂亮的玻璃态前端,又有适合程序调用的原始数据 API,特别适合自建网络工具箱或部署在内网服务器上使用。
