Tor的干模块(python)失败了

时间:2013-08-22 05:51:56

标签: python networking tor

忍受我。这是我的第一篇帖子......

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,temporal和clean的东西,也没有一个hacked up bash脚本在重启tor之前重写torrc。 (在一个完美的世界中,我宁愿不写入隐藏的服务目录,但是还没有实现它。)

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

那么谁有想法为什么Stem不会让我做隐藏的服务呢?

1 个答案:

答案 0 :(得分:1)

感谢您通过我们bug tracker向我指出这一点。在这里回答这个问题。 :)

set_options() docs说......

  

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

这里的问题是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')])

希望这有帮助! -Damian