IoT 工具箱网站源码 面向物联网工程师的在线工具箱

发布于 2026-09-22 阅读 12 分类:程序源码

demo演示:https://iotnr.com

IoT 工具箱

面向物联网开发、调试与运维的在线工具站。计算类工具全部在浏览器本地执行;网络调试类工具(MQTT / WebSocket)
会连接你填写的服务地址,报文不经过本站服务器。

目录结构

index.html              首页(搜索 / 分类 / 收藏)
tool.html               工具详情页(?id=工具ID)
privacy.html            隐私声明(页脚「隐私声明」入口,说明访问统计与本地存储)
assets/css/style.css    主题样式(主色 #5470c6)
assets/js/site-config.js 站点信息默认值(名称、备案、在线调试)
assets/js/core.js       工具注册框架(字段、结果块、搜索)
assets/js/common.js     通用算法(IP / CRC / MD5 / Base64 等)
assets/js/tools/*.js    各分类工具定义
assets/js/tool-page.js  工具页渲染、页脚、主题、toast
assets/js/home.js       首页渲染
assets/js/stats.js      访问统计前端(可选,依赖 api/stats.php)
assets/vendor/          Bootstrap 5.3、bootstrap-icons、MQTT.js(均已内置,无需外网)
admin/                  (可选)PHP 后台:站点信息与在线调试配置
api/stats.php           (可选)访问计数器:总访问量 / 当天访问量
data/site-config.json   (可选)后台写入的配置,前台优先读取
data/stats.json         (可选)访问统计计数文件
data/private/visits.log (可选)访问明细:时间 / IP / UA,目录已禁止外部访问
scripts/validate.mjs    工具定义与算法自检:node scripts/validate.mjs

部署

纯静态:整个目录上传到任意 Web 服务器 / OSS / CDN 即可,无需后端。站点信息改
assets/js/site-config.js

带后台(PHP 7.4+):把 admin/data/ 一起上传,浏览器访问 /admin/

  1. 首次访问设置管理口令(哈希写入 admin/secret.php,该文件直接访问不会输出内容);
  2. 可在线修改站点名称、标语、描述、版本、版权、联系方式、备案号;
  3. 可开关在线调试、设置默认 Broker 与预设列表;
  4. 保存后写入 data/site-config.json,前台刷新即生效。

注意事项:

  • data/ 目录需要可写;admin/secret.phpdata/ 不要提交到公开仓库。
  • 若服务器把页面编码定成 GBK(Apache/面板的 AddDefaultCharset GB2312),后台会自动把提交内容
    按 GB18030 还原成 UTF-8 并在界面上提示,建议仍把站点编码改回 UTF-8。
  • 后台「运行状态」面板带环境自检(PHP 版本、json/mbstring/iconv、GBK 还原、目录权限、配置编码)。

在线调试(MQTT / WebSocket)

  • 浏览器无法直接建立 TCP 连接,MQTT 必须使用 Broker 的 WebSocket 端口,形如
    wss://host:8084/mqtt;HTTPS 页面不能连接 ws:// 明文地址。
  • 公共 Broker(EMQX、HiveMQ、Mosquitto 测试服)上的消息任何人可见,不要发送敏感数据。
  • MQTT.js 已本地内置在 assets/vendor/mqtt/,只在这两个调试页面按需加载。
  • 后台可关闭在线调试开关,关闭后调试页只显示提示、不建立连接。

访问统计

首页 Hero 会显示「总访问 / 今日访问」,数据来自 api/stats.php

  • 每次页面浏览(首页与工具页)向 api/stats.php?action=hit 记一次;
  • 同一 IP 当天只记录一次(名单文件 data/private/seen-YYYY-MM-DD.txt,保留 31 天),
    当天重复浏览只返回当前统计、不再累加也不再写明细;
  • 计数写入 data/stats.jsonflock 加锁,按天保留最近 90 天);
  • 访问明细写入 data/private/visits.log,每条含时间、IP、UA、是否爬虫,最多保留最近 5000 条;
  • 常见爬虫 / 监控 UA 会记入明细但不计入访问量;
  • IP 取 X-Forwarded-For / X-Real-IP / CF-Connecting-IP / Remote-Addr 中第一个有效地址,
    兼容反向代理;UA 会去掉控制字符并截断到 300 字符;
  • 后台「访问统计 / 访问明细」卡片可查看最近 60 条明细、重置计数、清空明细;
  • 纯静态托管(没有 PHP)时首页这两个卡片自动隐藏,不影响其它功能。

合规提醒:IP 与 UA 属于个人信息,请在使用说明或隐私政策中如实告知访客用途与保留期限,
并定期在后台清空明细。data/private/ 已附带 .htaccess 禁止外部访问;
Nginx 用户请自行添加 location ^~ /data/private/ { deny all; },后台会在该文件缺失时给出红色告警。

自检

node scripts/validate.mjs   # 工具定义 + 算法测试向量
php -l admin/index.php      # 后台语法检查

更新已部署站点

页面里的本地 css/js 引用都带版本号(如 assets/js/tool-page.js?v=1.0.1),
这样改完文件后浏览器一定会重新拉取。发布新版本时请把 index.htmltool.html
admin/index.php 里的 ?v= 统一改成新版本号
(改样式或脚本必须先改,否则访客可能仍看到旧文件)。