Python 中带有 Stem 和 CherryPy 的洋葱服务器

问题描述

我想用 Python 中的 CherryPy 创建一个洋葱网站(使用 stem 访问 Tor 网络)。我的问题是站点的部署。为此,我采用了本文中的示例:https://jordan-wright.com/blog/2014/10/06/creating-tor-hidden-services-with-python/(很棒的文章,但最初与 Flask 结合使用,但这也适用于 CherryPy,反之亦然)。唯一的区别是 Flask 在 5000 端口上运行,CherryPy 在 8080 端口上运行(我在下面的代码中对其进行了更改)。

我的最终测试代码如下所示:

import cherrypy
from stem.control import Controller


class HelloWorld(object):
    @cherrypy.expose
    def index(self):
        return "Hello World!"


if __name__ == '__main__':
    
    port = 8080
    host = "127.0.0.1"
    hidden_svc_dir = '/home/python/'

    print(" * Getting controller")
    controller = Controller.from_port(address="127.0.0.1",port=9151)
    try:
        controller.authenticate(password="")
        controller.set_options([
            ("HiddenServiceDir",hidden_svc_dir),("HiddenServicePort","80 %s:%s" % (host,str(port)))
            ])
        svc_name = open(hidden_svc_dir + "/hostname","r").read().strip()
        print(" * Created host: %s" % svc_name)
    except Exception as e:
        print(e)
        
    cherrypy.quickstart(HelloWorld())
    

我的 /etc/tor/torrc 包含这个:

ControlPort 9051
HashedControlPassword xxx
CookieAuthentication 1

(我也试过使用/不使用密码和使用/不使用 Cookies 设置为 1 和 0 - 都带有相同的错误消息。)

虽然在其他代码中我使用了 stem / Tor 并且它们正常工作,但这个代码会抛出以下错误消息:

 * Getting controller
Traceback (most recent call last):
  File "/home/xxx/.local/lib/python3.6/site-packages/stem/socket.py",line 535,in _make_socket
    control_socket.connect((self.address,self.port))
ConnectionRefusedError: [Errno 111] Connection refused

During handling of the above exception,another exception occurred:

Traceback (most recent call last):
  File "onion_server_1.py",line 20,in <module>
    controller = Controller.from_port(address="127.0.0.1",port=9151)
  File "/home/xxx/.local/lib/python3.6/site-packages/stem/control.py",line 1033,in from_port
    control_port = stem.socket.ControlPort(address,port)
  File "/home/xxx/.local/lib/python3.6/site-packages/stem/socket.py",line 503,in __init__
    self.connect()
  File "/home/xxx/.local/lib/python3.6/site-packages/stem/socket.py",line 172,in connect
    self._socket = self._make_socket()
  File "/home/xxx/.local/lib/python3.6/site-packages/stem/socket.py",line 538,in _make_socket
    raise stem.socketError(exc)
stem.socketError: [Errno 111] Connection refused

我不知道为什么这不起作用。

一个有效的代码(从我上面采用的)会很棒。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...