starikan
3/5/2017 - 8:51 AM

tor.py

import subprocess
import os
import random
# import time
import signal
# import tempfile
import dataset
import psutil

TOR_CONFIGS_DIR = os.path.join(os.path.dirname(__file__), "tor_configs")
TOR_EXE = r"P:\Dropbox\!DEV\Tor\tor.exe"
TOR_CONFIG = """
SocksPort {} #9050
ControlPort {} #9051
CookieAuthentication 1
"""


def run_tor(dir_path, config, exe_path):

    socks_port = str(random.randint(10000, 65535))
    control_port = str(random.randint(10000, 65535))
    config_file = config.format(socks_port, control_port)

    file_name = os.path.join(dir_path, socks_port) + ".txt"
    with open(file_name, "w") as f:
        f.write(config_file)

    fullCmd = ' '.join([exe_path, "-f", file_name])
    proc = subprocess.Popen(fullCmd)

    return {
        "process": proc,
        "socks_port": socks_port,
        "control_port": control_port,
        "proxies": {
            'http':  'socks5://127.0.0.1:{}'.format(socks_port),
            'https': 'socks5://127.0.0.1:{}'.format(socks_port)
        }
    }

def stop_tor(settings):

    proc = settings["process"]

    if not proc:
        return False

    process = psutil.Process(proc.pid)
    for proc in process.children(recursive=True):
        proc.kill()
    process.kill()