Python: Jak użyć sieć Tor z requests ze zmienionym IP?
Sieć Tor może być użyta do uruchomienia requests
ze zmienionym IP.
Jeśli masz już zainstalowany Tor
wtedy powinien on chodzić cały czas jako usługa
i powinna być możliwość użycia go jako proxy server
z adresem 127.0.0.1:9050
(localhost:9050
)
W requests
możesz użyć
proxy = {
'http': 'socks5://127.0.0.1:9050',
'https': 'socks5://127.0.0.1:9050',
}
r = requests.get(url, proxies=proxy) # using TOR network
A oto minimalny działajacy kod. Używam http://icanhazip.com aby pobrać IP jako tekst.
import requests
proxy = {
'http': 'socks5://127.0.0.1:9050',
'https': 'socks5://127.0.0.1:9050',
}
url = 'https://icanhazip.com'
r = requests.get(url, proxies=proxy) # using TOR network
print(' Tor IP:', r.text)
r = requests.get(url)
print('direct IP:', r.text)
i w tym momencie pojazuje mi:
Tor IP: 146.59.155.27
direct IP: 217.99.86.56
Ale Tor zazwyczac przez prawie przez cały czas używa tego samego IP.
Jeśli chcesz zmienić jego IP wtedy musisz restartować/przeładować usługę Tor.
Albo musiałbyś skonfigurować ControlPort
(zazwyczaj 9051
) oraz Password
w ustawnieniach Tor (pod Linux w pliku /etc/tor/torrc
)
i wtedy możesz zmienić IP Tora przez wysłanie sygnały poprzez socket
import socket
s = socket.socket()
s.connect(('127.0.0.1', 9051))
s.send('AUTHENTICATE "your_passord"\r\nSIGNAL NEWNYM\r\n'.encode())
lub możesz do tego użyć modułu stem
from stem import Signal
from stem.control import Controller
with Controller.from_port(port=9051) as controller:
controller.authenticate(password='your_password')
controller.signal(Signal.NEWNYM)
Pod Linux możesz też użyć programu netcat
w terminalu
printf 'AUTHENTICATE "password"\r\nSIGNAL NEWNYM\r\n' | nc 127.0.0.1 9051
i możesz sprawdzić IP za pomocą
curl https://icanhazip.com
curl --proxy 'socks5://127.0.0.1:9050' https://icanhazip.com
Z tego co mi wiadomo to po wysłaniu sygnału czasami Tor może potrzebować kilku sekund aby zdobyć nowy IP więc może być potrzeba poczekania kilku sekund zanim wyślesz następny request z nowym IP.
