TorCtl和Socksipy库在python中引发异常

时间:2012-06-05 07:52:28

标签: python socks tor

我正在用python编写脚本 我的脚本使用urllib2来阅读网页 我正在使用Socksipy强制urllib2使用socks proxy(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'

有什么问题?

2 个答案:

答案 0 :(得分:1)

这是你自己的代码提出异常,而不是库。特别地,

TorCtl.connect(passphrase="test")

第二次返回None,当您在结果上调用.send_signal时会出错。

我认为newTorId()旨在请求新的Tor身份。您可能只需要调用TorCtl.Connection.send_signal(conn, "NEWNYM")来获取新标识,而不是每次都尝试创建新连接。请参阅Python - Controlling Tor

答案 1 :(得分:0)

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

除此之外,这个问题似乎经常出现(12)所以我刚为它添加了FAQ entryTorCtl 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)