Python - IP не меняется со стволом?

Я написал сценарий, который меняет IP с помощью ствола, но кажется, что он не работает. Вот сокращенная версия скрипта:

from stem import Signal
from stem.control import Controller
from stem.connection import connect

def changeIP():
    with Controller.from_port(port = 9051) as controller:
        controller.authenticate()
        controller.signal(Signal.NEWNYM)

def printIP():
    my_ip = urlopen('http://ip.42.pl/raw').read()
    print("IP -> %s" % my_ip)

#Some of my other codes

while(true):
    j+=1
    if j == 2:
        changeIP()
        j = 0
        printIP()

И он просто печатает мой публичный IP снова и снова. Он должен напечатать один и тот же IP-адрес 2 раза, а затем изменить, но это не так. Мой конфиг torrc настроен правильно.

ControlPort = 9051
HashedControlPassword 16:AD2DD67382E391D960F7E38F49A1AAB31479A0576222AB885C3CCFD70B
cookie authentication 1

Я даже попытался поместить хешированный контрольный пароль в control.authenticate(password='AD2DD67382E391D960F7E38F49A1AAB31479A0576222AB885C3CCFD70B'), но он все еще не работал, и я также хочу, чтобы мой сценарий не использовал его. Я искал эти недели сейчас, и я узнал, что я могу использовать SocksiPy модуль, но я не могу это сделать.

Пожалуйста, перекодируйте мой сценарий, большое спасибо.

1 ответ

Я предполагаю, что вы работаете над окнами. Я не уверен, будет ли это работать на Linux.

Я бы посоветовал вам скачать свежую копию Tor, не меняя конфигурацию torrc. Лично я не настраивал hashcontrolpassword но следующий код Python все еще работает для меня. Попробуйте шаг 1, указанный здесь: /questions/15439175/kak-sdelat-urllib2-zaprosyi-cherez-tor-v-python/15439190#15439190

После шага 1 вы должны увидеть 127.0.0.1:9150 а также 127.0.0.1:9151 когда ты бежишь netstat -an в вашем терминале.

После этого скопируйте следующий код и попробуйте запустить его (измените каталог на папку Tor).

# library to launch and kill Tor process
import os
import subprocess

# library for Tor connection
import socket
import socks
import http.client
import time
import requests
from stem import Signal
from stem.control import Controller

def launchTor():
    # start Tor (wait 30 sec for Tor to load)
    sproc = subprocess.Popen(r'.../Tor Browser/Browser/firefox.exe')
    time.sleep(30)
    return sproc

def killTor(sproc):
    sproc.kill()

def connectTor():
    socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9150, True)
    socket.socket = socks.socksocket
    print("Connected to Tor")

def set_new_ip():
    # disable socks server and enabling again
    socks.setdefaultproxy()
    """Change IP using TOR"""
    with Controller.from_port(port=9151) as controller:
        controller.authenticate()
        socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9150, True)
        socket.socket = socks.socksocket
        controller.signal(Signal.NEWNYM)

def checkIP():
    conn = http.client.HTTPConnection("icanhazip.com")
    conn.request("GET", "/")
    time.sleep(3)
    response = conn.getresponse()
    print('current ip address :', response.read())

# Launch Tor and connect to Tor network
sproc = launchTor()
connectTor()

# Check current IP
checkIP()

# Set new IP
set_new_IP()

# Check newly assigned IP
time.sleep(10)
checkIP()

# remember to kill process 
killTor(sproc)
Другие вопросы по тегам