在TOR中选择特定的出口节点(带Python代码)
我想用Python写一个简单的脚本,连接到TOR网络,并选择一个我指定国家的出口节点。比如说,我希望我所有的网络流量都通过TOR网络路由到西班牙。有没有什么办法可以做到这一点?
谢谢,
汤姆。
2 个回答
0
你不需要为每个中继写一个torrc文件。你可以通过stem动态传递参数来启动tor。例如:
import stem.process
tor_process = stem.process.launch_tor_with_config(
tor_cmd = PATH_TO_TOR_LAUNCHER,
config = {
'SOCKSPort': str(SOCKS_PORT),
'ControlPort': str(CTRL_PORT),
'DataDirectory': DATA_DIR,
'GeoIPFile': DATA_DIR + 'geoip',
'GeoIPv6File': DATA_DIR + 'geoip6',
'ExitNodes': '{es},{pt}' # exiting through Spain or Portugal
}
)
这些是Tor默认使用的地理位置数据库中的国家代码:http://dev.maxmind.com/geoip/legacy/codes/iso3166/
0
好的,我想我有个答案,虽然不是我最初想要的,但效果一样不错。
我可以在我的电脑上运行多个TOR中继,并在torrc文件中为每个中继配置我想要的出口节点,就像Robert Davey提到的那样。在我的Python脚本中,我可以创建几个进程,并把每个进程连接到不同的中继,这样就能得到不同的出口节点。你可以在这里找到一个例子: https://tor.stackexchange.com/questions/327/how-may-i-run-multiple-tor-relay-instances-in-a-single-linux-machine
如果我想在已经运行的中继中更改出口节点,我可以编辑相关TOR中继的torrc文件,并使用SIGHUP信号通过stem这个Python库来更新它:
from stem import Signal
from stem.control import Controller
with Controller.from_port(port = 9051) as controller:
controller.authenticate()
controller.signal(Signal.HUP)