【问题标题】:TorCtl and Socksipy library raises exception in pythonTorCtl 和 Socksipy 库在 python 中引发异常
【发布时间】:2012-06-05 07:52:27
【问题描述】:

我正在用 python 编写脚本。
我的脚本使用 urllib2 来读取网页。
我正在使用Socksipy 强制 urllib2 使用 socks 代理 (TOR)。
我的问题是设置socket.socket TorCtl 后不起作用并引发异常。
不起作用的代码是(第一个 newTorId() 有效,第二个失败!):

  newTorId()      #This works
  import socks
  import socket
  socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "localhost", 9050)
  socket.socket = socks.socksocket
  newTorId()     #this Fails!

newTorId 是这样定义的:

from TorCtl import TorCtl
def newTorId():
    conn = TorCtl.connect(passphrase="test")
    conn.send_signal("NEWNYM")

例外是:

__init__() takes exactly 2 arguments (3 given)
Traceback (most recent call last):
  File "script.py", line 97, in <module>
    newTorId()
  File "script.py", line 27, in newTorId
    conn.send_signal("NEWNYM")
AttributeError: 'NoneType' object has no attribute 'send_signal'

有什么问题?

【问题讨论】:

    标签: python socks tor


    【解决方案1】:

    引发异常的是您自己的代码,而不是库。特别是,

    TorCtl.connect(passphrase="test")
    

    第二次返回None,导致在结果上调用.send_signal时出错。

    我假设newTorId() 旨在请求一个新的 Tor 身份。您可能应该只调用TorCtl.Connection.send_signal(conn, "NEWNYM") 来获取新身份,而不是每次都尝试创建新连接。见Python - Controlling Tor。

    【讨论】:

    • 您对编码标准是正确的,但这不是问题(也没有解决);因为如果每次TorCtl.connect 都应该创建一个TorCtl.Connection 的新对象,所以应该没有问题! (除了未关闭的系统套接字,我认为python会在newTorId()之后关闭它们)之后,如果我删除socket.socket = socks.socksocket行,问题就会解决!所以似乎将 Tor 分配给 SocksiPY 套接字会产生问题!
    • 我不是在谈论编码标准。显然TorCtl.connect() 正在返回None,不管它“应该”做什么。
    • 很明显 ;-) 你是对的!我不知道为什么它以这种方式工作,但您的解决方案有效;谢谢
    • 这如何解决问题? TorCtl.Connection.send_signal(conn, "NEWNYM") 依赖于与 conn.send_signal("NEWNYM") 相同的 conn 对象。如果是None,那么这两种解决方案都不起作用。
    【解决方案2】:

    如前所述,TorCtl 的 connect() 方法在连接失败时提供 None。

    除此之外,这个问题似乎经常出现(1,2)所以我只是添加了一个FAQ entry。 TorCtl is deprecated,所以这里有一个使用stem的例子...

    from stem import Signal
    from stem.control import Controller
    
    with Controller.from_port(port = 9051) as controller:
      controller.authenticate()
      controller.signal(Signal.NEWNYM)
    

    【讨论】:

      猜你喜欢
      • 2019-07-15
      • 2015-01-01
      • 2022-01-23
      • 2021-10-04
      • 2021-10-28
      • 1970-01-01
      • 2019-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多