php-whois:轻量级PHP工具,一站式查询域名、IPv4/IPv6与MAC地址

作者: Mr.Xuan 分类: 我的作品 发布时间: 2026-08-07 10:12

如果你经常需要在命令行或网页里查询域名注册信息、IP 归属地、或者 MAC 地址对应的硬件厂商,那么 php-whois 是一个值得收藏的轻量级 PHP 工具。它把域名、IPv4、IPv6、MAC 四类查询整合在一个页面里,自动识别输入类型,无需手动切换。

📑 文章目录

项目简介

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:ffaa-bb-cc-dd-ee-ffaabb.ccdd.eeffaabbccddeeff,严格正则匹配避免域名被误识别。

技术亮点

统一服务器发现

从 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"}'

安装部署

  1. 克隆仓库(含 mac.csv 数据库):git clone https://github.com/xuanlove/php-whois.git
  2. 将文件放置在 Web 服务器目录中
  3. 确保 Web 服务器支持 PHP(建议 PHP 7.4+,需启用 cURL 与 intl 扩展)
  4. 访问 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,特别适合自建网络工具箱或部署在内网服务器上使用。

What’s your Reaction?
+1
0
+1
0
+1
0
+1
1
+1
0
+1
0
+1
0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Captcha Code

#9 #8 #73 #72 #71 #70 #7 #69 #68 #67 #66 #65 #64 #63 #62 #61 #60 #6 #59 #58 #57 #56 #55 #54 #53 #52 #51 #50 #5 #49 #48 #47 #46 #45 #44 #43 #42 #41 #40 #4 #39 #38 #37 #36 #35 #34 #33 #32 #31 #30 #3 #29 #28 #27 #26 #25 #24 #23 #22 #21 #20 #2 #19 #18 #17 #16 #15 #14 #13 #12 #11 #102 #101 #10 #1 #0126 #0124 #0122 #0121 #0120 #0119 #0118 #0117 #0116 #0115 #0114 #0113 #0112 #0111 #0110 #0109 #0108 #0107 #0106 #0105 #0104 #0103 #0102 #0100