如何从远程主机连接到Tor控制端口(9051)?

时间:2017-08-27 05:16:35

标签: python tor stem

我尝试使用词干python库从远程计算机连接到tor的控制端口(9051)。

dum.py

from stem import Signal
from stem.control import Controller


def set_new_ip():
    """Change IP using TOR"""
    with Controller.from_port(address = '10.130.8.169', port=9051) as controller:
        controller.authenticate(password='password')
            controller.signal(Signal.NEWNYM)
set_new_ip()

我收到以下错误

Traceback (most recent call last):
  File "/home/jkl/anaconda3/lib/python3.5/site-packages/stem/socket.py", line 398, in _make_socket
    control_socket.connect((self._control_addr, self._control_port))
ConnectionRefusedError: [Errno 111] Connection refused

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "dum.py", line 28, in <module>
    set_new_ip();
  File "dum.py", line 7, in set_new_ip
    with Controller.from_port(address = '10.130.4.162', port=9051) as controller:
  File "/home/jkl/anaconda3/lib/python3.5/site-packages/stem/control.py", line 998, in from_port
    control_port = stem.socket.ControlPort(address, port)
  File "/home/jkl/anaconda3/lib/python3.5/site-packages/stem/socket.py", line 372, in __init__
    self.connect()
  File "/home/jkl/anaconda3/lib/python3.5/site-packages/stem/socket.py", line 243, in connect
    self._socket = self._make_socket()
  File "/home/jkl/anaconda3/lib/python3.5/site-packages/stem/socket.py", line 401, in _make_socket
    raise stem.SocketError(exc)
stem.SocketError: [Errno 111] Connection refused

然后我浏览了/ etc / tor / torrc配置文件。 它说

  

Tor将从Tor监听本地连接的端口   控制器应用程序,如control-spec.txt中所述。

   ControlPort 9051
    ## If you enable the controlport, be sure to enable one of these
    ## authentication methods, to prevent attackers from accessing it.
    HashedControlPassword 16:E5364A963AF943CB607CFDAE3A49767F2F8031328D220CDDD1AE30A471
    SocksListenAddress 0.0.0.0:9050
    CookieAuthentication 1

我的问题是, 如何从远程主机连接到Tor的控制端口?
我需要设置任何解决方法或配置参数吗?

Stem is giving the "Unable to connect to port 9051" error可能没有答案的副本

2 个答案:

答案 0 :(得分:2)

除了ControlPort之外,您还需要设置ControlListenAddress。您可以将其设置为$cat .= array($category->getId() => $category->getName()); (绑定到所有地址)或服务器侦听的特定IP。

如果您选择这样做,最好将防火墙配置为仅允许来自特定IP的控制连接,并将其阻止来自所有其他IP。

另请注意,控制端口流量不会被加密,因此建议使用cookie身份验证,这样您的密码就不会通过网络发送。

您还可以运行隐藏服务以通过Tor公开控制端口,然后使用Stem和Tor连接到隐藏服务。

但一般的答案是需要将ControlListenAddress设置为绑定到127.0.0.1(localhost)以外的IP。

答案 1 :(得分:1)

经过Tor 0.3.3.7的测试。

ControlListenAddress的配置已过时,Tor将忽略该配置并记录以下消息

  

[警告]跳过过时的配置选项'ControlListenAddress'


您仍然可以在0.0.0.0:9051文件中将ControlPort设置为torrc。虽然,Tor对此并不十分满意(而且是这样),并且会警告您

  

您已将ControlPort设置为接受来自非本地的连接   地址。这意味着未在计算机上运行的程序可以   重新配置您的Tor。这很糟糕,因为控制器协议   没有加密!也许您应该只听127.0.0.1并使用   诸如stunnel或ssh之类的工具来加密与控件的远程连接   端口。

此外,您必须设置CookieAuthenticationHashedControlPassword,否则ControlPort将关闭

  

您已将ControlPort设置为接受来自以下设备的未经身份验证的连接   非本地地址。这意味着程序未在您的计算机上运行   电脑可以重新配置您的Tor,而无需猜测   密码。太糟糕了,我要为您关闭ControlPort。如果   您需要远程控制Tor,请尝试启用身份验证并   使用stunnel或ssh之类的工具来加密远程访问。

@ drew010的答案中提到的所有风险仍然存在。