Tor、I2P 与代理
Maigret 可以将检查请求通过 HTTP/SOCKS 代理、Tor 网络或 I2P 转发。三个 CLI 参数分别对应三种不同目标 —— 弄清楚自己到底需要哪一个,是最常见的拦路虎。
--proxy 与 --tor-proxy(以及 --i2p-proxy)的区别
最常被问到的问题(参见 issue #544):
希望所有检查请求都通过 Tor 发出(比如你在 Tails 操作系统下、处于国家级封锁之后,或本机 IP 被限速)。→ 使用
--proxy并指向你的 Tor SOCKS 端口:maigret <username> --proxy socks5://127.0.0.1:9050只想访问 Maigret 数据库中的 ``.onion`` 站点,其它站点继续走你本机的正常连接。→ 使用
--tor-proxy:maigret <username> --tor-proxy socks5://127.0.0.1:9050--tor-proxy只对url为.onion域名的站点生效。其它站点会走你本机的直连(或者--proxy,如果你设置了的话)。如果不传--tor-proxy,.onion站点会被静默跳过。
--i2p-proxy 的逻辑相同:只对 .i2p 域名生效,绝不会用于明网站点。
默认值:--tor-proxy 默认为 socks5://127.0.0.1:9050,--i2p-proxy 默认为 http://127.0.0.1:4444。--proxy 没有默认值。Maigret 不会替你启动 tor 或 I2P 路由器 —— 请先把守护进程跑起来。
Tor 浏览器 vs 系统级 tor:端口号差异
不同的 Tor 安装方式监听的 SOCKS 端口不同:
系统级 ``tor`` 守护进程(
apt install tor、brew install tor、Tails)监听9050。Tor 浏览器套件自带的
tor监听在9150。
如果连接被拒绝,请换另一个端口试试:
# system tor
maigret <username> --proxy socks5://127.0.0.1:9050
# Tor Browser running in the background
maigret <username> --proxy socks5://127.0.0.1:9150
关于在 Tor 上结果的说明
大多数公共 WAF(Cloudflare、DDoS-Guard、AWS WAF、Akamai)都会默认封锁 Tor 出口节点,而且通常比封数据中心 IP 更激进。因此走 Tor 跑一次,通常会比从居民宽带跑同样一次得到更多 UNKNOWN、更少 CLAIMED。这不是 Maigret 的 bug,而是匿名带来的代价。
走 Tor 时推荐的参数:
maigret <username> --proxy socks5://127.0.0.1:9050 --timeout 60 --retries 2
--timeout 60—— Tor 链路会给每个请求增加 1–3 秒延迟;默认的 30 秒会导致虚假的超时。--retries 2—— 重试可以兜住 Tor 上很常见的短暂链路故障。可选项
-n 20—— 降低并发度(默认 100),减少被出口节点限速的概率。
如果你的主要目的是绕过 WAF(而不是保持匿名),那么住宅代理在表现上通常会远好于 Tor。具体可参见 TROUBLESHOOTING.md 中"Lots of sites fail / timeout / return 403" 一节。
在 Tails 操作系统下运行
Tails 会在网络层强制所有出站连接走 Tor。Maigret 不需要任何额外配置就能符合这一约束 —— 把 --proxy 指向 Tails 的 Tor 守护进程即可:
maigret <username> --proxy socks5://127.0.0.1:9050 --timeout 60
以下做法没有必要:
torsocks maigret …与torify maigret …—— 这类工具是包装 libc 的 socket 调用,但 Maigret 的 HTTP 客户端(aiohttp/curl_cffi)在网络 I/O 上绕过了 libc,所以这层包装实际上不会起作用。请改用--proxy。--tor-proxy—— 在 Tails 下,*所有*流量都必须走 Tor(由系统强制),因此--tor-proxy提供的“仅 .onion 走 Tor”这个小众模式在这里并不适用。
在 Tails 上通过 Tor 进行安装
pip 自己并不知道 Tor 的存在;在 Tails 上需要用 torsocks 把它包起来:
torsocks pip install --user maigret
安装完成后,可执行文件位于 ~/.local/bin/maigret。如果遇到 maigret: command not found,要么把 ~/.local/bin 加进 PATH,要么以 python3 -m maigret <username> 方式调用。
让 Maigret 跨 Tails 会话保留
除非你配置了 Tails 的“持久化存储”,否则 ~/.local/ 会在重启时被清空。这属于 Tails 的配置,与 Maigret 无关 —— 请参考官方文档:
issue #544 中有一位用户贡献的逐步操作配方(持久化 ~/.local/lib/python3.9 与 ~/.local/bin,并修改 .bashrc)。请把它当作起点即可:Tails 的 Python 版本和系统内部结构会随版本变化。
Tails 上的报告 —— 应该保存到哪里
默认的 reports/ 目录位于工作目录旁,会随这次健忘式会话一起被清空。要把报告保存到持久化的位置,可以传入 -fo:
maigret <username> --html -fo "/home/amnesia/Persistent/maigret-reports"
或者把 settings.json 中的 "reports_path" 设为一个持久化路径。详见 配置。
以 Python 库形式使用时的等价写法
上述全部选项都可以通过 Python API 使用。详见 作为库使用 —— 对应的关键字参数为 proxy=、tor_proxy= 和 i2p_proxy=,接受的 URL 格式与 CLI 选项完全一致。
延伸阅读
命令行选项 —— 上述三个参数的完整说明。
TROUBLESHOOTING.md —— 针对
.onion/ I2P 站点以及 WAF 触发的 403 问题的快速排查方案。作为库使用 —— 嵌入式使用场景下的代理选项。