Подтвердить что ты не робот

Как изменить Tor-идентификатор в Python?

У меня есть следующий script:

import socks
import socket
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050)
socket.socket = socks.socksocket
import urllib2

print(urllib2.urlopen("http://www.ifconfig.me/ip").read())

который использует tor и SocksiPy

Теперь я хочу изменить тождество с каждым запросом, например:

for i in range(0, 10):
   #somehow change tor identity
   print(urllib2.urlopen("http://www.ifconfig.me/ip").read())

Как я могу это сделать?

4b9b3361

Ответ 1

Сегодня я много искал об этом вопросе и, наконец, смог ответить сам. Но прежде чем я должен сказать, что пирвоки и тор должны быть настроены правильно. Сначала script, затем немного о конфигурации:

import urllib2
from TorCtl import TorCtl

proxy_support = urllib2.ProxyHandler({"http" : "127.0.0.1:8118"})
opener = urllib2.build_opener(proxy_support) 

def newId():
    conn = TorCtl.connect(controlAddr="127.0.0.1", controlPort=9051, passphrase="your_password")
    conn.send_signal("NEWNYM")

for i in range(0, 10):
    print "case "+str(i+1)
    newId()
    proxy_support = urllib2.ProxyHandler({"http" : "127.0.0.1:8118"})
    urllib2.install_opener(opener)
    print(urllib2.urlopen("http://www.ifconfig.me/ip").read())

Выше script получает новый IP-адрес и проверяет его с веб-сайта ifconfig.me. О конфигурации: Нам нужно Privoxy. для использования TOR с HTTP-соединениями privoxy должен работать с tor. Мы можем сделать это, добавив thi в файл /etc/privoxy/config:

forward-socks5 / localhost:9050 . #dot is important at the end

то мы настраиваем ControlPort в файле /etc/tor/torrc. Нам нужно просто раскомментировать эту строку:

ControlPort 9051
## If you enable the controlport, be sure to enable one of these
## authentication methods, to prevent attackers from accessing it.
HashedControlPassword 16:872860B76453A77D60CA2BB8C1A7042072093276A3D701AD684053EC4C

то мы просто перезапускаем tor:

/etc/init.d/tor restart

Ответ 2

Tor написал новую библиотеку управления TOR в Python, stem. Его можно найти на PyPI. Они предоставляют несколько полезных руководств по работе с ним, один из них объясняет, как изменить вашу личность:

from stem import Signal
from stem.control import Controller

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

Убедитесь, что ваш конфиг правильный.

Ответ 3

Еще одно простое решение, не требующее внешних библиотек, работает как для IPv4, так и для IPv6:

import socket

try:
    tor_c = socket.create_connection((TOR_CTRL_HOST, TOR_CTRL_PORT))
    tor_c.send('AUTHENTICATE "{}"\r\nSIGNAL NEWNYM\r\n'.format(TOR_CTRL_PWD))
    response = tor_c.recv(1024)
    if response != '250 OK\r\n250 OK\r\n':
        sys.stderr.write('Unexpected response from Tor control port: {}\n'.format(response))
except Exception, e:
    sys.stderr.write('Error connecting to Tor control port: {}\n'.format(repr(e)))

Ответ 4

Это видео, где im использует STEM, SockSipy, Tor 100% работает:)

#!/usr/bin/python
import socks
import socket
import time
from stem.control import Controller
from stem import Signal
import urllib2
import sys

def info():
print "[*] Welcome to Chart-Cheat Script"
print "[*] This script works with running TOR only"
print "[*] usage is chartcheat.py domain"
print "[*] argument domain must be in format www.example.com"
print "[*] Example: chartcheat.py www.example.com"
return
if len(sys.argv)==2:
info();
counter = 0
url = str(sys.argv[1]);
with Controller.from_port(port = 9051) as controller:
    controller.authenticate()
    socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050)
    socket.socket = socks.socksocket
    #visiting url in infinite loop      
    while True:
        urllib2.urlopen("http://"+url)
        counter=counter+1
        print "Page " + url + " visited = " + str(counter)
        #wait till next identity will be available
        controller.signal(Signal.NEWNYM)
        time.sleep(controller.get_newnym_wait())            
else:
info();

Ответ 5

Вы можете включить сервер управления tor, раскомментировав несколько строк в

/etc/tor/torrc

И используйте библиотеку стебля для отправки сигнала NEWNYM для изменения схемы.

controller.signal(Signal.NEWNYM)

Здесь вы можете прочитать учебник.

Ответ 6

Может работать следующее:

for i in range(0, 10):
   #somehow change tor identity
   socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050+i)
   socket.socket = socks.socksocket

   print(urllib2.urlopen("http://www.ifconfig.me/ip").read())

В основном вы устанавливаете прокси-сервер перед каждым подключением. Я предполагаю, что у вас разные полномочия для разных IP-адресов, поскольку вы не указали, как вы собираетесь изменить IP-адрес