
本仓库已不再维护。 请参考 Tor 项目的分支。
Exitmap 是一款基于 Python 的快速模块化扫描工具,用于探测 Tor 出口中继。Exitmap 模块可实现的任务可在(部分或全部)出口中继上运行。如果你有函数式编程背景,可以将 exitmap 视为针对 Tor 出口中继的 map() 接口:模块可以执行任何基于 TCP 的网络任务,比如获取网页、上传文件、连接 SSH 服务器或加入 IRC 频道。
实际应用中,exitmap 对监控出口中继的可靠性和可信度很有帮助。Tor 项目使用 exitmap 检查其 check 服务的假阴性问题,并发现 恶意出口中继。为 exitmap 开发新模块非常容易;只需查看 doc/ 目录下的 HACKING 文件,或参考现有模块即可。
Exitmap 利用 Stem 为所有指定出口中继创建电路。每当 Tor 通知 exitmap 已建立电路时,就会为新建立的电路调用一个模块。模块可以是纯 Python 脚本,也可以是可执行文件。如果是可执行文件,则需要 torsocks。
最后,请注意 exitmap 是一款网络测量工具,对普通 Tor 用户用处不大。Tor 项目已在定期运行此工具。额外的 exitmap 扫描只会造成不必要的网络负载。Exitmap 之所以公开提供,是因为其源代码和设计可能对某些人具有参考价值。
Exitmap 使用 Stem 库与 Tor 通信。安装 Stem 有 多种方式。最简单的方法是使用 pip 配合提供的 requirements.txt 文件:
$ pip install -r requirements.txt
Exitmap 唯一必须的参数是一个模块名称。例如,你可以通过运行以下命令,使用 checktest 模块运行 exitmap:
$ ./bin/exitmap checktest
命令行输出将显示 Tor 的启动过程、checktest 模块的输出以及扫描摘要。如果你不需要三跳,而是希望使用静态第一跳的两跳,可以运行:
$ ./bin/exitmap --first-hop 1234567890ABCDEF1234567890ABCDEF12345678 checktest
若仅对德国出口中继执行相同的测试,请执行:
$ ./bin/exitmap --country DE --first-hop 1234567890ABCDEF1234567890ABCDEF12345678 checktest
如果你想在电路创建之间暂停五秒以减轻 Tor 网络和扫描目标的负载,请运行:
$ ./bin/exitmap --build-delay 5 checktest
请注意,1234567890ABCDEF1234567890ABCDEF12345678 是一个伪指纹,你应该替换为自己控制的出口中继。
要了解 exitmap 的所有选项,请运行:
$ ./bin/exitmap --help
Exitmap 内置了以下模块:
默认情况下,exitmap 会尝试读取主目录中的 .exitmaprc 文件。该文件接受所有命令行选项,但你需要将短横线替换为下划线。以下是一个示例:
[Defaults]
first_hop = 1234567890ABCDEF1234567890ABCDEF12345678
verbosity = debug
build_delay = 1
analysis_dir = /path/to/exitmap_scans
不喜欢 exitmap?那么可以看看 tortunnel、 SoaT、 torscanner、 DetecTor 或 SelekTOR。
在提交拉取请求之前,请确保所有单元测试通过,运行:
$ pip install -r requirements-dev.txt
$ py.test --cov-report term-missing --cov-config .coveragerc --cov=src test
联系人:Philipp Winter [email protected]
OpenPGP 指纹:B369 E7A2 18FE CEAD EB96 8C73 CF70 89E3 D7FD C0D0