我试图使用Stem
启动Tor连接,然后列出所选的节点。
使用其他问题和他们网站上的常见问题解答,我可以做一个或另一个,但不能两者都做。
例如,我可以用以下方式启动Tor电路
tor_process = stem.process.launch_tor_with_config(
config = {
'ControlPort': '2778',
'Log': [
'NOTICE stdout',
'ERR file /tmp/tor_error_log',
],
"MaxCircuitDirtiness" : str(60*60*24*30),
"NewCircuitPeriod" : str(60*60*24*30),
},
)
如果我使用here中的代码分别启动Tor,那么我可以分别查看电路节点。
但是,如果我尝试同时做这两者,例如:
from stem import CircStatus
from stem.control import Controller
import stem
import stem.connection
import stem.process
from stem.control import Controller
if __name__ == '__main__':
tor_process = stem.process.launch_tor_with_config(
config = {
'ControlPort': '2778',
'Log': [
'NOTICE stdout',
'ERR file /tmp/tor_error_log',
],
"MaxCircuitDirtiness" : str(60*60*24*30),
"NewCircuitPeriod" : str(60*60*24*30),
},
)
with Controller.from_port() as controller:
controller.authenticate()
for circ in controller.get_circuits():
if circ.status != CircStatus.BUILT:
continue # skip circuits that aren't yet usable
entry_fingerprint = circ.path[0][0]
entry_descriptor = controller.get_network_status(entry_fingerprint, None)
if entry_descriptor:
print "Circuit %s starts with %s" % (circ.id, entry_descriptor.address)
else:
print "Unable to determine the address belonging to circuit %s" % circ.id
tor_process.kill()
我得到一个错误:
Traceback (most recent call last):
File "circuit.py", line 22, in <module>
with Controller.from_port() as controller:
File "/usr/local/lib/python2.7/dist-packages/stem/control.py", line 1024, in from_port
control_port = stem.connection._connection_for_default_port(address)
File "/usr/local/lib/python2.7/dist-packages/stem/connection.py", line 1058, in _connection_for_default_port
raise exc
stem.SocketError: [Errno 111] Connection refused
通常是我尝试做某事而没有单独启动tor
时遇到的错误。
有没有办法将这两个操作结合起来?
编辑:有,我忘了在下面设置ControlPort
回答了我的问题。
答案 0 :(得分:1)
答案很简单,我忘记了在config
中设置端口,我设置了ControlPort : 2778
,但是打开了使用默认端口9051的Contoller.from_port()
。
使用Controller.from_port(port = 2778)
解决了该问题。