Ali-hey-0/Browser-Data-Logger
GitHub: Ali-hey-0/Browser-Data-Logger
一款模块化的浏览器遥测与指纹收集研究工具包,通过并行收集器聚合数十种 Web API 数据并经 WebSocket 或 Telegram 交付。
Stars: 0 | Forks: 0
# 🌐 Browser Data Logger
**浏览器遥测、指纹与 Web API 研究工具包**
## ✨ 这是什么?
Browser Data Logger 是一个客户端 JavaScript 研究工具包,旨在探索现代浏览器 API 暴露的信息。
它从多个独立来源收集浏览器遥测数据,将结果标准化为单一报告,并可以通过以下方式传输收集到的数据:
- 📡 **WebSocket** — 机器可读的实时遥测
- 🤖 **Telegram Bot API** — 人类可读的报告及可选的媒体传输
本项目特意采用模块化的收集器架构构建。每个功能独立运行,并且故障会被隔离,允许不受支持或被阻止的浏览器 API 失败,而不会停止其余的收集流水线。
## 🧭 项目概览
| 层级 | 职责 |
|---|---|
| 🧩 **收集器** | 查询单个浏览器 API 和数据源 |
| 🧠 **聚合器** | 将结果合并为统一的遥测对象 |
| 🛡️ **错误隔离** | 防止一个 API 失败导致整个收集周期停止 |
| 📦 **格式化器** | 将收集的数据转换为兼容 Telegram 的报告 |
| 📡 **WebSocket 传输** | 传输结构化 JSON 事件和完整快照 |
| 🤖 **Telegram 传输** | 交付文本报告和可选的 JPEG 截图 |
| 🔁 **收集循环** | 定期重复收集过程 |
## 📚 目录
- [✨ 这是什么?](#-what-is-this)
- [🧭 项目概览](#-project-at-a-glance)
- [🧰 功能](#-capabilities)
- [🏗️ 架构](#️-architecture)
- [🔄 收集生命周期](#-collection-lifecycle)
- [⚡ 快速开始](#-quick-start)
- [⚙️ 配置](#️-configuration)
- [📡 WebSocket 集成](#-websocket-integration)
- [🤖 Telegram 集成](#-telegram-integration)
- [📊 数据目录](#-data-catalog)
- [🔐 权限与浏览器限制](#-permissions--browser-restrictions)
- [🔒 安全与隐私](#-security--privacy)
- [⚠️ 已知限制](#️-known-limitations)
- [🛠️ 故障排除](#️-troubleshooting)
- [🗺️ 路线图](#️-roadmap)
- [🤝 贡献](#-contributing)
- [📜 许可证](#-license)
## 🧰 功能
本项目围绕独立的数据收集模块进行组织。
🖥️ 浏览器与设备遥测
收集浏览器和执行环境元数据,例如: - User agent - 平台 - 首选语言和语言列表 - 屏幕分辨率 - 颜色深度 - 设备像素比 - 时区 - 硬件并发数 - 设备内存(在暴露的情况下) - 触摸支持 - WebDriver 标志 - Referrer - 当前 URL - 窗口尺寸 - 屏幕方向 - JavaScript 堆信息(在可用的情况下) - 基本性能计时信息 静态值在第一次收集周期后会被缓存在内存中。
🎨 指纹收集面
探索多种浏览器指纹收集面: | 收集面 | 检查内容 | |---|---| | 🖼️ **Canvas** | Canvas 渲染输出 | | 🎮 **WebGL** | 渲染器、供应商、版本、支持的扩展 | | 🔊 **Audio** | 音频上下文特征 | | 🔤 **Fonts** | 选定字体的可用性 | | 🧱 **WebAssembly** | 基本的 WASM 支持 |
🌐 网络与位置
项目可以结合: - 公共 IP 查询 - 基于 IP 的地理定位元数据 - ISP / 组织信息 - ASN - 时区 - 大致坐标 - 浏览器地理位置(在可用且被允许的情况下) - 通过 OpenStreetMap Nominatim 进行反向地理编码 本项目尝试区分浏览器提供的精确位置和基于 IP 的大致位置。
🔋 运行时与连接状态
在浏览器支持的情况下: - 电池电量 - 充电状态 - 充电和放电预估时间 - 有效网络类型 - 预估下行速率 - RTT - 数据节省状态 某些状态更改可以作为实时 WebSocket 事件转发。
📱 传感器与硬件 API
收集器可以探测浏览器可访问的功能,包括: - 加速度计数据 - 设备方向 - 环境光传感器 - 游戏手柄 - MIDI 设备 - USB 设备 - WebXR 沉浸式 VR 支持
📋 存储与客户端状态
当前实现会检查以下内容的可用性及可访问内容: - 当前文档可用的 Cookies - `localStorage` - `sessionStorage` - IndexedDB 可用性 - 导航历史元数据
🎙️ 媒体 API
在获得浏览器权限且处于安全上下文的前提下,项目可以与以下内容进行交互: - 🎤 麦克风输入 - 📸 摄像头输入 - 🖥️ 屏幕共享 生成的媒体数据在传输前会被转换为 JPEG 或元数据表示形式。
⌨️ 交互遥测
收集器可以观察页面生命周期内的选定交互事件,包括: - 键盘事件 - 鼠标移动 - 点击事件 为了减少无限制的增长,当前实现对某些交互收集进行了限制。
📡 多通道交付
收集到的信息可以通过两个独立的通道进行交付: **WebSocket** 适用于以下场景的结构化 JSON: - 仪表板 - 监控系统 - 事件流水线 - 自定义分析工具 **Telegram** 人类可读的报告,附带可选的 JPEG 媒体附件。 两种交付路径均实现了带有指数退避的重试机制。
IP 元数据
``` { "ipDetails": { "city": "Example City", "country": "Example Country", "asn": "AS12345" } } ```电池更新
``` { "batteryUpdate": { "charging": true, "timestamp": "2026-07-21T14:22:10.123Z" } } ```交互事件
``` { "interaction": "Click:320,540:123456.78" } ```完整收集快照
``` { "timestamp": "2026-07-21T14:22:10.123Z", "isSecure": true, "deviceInfo": {}, "network": {}, "battery": {} } ```🖥️ 设备元数据
| 数据 | 可用性 | |---|---| | User agent | 通常可用 | | 平台 | 通常可用 | | 语言 | 通常可用 | | 屏幕尺寸 | 通常可用 | | 像素比 | 通常可用 | | 时区 | 通常可用 | | CPU 核心数 | 取决于浏览器 | | 设备内存 | 取决于浏览器 | | 触摸支持 | 通常可用 | | WebDriver 标志 | 取决于浏览器 | | Referrer | 取决于导航上下文 | | JavaScript 堆 | 取决于浏览器 |
🎨 指纹识别
本项目检查: - Canvas 渲染 - WebGL 渲染器信息 - WebGL 供应商信息 - 支持的 WebGL 扩展 - 音频上下文特征 - 选定字体的可用性 - WebAssembly 支持
🌐 网络
项目可以收集: - 公共 IP 地址 - 大致的 IP 位置 - ISP / 组织 | ASN - 地区与国家 - 邮政编码 - 时区 - 大致坐标 该实现使用外部服务进行 IP 和地理定位信息扩充。
📍 地理定位
在可用且被允许的情况下: ``` Browser Geolocation │ ▼ Latitude / Longitude │ ▼ Reverse Geocoding │ ▼ Human-Readable Address ``` 如果浏览器地理定位失败,在可用时,该实现可能会保留基于 IP 的大致位置信息。
🔋 电池与网络状态
**电池数值**可能包括: - 电池百分比 - 充电状态 - 充电时间 - 放电时间 **网络数值**可能包括: - 有效连接类型 - 预估下行速率 - RTT - 数据节省状态
📱 传感器
支持的环境可能会暴露: - 加速度计读数 - 设备方向 - 环境光照度 可用性因浏览器、操作系统、设备、权限模型和安全上下文要求而有很大差异。
📦 存储
``` Cookies ├── document.cookie localStorage ├── Key/value data available to the current origin sessionStorage ├── Session-scoped key/value data IndexedDB └── Availability ``` 浏览器的同源策略仍然有效。
🖧 WebRTC
项目创建一个临时的对等连接,并观察浏览器暴露的 ICE 候选信息。生成的数据可能包含本地暴露的网络地址,具体取决于: - 浏览器实现 - WebRTC 隐私保护 - 网络配置 - mDNS 混淆
🎙️ 麦克风
在获得许可的情况下,实现步骤如下: 1. 请求麦克风访问权限 2. 创建音频上下文 3. 分析音频流 4. 提取基本的频域元数据 5. 停媒体轨道 当前实现发送的是元数据,而不是存储连续的录音。
📸 摄像头
摄像头模块: 1. 枚举视频输入设备 2. 尝试多种摄像头约束 3. 捕获单帧 4. 将该帧转换为 JPEG 5. 通过配置的交付通道发送生成的图像
🖥️ 屏幕截图
屏幕截图模块使用浏览器原生的屏幕共享 API。用户必须与浏览器的权限对话框进行交互。收集器不会在静默状态下绕过浏览器原生的屏幕共享权限流程。
⌨️ 交互事件
``` Keyboard Events │ ├── Key └── Timestamp Mouse Events │ ├── Movement ├── Coordinates └── Timestamp Click Events │ ├── Coordinates └── Timestamp ```
🎮 硬件与扩展 API
附加的功能检查包括:
Telegram 消息未到达
检查: - Bot token - Chat ID - 网络连接 - Telegram API 可用性 - `DEBUG = true` 时的浏览器控制台输出
摄像头或麦克风访问失败
检查: - HTTPS 或 `localhost` - 浏览器权限状态 - 操作系统权限 - 是否有其他应用程序正在使用该设备
地理定位失败
可能的原因: - 用户拒绝许可 - 没有可用的位置提供程序 - 浏览器限制 - 超时 - 不安全的上下文 在可用的情况下,实现可能会回退到基于 IP 的大致位置。
WebSocket 连接失败
验证您的 `WS_URL`: ``` WS_URL │ ├── Correct protocol (ws:// or wss://) ├── Correct hostname ├── Correct port └── Server is running ``` 本地开发使用 `ws://`,受 TLS 保护的部署使用 `wss://`。
脚本似乎停止了
启用调试日志记录: ``` const DEBUG = true; ``` 然后检查浏览器控制台是否有错误。
为浏览器研究、API 实验和安全教育而构建。
由 Ali-Hey-0 使用 ❤️ 和 JavaScript 制作
由 Ali-Hey-0 使用 ❤️ 和 JavaScript 制作
标签:数据可视化, 自定义脚本