我编写了一个用stem更改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
模块,但我不能这样做。
请重新编写我的脚本,非常感谢。
答案 0 :(得分:0)
我假设您正在使用Windows。我不确定这是否适用于Linux。
我建议你在不改变torrc配置的情况下下载Tor的新副本。就个人而言,我没有配置hashcontrolpassword
,但以下python代码仍然适用于我。
试试此处列出的第1步:https://stackoverflow.com/a/48144473/9183144
在第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)