2013-08-22 142 views
0

忍受着我。這是我的第一篇文章...Tor的幹模塊(python)失敗

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以下/日誌/符/日誌:

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. 

我已經嘗試了這一點與上面看到的莖的「set_options」和兩個單獨的命令與「set_conf」。使用「set_conf」,我可以設置HiddenServiceDir,但在設置端口時它仍然會失敗,這讓我認爲我對Tor有一個基本的誤解。

我檢查了我的線路,如果我有一個隱藏的服務集合點,這似乎並不重要;它保持失敗。我寧願保持pythonic,暫時的和乾淨的東西,也不要在重新啓動tor之前重新編寫torrc。 (在完美的世界中,我寧願不寫入隱藏的服務目錄,但tor還沒有實現。)

我試圖儘可能跨平臺,但我正在運行Linux Tor 2.3.25 ...

那麼誰有想法爲什麼Stem不會讓我做隱藏的服務?

回答

0

感謝您通過我們的bug tracker指出這一點。在這裏回答。 :)

set_options() docs說...

The params can optionally be a list of key/value tuples, though the only reason this type of argument would be useful is for hidden service configuration (those options are order dependent).

這裏的問題是,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

+0

它可能是「更pythonic」有一個有序的字典那裏(在集合pkg中)。但是它的kargs構造函數也是無序的,這使得它很煩人。 –

+0

工程,耶!如果我嘗試了錯誤的方式,崩潰並重新進行身份驗證,我確實收到了「空套接字」錯誤。重新啓動我的腳本/ python-process/ipython正確的方式糾正所有錯誤... 和更隱藏的服務困境遵循... http://stackoverflow.com/questions/18777837/tors-stem-module-python-裝載的但不卸載,配置 – wayzard