gpt4 book ai didi

python - 多个 TOR 导出节点 - Controller 不工作?

转载 作者:行者123 更新时间:2023-12-01 05:08:49 31 4
gpt4 key购买 nike

我正在尝试将多个 TOR 导出节点与 Selenium 一起使用,并且我正在尝试创建一个更改多个身份的函数。然而,它没有,并且不返回任何错误。我相信我的代码存在问题,我无法完全弄清楚。也许 Controller 出现故障?

(我将 stderr() 输出到文件中,但每次都没有得到任何结果。而且我还杀死了 TOR 的每个进程)

这是我的代码:

import socks
import socket
import subprocess
import stem.connection
import stem.socket
from selenium import webdriver
from stem.control import Controller

global requiredTorRelays
global child_pid
global relays
global driver
requiredTorRelays = math.ceil(_.MAX_FBTC_ACCOUNTS_/270)
driver = []
child_pid = []

def initTor(i):
print("\n[+] TOR NETWORK "+str(i)+" INITIALIZING...")
print(" - Updating Preferences...")
ff_prof = webdriver.FirefoxProfile()

ff_prof.set_preference( "places.history.enabled", False )
ff_prof.set_preference( "privacy.clearOnShutdown.offlineApps", True )
ff_prof.set_preference( "privacy.clearOnShutdown.passwords", True )
ff_prof.set_preference( "privacy.clearOnShutdown.siteSettings", True )
ff_prof.set_preference( "privacy.sanitize.sanitizeOnShutdown", True )
ff_prof.set_preference( "signon.rememberSignons", False )
ff_prof.set_preference( "network.cookie.lifetimePolicy", 2 )
ff_prof.set_preference( "network.dns.disablePrefetch", True )
ff_prof.set_preference( "network.http.sendRefererHeader", 0 )

ff_prof.set_preference( "network.proxy.type", 1 )
ff_prof.set_preference( "network.proxy.socks_version", 5 )
ff_prof.set_preference( "network.proxy.socks", '127.0.0.1' )
ff_prof.set_preference( "network.proxy.socks_port", 9050+i )
ff_prof.set_preference( "network.proxy.socks_remote_dns", True )
ff_prof.set_preference( "browser.link.open_newwindow.restriction", 1 )

ff_prof.set_preference( "javascript.enabled", True )
ff_prof.update_preferences()
print(" - Opening Browser...")
os.environ['DISPLAY'] = ':99'
driver.extend([webdriver.Firefox(ff_prof)])

if(i==0):
j=''
else:
j=str(i)

tor_path = _.TOR_PATH_
DETACHED_PROCESS = 0x00000008

print(" - Starting TOR Process...")

tor_process = subprocess.Popen( '"'+_.TOR_PATH_+'" --RunAsDaemon 1 --CookieAuthentication 1 --HashedControlPassword "'+_.TOR_HASHED_PASS_+'" --ControlPort '+str(9060+i)+' --PidFile tor'+j+'.pid --SocksPort '+str(9050+i)+' --DataDirectory data/tor'+j, creationflags=DETACHED_PROCESS)
child_pid.extend([tor_process.pid])
print(" - Starting TOR Controller...")

C_PORT=int(9060+i)

## Function to check how many TOR Configuration Files are present
def checkNoTorFolders():
torCount = 0
folders = next(os.walk("data/"))[1]
for folder in folders:
if(folder[0:3]=="tor"):
torCount+=1
return torCount

## Function to create a new TOR Configuration File
def createNewDataFolder(i):
if(i==0):
if(not os.path.exists('data/tor')):
os.makedirs('data/tor')
else:
if(not os.path.exists('data/tor'+str(i))):
os.makedirs('data/tor'+str(i))


## Function to create new ID
def newID(i):
with Controller.from_port(port = 9060+int(i)) as controller:
controller.authenticate(_.TOR_PASS_)
controller.signal(Signal.NEWNYM)

## Main Process/Call Functions

i=0

if(int(checkNoTorFolders())<requiredTorRelays):
print("\n[+] CREATING "+str(requiredTorRelays-int(checkNoTorFolders()))+" NEW DATA FOLDERS...")
while(i<=requiredTorRelays-int(checkNoTorFolders())-1):
createNewDataFolder(int(checkNoTorFolders()))
print("- Created Data Folder: "+str(int(checkNoTorFolders())))

for x in range(0,int(checkNoTorFolders())):
initTor(x)
driver[x].get("http://wtfismyip.com/text")
print(' - IP: '+driver[x].find_element_by_tag_name('pre').text)
ip.extend(driver[x].find_element_by_tag_name('pre').text)

print("\n[+] TESTING NETWORK(S)...")

## Test Identity Changing
for limit in range(0,3):
for i in range(0,requiredTorRelays):
print("\n[+] RETRIEVING NEW IDENTITY ["+str(i)+"]...")
newID(i)
driver[i].get("http://wtfismyip.com/text")
print(' - IP: '+driver[i].find_element_by_tag_name('pre').text)

time.sleep(10)

input()

最佳答案

我已经重写了代码,因为看起来我的代码很糟糕。我不确定问题是什么,但是,对于任何尝试执行相同操作的人来说,这是更新:

assert str is not bytes

from lib_socks_proxy_2013_10_03 import monkey_patch as socks_proxy_monkey_patch

socks_proxy_monkey_patch.monkey_patch()

import io
import re

import time

import stem.connection
import stem.socket
import stem.process
from stem import Signal
from stem.control import Controller
from stem.util import term

from urllib import request as req
from lib_socks_proxy_2013_10_03 import socks_proxy_context

import config

tor_process = []
_ = config.variables

def startTor(i):
print(" - Starting TOR Process...")

tor_process.extend([stem.process.launch_tor_with_config(
config={
'SocksPort':str(9050+i),
'ControlPort':str(9070+i),
'CookieAuthentication':str(1),
'HashedControlPassword':str(_.TOR_HASHED_PASS_),
'DataDirectory':'data/tor'+str(i),
'PidFile':'tor'+str(i)+'.pid',
},
init_msg_handler = print_bootstrap_lines,
)])

def print_bootstrap_lines(line):
if("Bootstrapped " in line):
print(line)

def checkIP(i):
print("[+] Checking IP Address...")
try:
opener = req.build_opener()

with socks_proxy_context.socks_proxy_context(proxy_address=('127.0.0.1', 9050+i)):
res = opener.open('https://internet.yandex.com/get_full_info/', timeout=20.0)

data = res.read(10000).decode()
print(data)
except:
print(" - Failed.")


def changeIP(i):
print("[+] Changing IP Address... ["+str(i)+"]")
with Controller.from_port(port = 9070+i) as controller:
controller.authenticate(_.TOR_PASS_)
controller.signal(Signal.NEWNYM)

## Test 3 nodes.

if(__name__=="__main__"):
for x in range(0,3):
startTor(x)
checkIP(x)
for x in range(0,3):
changeIP(x)
for x in range(0,3):
checkIP(x)
tor_process[x].kill()

对于任何计划使用此功能的人:不要太快/太多地循环 TOR 服务器,因为这会给网络带来压力。

关于python - 多个 TOR 导出节点 - Controller 不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24581053/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com