多个TOR出口节点控制器不工作?

2024-09-30 01:19:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用Selenium的多个torexit节点,并尝试创建一个函数来更改多个标识。但是,它没有返回错误。我相信我的代码有一个问题,我不能完全弄清楚。也许控制器出故障了?在

(我将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()

Tags: importtruedrivernetworktorintprintff
1条回答
网友
1楼 · 发布于 2024-09-30 01:19:23

我重新编写了代码,因为我的代码看起来很糟糕。我不确定问题出在哪里,不过,以下是对任何尝试同样做法的人的更新:

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服务器循环太快/太多,因为这会给网络带来压力。在

相关问题 更多 >

    热门问题