【问题标题】:Tor's stem module (python) failingTor的主干模块(python)失败
【发布时间】:2013-08-22 05:51:55
【问题描述】:

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

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的黑客攻击脚本。 (在理想情况下,我宁愿不写入隐藏的服务目录,但 tor 还没有实现。)

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

那么谁知道为什么 Stem 不让我做一个隐藏的服务呢?

【问题讨论】:

    标签: python networking tor


    【解决方案1】:

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

    set_options() docs 说...

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

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

    希望这会有所帮助! -达米安

    【讨论】:

    • 在那里(在集合 pkg 中)有一个有序的 dict 可能是“更 Pythonic”。但是它的 kargs 构造函数也是无序的,这使得使用起来很烦人。
    • 工作,耶!如果我尝试错误的方式、崩溃并重新进行身份验证,我确实会收到“空套接字”错误。以正确的方式重新启动我的脚本/python-process/ipython 纠正了所有错误......还有更多隐藏的服务问题......stackoverflow.com/questions/18777837/…
    猜你喜欢
    • 1970-01-01
    • 2020-06-19
    • 2022-12-03
    • 2021-01-18
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-01
    相关资源
    最近更新 更多