TLS 指纹与身份预设
为什么有些站点只有 Ghost Downloader 能下,以及什么时候需要手动切换模拟身份。
为什么普通下载器会被拦
现代 CDN 和反爬系统(Cloudflare、Akamai 等)不只看 User-Agent 字符串。它们检查 TLS 握手阶段的 ClientHello 报文——密码套件的顺序、扩展列表、ALPN 协商方式——这些组合形成一个指纹。常见脚本语言的 HTTP 库(Python requests、Go net/http、curl 默认配置)发出的 ClientHello 和真实浏览器差异明显,服务器据此拒绝请求或返回验证页面。
Ghost Downloader 使用 wreq 库在 TLS 层完整复现真实浏览器的握手行为:密码套件、扩展顺序、HTTP/2 帧设置全部按目标浏览器的真实实现构造。服务器看到的是一个正常的浏览器连接,而不是一个下载工具。
全局默认:模拟身份
综合下载设置 → 模拟身份 控制 Ghost Downloader 发出请求时使用哪个浏览器的 TLS 指纹。
| 选项 | 行为 |
|---|---|
| 自动(匹配来源) | 默认值。 从浏览器扩展捕获的任务会携带来源浏览器的 User-Agent,Ghost Downloader 解析它并匹配最接近的指纹档案。手动添加的任务没有来源 User-Agent,退回 Chrome 最新版指纹。 |
| 不模拟(原样发送) | 不构造模拟指纹,TLS 握手使用 wreq 原生行为。请求标头里的 User-Agent 和 sec-ch-ua 会原样发送。仅在目标站点明确要求特定的请求签名时使用。 |
| Chrome / Edge / Firefox / Safari / Opera / OkHttp(最新) | 锁定到该浏览器家族的最新版本指纹。下拉菜单的子菜单里可以选择具体版本号(如 Chrome136、Firefox148)。 |
移动端浏览器也有对应的指纹家族:Firefox Android、Safari iOS、Safari iPad。当来源 User-Agent 表明请求来自移动设备时,自动模式会匹配到对应的移动端指纹。
身份预设:按域名自动切换
某些站点需要特殊的 TLS 指纹和 User-Agent 组合。Ghost Downloader 内置了一条预设:
| 名称 | TLS 指纹 | User-Agent | 匹配 Host |
|---|---|---|---|
| 百度网盘客户端 | 不模拟(原样发送) | pan.baidu.com | *.pcs.baidu.com |
当一个任务的下载 URL 的 Host 匹配到某条身份预设时,Ghost Downloader 会自动使用该预设的 TLS 指纹和 User-Agent,而不是全局默认值。已经在任务上手动指定过模拟身份的不受影响。
添加自定义预设
综合下载设置 → 模拟身份 → 添加预设,填写:
- 名称:任意标识。
- 匹配 Host:输入域名后按回车添加。支持精确匹配(
pcs.baidu.com)和通配符(*.pcs.baidu.com,匹配所有子域名)。一条预设至少需要一个 Host。 - TLS 指纹:选择浏览器指纹,或选跟随全局默认。
- User-Agent:留空则跟随 TLS 指纹自动生成。填写后会覆盖自动生成的值。
预设可以通过开关暂时禁用,不需要删除。
优先级
身份预设按列表顺序从上往下匹配,第一个匹配的生效。如果需要对同一域名的不同子域用不同预设,把更具体的 Host 放在前面。
什么时候需要手动动这些设置
大多数情况下保持默认的自动(匹配来源)即可。以下场景需要手动干预:
下载被 403 或 Cloudflare 拦截:在该任务上右键 → 编辑任务参数,把模拟身份从自动切换到具体的浏览器版本。某些 WAF 对最新版 Chrome 指纹放行但拦截旧版本。如果换了指纹仍然被拦,同时降低预分配线程数到 4 以下——高并发本身也是反爬特征。参考常见问题。
百度网盘等需要客户端伪装的站点:内置的「百度网盘客户端」预设已覆盖。如果遇到其他类似站点(需要特定 User-Agent 才能拿到直链),添加一条自定义身份预设。
通过 Aria2 RPC 接收的任务:Aria2 RPC 不携带浏览器信息。默认情况下这些任务使用不模拟(原样发送)。如果目标站点有 TLS 检测,在 Aria2 RPC 兼容 → 模拟浏览器指纹 里开启。
模拟身份和请求标头的关系
模拟身份开启时(即不是不模拟(原样发送)),请求标头里的 User-Agent 和 sec-ch-ua 系列标头由 TLS 指纹模拟层自动生成,你在请求标头编辑器里手动设置的这些值不会生效。如果需要完全控制所有请求标头,把模拟身份设为不模拟(原样发送)。
其他标头(Cookie、Referer、Accept 等)不受影响,始终原样发送。编辑单个任务的标头参考编辑任务。