通过 stem 的多个 Tor 实例
multiple Tor instances through stem
我正在开发一个脚本,使用 stem 创建 3 个 Tor 实例,来自 stem 教程 "to Russia with love"。
def print_bootstrap_lines(line):
if "Bootstrapped " in line:
print(term.format(line, term.Color.BLUE))
def main():
SocksPort=9050
#print(str(SocksPort))
i=0
while i<2:
tor_process=stem.process.launch_tor_with_config(
config={
'SocksPort':str(SocksPort),
'ControlPort':str(SocksPort+1),
'ExitNodes':'{ru}',
'StrictNodes':'1',},
init_msg_handler=print_bootstrap_lines,
)
SocksPort=SocksPort+2
i=i+1
创建第一个实例后,打印出 return 错误:
OSError: Process terminated: No, it's still there. Exiting.
launch_tor_with_config() 函数确实会使用一个临时的新 torrc 文件启动 tor,一旦 tor 实例为 killed/stopped,该文件就会被删除。
但我注意到有一个锁定文件,就像您中断 Linux 包管理器更新时所拥有的文件一样,但它位于
~/.tor/lck
所以在启动新实例之前,请确保等待锁定文件出现,然后从脚本中删除它,这样多个 tor 实例就会成功创建。
只需为每个线程设置不同的 "DataDirettory"。
self.tor_process = stem.process.launch_tor_with_config(
config={
'SocksPort':str(self.SocksPort),
'ControlPort':str(self.ControlPort),
'ExitNodes':self.ExitNodes,
'StrictNodes':self.StrictNodes,
'DataDirectory': path,
'Log': [
'NOTICE stdout',
'ERR file /tmp/tor_error_log',
],
},
#init_msg_handler=self.print_bootstrap_lines(),
)
我正在开发一个脚本,使用 stem 创建 3 个 Tor 实例,来自 stem 教程 "to Russia with love"。
def print_bootstrap_lines(line):
if "Bootstrapped " in line:
print(term.format(line, term.Color.BLUE))
def main():
SocksPort=9050
#print(str(SocksPort))
i=0
while i<2:
tor_process=stem.process.launch_tor_with_config(
config={
'SocksPort':str(SocksPort),
'ControlPort':str(SocksPort+1),
'ExitNodes':'{ru}',
'StrictNodes':'1',},
init_msg_handler=print_bootstrap_lines,
)
SocksPort=SocksPort+2
i=i+1
创建第一个实例后,打印出 return 错误:
OSError: Process terminated: No, it's still there. Exiting.
launch_tor_with_config() 函数确实会使用一个临时的新 torrc 文件启动 tor,一旦 tor 实例为 killed/stopped,该文件就会被删除。
但我注意到有一个锁定文件,就像您中断 Linux 包管理器更新时所拥有的文件一样,但它位于
~/.tor/lck
所以在启动新实例之前,请确保等待锁定文件出现,然后从脚本中删除它,这样多个 tor 实例就会成功创建。
只需为每个线程设置不同的 "DataDirettory"。
self.tor_process = stem.process.launch_tor_with_config(
config={
'SocksPort':str(self.SocksPort),
'ControlPort':str(self.ControlPort),
'ExitNodes':self.ExitNodes,
'StrictNodes':self.StrictNodes,
'DataDirectory': path,
'Log': [
'NOTICE stdout',
'ERR file /tmp/tor_error_log',
],
},
#init_msg_handler=self.print_bootstrap_lines(),
)