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)