BrowserScan 实时展示网站可以观察到你的浏览器的哪些信息。UAParser.js 将原始 User-Agent 字符串和 Client Hints 转换为代码可操作的结构化字段。两者结合使用,可以填补任一工具单独无法覆盖的空白:BrowserScan 告诉你暴露了什么,而 UAParser.js 告诉你这些暴露信息在服务器端如何被解读。
本文介绍工作流程、设置步骤、实际示例以及这种组合解决的问题。

uaparser.dev 首屏截图。
BrowserScan 是一个免费的在线工具,用于分析浏览器指纹和隐私泄漏。它会报告你的 IP 地址、时区、位置、ISP、代理状态、黑名单状态以及指纹真实性评分。它还运行机器人检测信号,如 WebDriver 和 CDP 指标,以及 DNS 泄漏、WebRTC 泄漏、Canvas 指纹、插件、客户端提示和浏览器内核检查。
UAParser.js 是一个 JavaScript 库和 REST API,用于从 User-Agent 字符串和 Client Hints 中检测浏览器、操作系统、设备、CPU 架构、应用、机器人和 AI 爬虫。它返回结构化的客户端洞察,如浏览器名称和版本、操作系统名称和版本以及设备类型。它压缩并 gzip 后约 11.9 kB,通过 npm 分发,可在浏览器和 Node.js 中运行。
这两个工具回答不同的问题:
隐私审计需要这两个答案。在浏览器中看起来干净的指纹仍可能被解析器错误分类,而解析器的准确性取决于它接收到的信号。
navigator.userAgent 和浏览器发送的 Sec-CH-UA-* 标头。
www.browserscan.net 首屏截图。
打开 BrowserScan 并首先运行主指纹测试。注意以下内容:
保存截图或导出这些值。这是你后续每次比较的参考点。
如果你正在审计代理或 VPN 设置,请在更改任何内容之前也运行泄漏测试。要更深入地了解 IP 级别的暴露,请参阅用于浏览器指纹隐私的批量 IP 分析。
在浏览器控制台中,收集代码将要解析的字符串:
console.log(navigator.userAgent);
console.log(navigator.userAgentData?.brands);
console.log(navigator.userAgentData?.mobile);
在服务器端,记录传入的请求标头:
console.log(req.headers['user-agent']);
console.log(req.headers['sec-ch-ua']);
console.log(req.headers['sec-ch-ua-platform']);
console.log(req.headers['sec-ch-ua-mobile']);
这些是 UAParser.js 使用的相同输入。保留副本可以使不匹配可重现。

www.browserscan.net 首屏截图。
安装包或从 CDN 加载:
npm install ua-parser-js
<script src="https://cdn.jsdelivr.net/npm/ua-parser-js/dist/ua-parser.min.js"></script>
然后解析当前浏览器:
const uap = new UAParser();
const result = uap.getResult();
console.log(result.browser); // { name, version, major, type }
console.log(result.os); // { name, version }
console.log(result.device); // { model, type, vendor }
console.log(result.cpu); // { architecture }
自 v2.0.0 起,UAParser.js 可以接受 Client Hints 以及 User-Agent 标头。Client Hints 仅在安全上下文(localhost 或 HTTPS)以及基于 Chromium 的浏览器版本 85 及以上中有效:
const http = require('http');
const uap = require('ua-parser-js');
http.createServer(function (req, res) {
const hints = 'Sec-CH-UA-Full-Version-List, Sec-CH-UA-Mobile, Sec-CH-UA-Model, Sec-CH-UA-Platform, Sec-CH-UA-Platform-Version, Sec-CH-UA-Arch, Sec-CH-UA-Bitness';
res.setHeader('Accept-CH', hints);
res.setHeader('Critical-CH', hints);
const result = uap(req.headers).withClientHints();
res.end(JSON.stringify(result, null, 2));
}).listen(1337, '127.0.0.1');
有关完整的 API 接口,请参阅 UAParser.js 文档 和 HTML 快速入门。

www.browserscan.net 首屏截图。
将两份报告并排放置。下表展示了匹配和不匹配的样子。
| 信号 | BrowserScan 显示 | UAParser.js 返回 | 不匹配意味着什么 |
|---|---|---|---|
| 浏览器 | Chrome 139 | browser.name: "Chrome", version: "139.0.0.0" |
伪造或重写的 User-Agent |
| 操作系统 | macOS 15.6 | os.name: "macOS", version: "15.6" |
客户端提示和 User-Agent 不一致 |
| 设备类型 | 桌面 | device.type: "desktop" |
移动模拟或修改过的字符串 |
| 机器人信号 | 检测到 WebDriver | isBot() 返回 true |
自动化对两层都可见 |
UAParser.js 还暴露了辅助方法,如 isChromeFamily()、isBot() 和 isAICrawler()。使用它们以与后端相同的方式对流量进行分类。
假设 BrowserScan 报告 Windows 上的 Firefox,但你的服务器日志显示带有 Linux 平台提示的 Chrome User-Agent。解析请求标头:
const { browser, os } = uap(req.headers).withClientHints();
if (browser.name === 'Chrome' && os.name === 'Windows') {
// 标记:浏览器报告和服务器解析不一致
}
这种不一致正是指纹识别系统寻找的不一致性类型。BrowserScan 从浏览器端揭示它;UAParser.js 从服务器端揭示它。
BrowserScan 的机器人检测检查 WebDriver、CDP 和 navigator 属性。UAParser.js 通过分类已知的机器人和 AI 爬虫 User-Agent 字符串增加了第二层。对同一环境运行两者:
在信任测试环境之前,这两种模式都值得调查。
调整标头、代理设置或浏览器配置后,重复循环:BrowserScan 基线、原始信号捕获、UAParser.js 解析、比较。保留之前的结果,以便查看哪个更改移动了哪个信号。
当你只需要快速隐私检查、泄漏测试或指纹真实性评分时,单独使用 BrowserScan。它无需设置。
当你构建分析、个性化或流量分类,并且不需要审计浏览器自身的暴露时,单独使用 UAParser.js。
当你验证隐私设置、调试解析器、测试代理或 VPN,或调查不一致的流量分类时,两者都用。有关指纹工具的更广泛比较,请参阅 BrowserScan 与 Pixelscan.dev 和 WebBrowserTools 的对比 以及 2026 年浏览器隐私测试排名。
BrowserScan 是一个独立的在线测试平台。UAParser.js 是一个单独的 JavaScript 库。它们是互补工具,而不是一个产品的组件。
是的。UAParser.js 是同构的,使用单一 API 在浏览器和 Node.js 中工作。客户端提示解析需要安全上下文。
指纹是许多浏览器和设备信号的组合。User-Agent 解析是对其中一两个信号的结构化读取。BrowserScan 报告指纹;UAParser.js 结构化 User-Agent 和 Client Hints。
不一致通常来自伪造的 User-Agent 字符串、缺失的 Client Hints、重写标头的浏览器扩展或过时的解析器数据。比较两个输出是发现它们的方法。
UAParser.js 通过 npm 分发,并在 GitHub 上有长期的维护历史。查看其官方网站以获取当前的许可和包选项。
BrowserScan 和 UAParser.js 解决同一问题的不同部分。BrowserScan 揭示你的浏览器暴露了什么;UAParser.js 显示服务器如何将这些信号转换为浏览器、操作系统、设备和机器人分类。首先运行 BrowserScan,捕获原始信号,使用 UAParser.js 解析它们,然后进行比较。这个循环将一次性的隐私检查转变为可重复且可信的审计。