0

忍受我。这是我的第一篇文章...

Tor 项目最近引入了 Stem 作为可加载的 Python 模块。我一直在玩它,看看它是否是一个可行的工具。我的结果好坏参半。

我尝试为控制器中的隐藏服务启用配置(它应该就像它直接来自 torrc 文件一样。它总是对我失败。这是我尝试的一个简单示例:

    #!/usr/bin/env python
    from stem.control import Controller
    controller = Controller.from_port(port = 9051)
    controller.authenticate()
    controller.set_options({'HIDDENSERVICEDIR':'/tmp/hiddenservice/','HIDDENSERVICEPORT':'1234 127.0.0.1:1234'})

...返回错误:

    InvalidRequest                            Traceback (most recent call last)
    /home/user/my/folder/<ipython-input-5-3921e9b46181> in <module>()
    /usr/local/lib/python2.7/dist-packages/stem/control.pyc in set_options(self, params, reset)
       1618         raise stem.InvalidRequest(response.code, response.message)
       1619       elif response.code in ("513", "553"):
    -> 1620         raise stem.InvalidRequest(response.code, response.message)
       1621       else:
       1622         raise stem.ProtocolError("Returned unexpected status code: %s" % response.code)

    InvalidRequest: Unacceptable option value: Failed to configure rendezvous options. See logs 

...以及 /var/log/tor/log 中的以下内容:

    Aug 1 10:10:05.000 [warn] HiddenServicePort with no preceding HiddenServiceDir directive
    Aug 1 10:10:05.000 [warn] Controller gave us config lines that didn't validate: Failed to configure rendezvous options. See logs for details.

如上所示,我已经使用 Stem 的“set_options”以及使用“set_conf”的两个单独命令进行了尝试。使用“set_conf”,我可以设置 HiddenServiceDir,但在设置端口时仍然失败,这让我觉得我对 Tor 有根本的误解。

我检查了我的电路,如果我有一个带有隐藏服务集合点的电路似乎并不重要;它一直在失败。我宁愿保持pythonic,临时和干净的东西,而不是在重新启动tor之前重写torrc的破解bash脚本。(在一个完美的世界中,我宁愿不写入隐藏的服务目录,但 tor 还没有实现。)

我尝试尽可能跨平台,但我正在使用 Tor 2.3.25 运行 Linux ......

那么谁知道为什么 Stem 不让我提供隐藏服务呢?

4

1 回答 1

1

感谢您通过我们的错误跟踪器向我指出这一点。在这里回答这个问题。:)

set_options () 文档说...

参数可以选择是键/值元组列表,尽管这种类型的参数有用的唯一原因是隐藏服务配置(这些选项取决于顺序)。

这里的问题是 Tor 的隐藏服务选项的行为方式与其所有其他配置选项略有不同。Tor 需要一个“HiddenServiceDir”,后跟与该隐藏服务关联的属性(它取决于顺序)。这是因为单个 tor 实例可以提供多个隐藏服务。

请更改您的呼叫从...

controller.set_options({'HIDDENSERVICEDIR':'/tmp/hiddenservice/','HIDDENSERVICEPORT':'1234 127.0.0.1:1234'})

...改为元组列表...

controller.set_options([('HiddenServiceDir', '/tmp/hiddenservice/'), ('HiddenServicePort', '1234 127.0.0.1:1234')])

希望这可以帮助!-达米安

于 2013-08-30T16:03:36.970 回答