08-04-2023, 01:14 PM
carml 是一个命令行、管道友好的工具,用于探索和控制正在运行的 Tor 守护进程。大多数子命令都会引起开发人员和修补者的兴趣;最终用户会对其中一些感兴趣。这篇文章主要关注开发人员和修补者。
carml 是一个使用 Twisted 和我的库 txtorcon 编写的 Python 程序。如果您熟悉 Python,请创建一个新的 virtualenv 并 pip install carml。有更详细的安装说明可用。一旦成功,您应该能够输入 carml 并查看帮助输出。
连接到 Tor
carml 的工作方式有点像 git,因为正常调用是 carml 后跟一些全局选项,然后是带有自己选项的子命令。最有用的全局选项是 --connect <endpoint> 它告诉 carml 如何连接到控制端口。从技术上讲,这可以是任何 Twisted 客户端端点字符串,但对于 Tor 来说,它是 tcp:<port> (或简单的端口)或 unix:/var/run/tor/control(对于 unix 套接字)之一。
对于 Tor 浏览器捆绑包,请使用 carml --connect 9151。通常可以通过 carml --connect 9051 或 carml --connect unix:/var/run/tor/control 访问“系统”Tor。您可能需要在配置中启用控制端口并重新加载(或重新启动)Tor。更多详细信息请参阅文档。
开始探索
最有趣的通用命令可能是 carml monitor —— 尝试运行它一段时间,你可以看到你的 Tor 客户端正在做什么。这可以很好地洞察 Tor 的行为。
通过 carml graph 可以获取(非常基本的)使用情况图,以查看您正在使用的带宽(这需要进行扩展 - 欢迎 PR!)
显式电路
有时,您想使用特定的电路。例如,您试图确认某个退出可能存在恶意活动。我们可以组合 carml circ 和 carml stream 命令:
这意味着形成一条 3 跳环路,穿过任何入口警卫、任何中间,然后是一个特定出口(由 ID 标识)。您可以*=通过名称进行识别(前提是它是唯一的!),但强烈建议使用哈希值。当然,您也可以明确选择其他跃点。请注意,星星仍然将选择留给 carml / txtorcon,它们不能(也不会)使用 Tor 的精确选择算法。
接下来,您需要将电路实际连接到该流。它会打印出类似“Circuit ID 1234”的内容。现在我们可以使用 carml 流:
这将导致所有新流附加到电路 1234(直到我们退出 carml 流命令)。在另一个终端中,尝试 torsocks curl https://www.torproject.org通过新电路访问 Tor 项目的网站。一旦您终止上述 carml 流命令,Tor 将再次通过其正常算法选择电路。
请注意,目前无法附加发往洋葱服务的流(这是 Tor 的限制,请参阅connection_edge.c)。
调试 Tor
控制协议显示所有 Tor 事件,其中包括 INFO 和 DEBUG 日志记录事件。这使您可以通过 carml events 命令轻松打开 DEBUG 和 INFO 日志记录:
这当然可以通过 grep 或其他任何东西进行管道传输。您可以为 carml 事件指定 --count,这对于其他一些事件很有用。
例如,如果您想在每次发布新的共识文件时“做某事”,您可以这样做:
这将等到恰好产生一个 NEWCONSENSUS 事件,将其内容转储到 stdout (这将是新的共识)并退出。使用运行上述内容的 bash 脚本(可能通过管道传输到 /dev/null),您可以确保在继续之前有新的共识可用。
Tor 发出的事件记录在 torspec 第 4.1 节中。您可以使用 carml 通过 carml events --list 来列出它们。
另一个例子可能是您希望确保您的中继每小时仍列在共识中。一种方法是在每小时快点之前安排一个 cron 作业,其执行如下操作:
原始命令
您可以通过 carml cmd 子命令向 Tor 发出原始控制端口命令。它负责身份验证等,并在命令成功(或错误)时退出。这对于测试正在开发的新命令等很有用(因为输入/输出没有以任何方式验证)。
cmd 之后的每个参数在发送到 Tor 之前都会用空格连接在一起,这样您就不必引用内容。
最终用户命令
简而言之,旨在“对最终用户有用”的命令是:
carmlastebin:创建一个新的隐藏服务并为其提供目录、单个文件或标准输入。您可以在另一侧与 carml copybin 或简单的 torsock cur... 结合使用。仍然是安全分发地址的“读者练习”。
carml tbb:下载、验证并运行新的 Tor 浏览器包。这固定了 torproject.org 的公钥,并捆绑了签署捆绑包的可能嫌疑人的密钥。现在 TBB 自动更新已经不太有用了。
carml newid:发送 NEWNYM 信号,该信号会清除 DNS 缓存并导致 Tor 不会为新请求重新使用任何现有电路。
carml 监视器向您显示 Tor 当前正在做什么。同样,carml 图表仅显示当前的输入/输出带宽。
纯娱乐
可以提供数小时娱乐的命令包括:
我希望你觉得 carml 很有用。欢迎在carml 的 GitHub 页面上提出建议、错误和修复。
也可以看看
还有一个基于 Curses 的 Tor 工具,称为ARM(博客文章)。目前它正在被重写为“Nyx”。
carml 是一个使用 Twisted 和我的库 txtorcon 编写的 Python 程序。如果您熟悉 Python,请创建一个新的 virtualenv 并 pip install carml。有更详细的安装说明可用。一旦成功,您应该能够输入 carml 并查看帮助输出。
连接到 Tor
carml 的工作方式有点像 git,因为正常调用是 carml 后跟一些全局选项,然后是带有自己选项的子命令。最有用的全局选项是 --connect <endpoint> 它告诉 carml 如何连接到控制端口。从技术上讲,这可以是任何 Twisted 客户端端点字符串,但对于 Tor 来说,它是 tcp:<port> (或简单的端口)或 unix:/var/run/tor/control(对于 unix 套接字)之一。
对于 Tor 浏览器捆绑包,请使用 carml --connect 9151。通常可以通过 carml --connect 9051 或 carml --connect unix:/var/run/tor/control 访问“系统”Tor。您可能需要在配置中启用控制端口并重新加载(或重新启动)Tor。更多详细信息请参阅文档。
开始探索
最有趣的通用命令可能是 carml monitor —— 尝试运行它一段时间,你可以看到你的 Tor 客户端正在做什么。这可以很好地洞察 Tor 的行为。
通过 carml graph 可以获取(非常基本的)使用情况图,以查看您正在使用的带宽(这需要进行扩展 - 欢迎 PR!)
显式电路
有时,您想使用特定的电路。例如,您试图确认某个退出可能存在恶意活动。我们可以组合 carml circ 和 carml stream 命令:
代码:
carml circ --build "*,*,4D08D29FDE23E75493E4942BAFDFFB90430A81D2"
这意味着形成一条 3 跳环路,穿过任何入口警卫、任何中间,然后是一个特定出口(由 ID 标识)。您可以*=通过名称进行识别(前提是它是唯一的!),但强烈建议使用哈希值。当然,您也可以明确选择其他跃点。请注意,星星仍然将选择留给 carml / txtorcon,它们不能(也不会)使用 Tor 的精确选择算法。
接下来,您需要将电路实际连接到该流。它会打印出类似“Circuit ID 1234”的内容。现在我们可以使用 carml 流:
代码:
carml stream --attach 1234
这将导致所有新流附加到电路 1234(直到我们退出 carml 流命令)。在另一个终端中,尝试 torsocks curl https://www.torproject.org通过新电路访问 Tor 项目的网站。一旦您终止上述 carml 流命令,Tor 将再次通过其正常算法选择电路。
请注意,目前无法附加发往洋葱服务的流(这是 Tor 的限制,请参阅connection_edge.c)。
调试 Tor
控制协议显示所有 Tor 事件,其中包括 INFO 和 DEBUG 日志记录事件。这使您可以通过 carml events 命令轻松打开 DEBUG 和 INFO 日志记录:
代码:
carml events INFO DEBUG
这当然可以通过 grep 或其他任何东西进行管道传输。您可以为 carml 事件指定 --count,这对于其他一些事件很有用。
例如,如果您想在每次发布新的共识文件时“做某事”,您可以这样做:
代码:
carml events --once NEWCONSENSUS
这将等到恰好产生一个 NEWCONSENSUS 事件,将其内容转储到 stdout (这将是新的共识)并退出。使用运行上述内容的 bash 脚本(可能通过管道传输到 /dev/null),您可以确保在继续之前有新的共识可用。
Tor 发出的事件记录在 torspec 第 4.1 节中。您可以使用 carml 通过 carml events --list 来列出它们。
另一个例子可能是您希望确保您的中继每小时仍列在共识中。一种方法是在每小时快点之前安排一个 cron 作业,其执行如下操作:
代码:
carml events --once NEWCONSENSUS | grep
# log something useful if grep didn't find anything
原始命令
您可以通过 carml cmd 子命令向 Tor 发出原始控制端口命令。它负责身份验证等,并在命令成功(或错误)时退出。这对于测试正在开发的新命令等很有用(因为输入/输出没有以任何方式验证)。
cmd 之后的每个参数在发送到 Tor 之前都会用空格连接在一起,这样您就不必引用内容。
代码:
carml cmd getinfo info/names
carml cmd ADD_ONION NEW:BEST Port=1234
最终用户命令
简而言之,旨在“对最终用户有用”的命令是:
carmlastebin:创建一个新的隐藏服务并为其提供目录、单个文件或标准输入。您可以在另一侧与 carml copybin 或简单的 torsock cur... 结合使用。仍然是安全分发地址的“读者练习”。
carml tbb:下载、验证并运行新的 Tor 浏览器包。这固定了 torproject.org 的公钥,并捆绑了签署捆绑包的可能嫌疑人的密钥。现在 TBB 自动更新已经不太有用了。
carml newid:发送 NEWNYM 信号,该信号会清除 DNS 缓存并导致 Tor 不会为新请求重新使用任何现有电路。
carml 监视器向您显示 Tor 当前正在做什么。同样,carml 图表仅显示当前的输入/输出带宽。
纯娱乐
可以提供数小时娱乐的命令包括:
代码:
carml xplanet
carml tmux
我希望你觉得 carml 很有用。欢迎在carml 的 GitHub 页面上提出建议、错误和修复。
也可以看看
还有一个基于 Curses 的 Tor 工具,称为ARM(博客文章)。目前它正在被重写为“Nyx”。