Поиск по блогу

вторник, 16 сентября 2014 г.

Здесь мы возвращаемся к вопросу о переключени "инстансов" (IP) в TOR

Нагуглил два подхода: с Telnet и с библиотекой Python. Библиотек несколько, например Stem, TorCtl, TxTorCon, JTorCtl, PHPTorCtl Надо будет выбрать... И Telnet надо будет опробовать

Некстати о сессиях и куки

Ссылку на форум гугла я сначала скопировал с список ссылок выше, а потом обратил внимание на #!topic/scrapy-users/K9QISzH4KwA ... и вспомнил, что это ссылка из IE, который я накануне юзал с Fiddler и отключал все куки... Вот Гугл и расстарался - такой довесок должен добавляться к каждой ссылке.

In []:
https://groups.google.com/forum/#!topic/scrapy-users/K9QISzH4KwA
# Кликнул по первой ссылке на странице поиск Google
https://groups.google.com/forum/#!forum/scrapy-users

Оказывается, что нет, это ссылки на страницы такие... Я просто накануне прочитал, что некоторые сайты НЕ ПОЛУЧИВ ОТ ПОЛЬЗОВАТЕЛЯ COOKIE, дописываю ко всем внутренним ссылкам на странице строчку вида #piouiou, при клике по (внутренней) ссылке эта строчка выполняет роль user ID

Нужно осваивать stem.torproject

Stem Python October 2011 - Present
Txtorcon Python (Twisted) February 2012 - Present
TorCtl Python July 2008 - November 2011
PHP TorCtl PHP February 2013
JTorCtl Java June 2005 - May 2009

Из этого списка наиболее простой вариант - TorCtl (пример в конце поста), но эта библиотека не поддерживается, она прародитель Stem, сейчас это главная библиотека (вместе в Txtorcon). Пока не ясно, нужно ли ее изучать...

Can I interact with Tor's controller interface directly?

If you are using a ControlPort then the easiest method of talking with Tor is via telnet. You always need to authenticate after connecting, even if Tor does not restrict access. If your torrc doesn't have a CookieAuthentication or HashedControlPassword then to authenticate you will simply call AUTHENTICATE after connecting without any credentials.

In []:
% cat ~/.tor/torrc
ControlPort 9051

% telnet localhost 9051
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
AUTHENTICATE
250 OK
GETINFO version
250-version=0.2.5.1-alpha-dev (git-245ecfff36c0cecc)
250 OK
QUIT
250 closing connection
Connection closed by foreign host.

A ControlSocket is a file based socket, so we'll use socat to connect to it...

In []:
% cat ~/.tor/torrc
ControlSocket /home/atagar/.tor/socket

% socat UNIX-CONNECT:/home/atagar/.tor/socket STDIN
AUTHENTICATE
250 OK
GETINFO version
250-version=0.2.5.1-alpha-dev (git-245ecfff36c0cecc)
250 OK
QUIT
250 closing connection

HOWTO use the Internet anonymously using Tor and Privoxy en.linuxreviews.org Configuration tips

Some websites will log you out if you re-visit (while loggined in using a cookie to identify you) from a different IP. Tor has a feature called long lived ports. You could add the following to torrc to make connections to given ports use the same circut for a long period of time:

In []:
LongLivedPorts 80,23,21,22,706,1863,5050,5190,5222,5223,6667,8300,8888

[How to use TOR ?](https://groups.google.com/forum/#!searchin/scrapy-users/tor

In []:
from scrapy.contrib.downloadermiddleware.retry import RetryMiddleware

#You would have to install tor and polipo from packages and write simple middleware which forces tor 
#to change route when scrapy retrying to recieve page:

class RetryChangeProxyMiddleware(RetryMiddleware):

    def _retry(self, request, reason, spider):

        log.msg('Changing proxy')

        tn = telnetlib.Telnet('127.0.0.1', 9051)

        tn.read_until("Escape character is '^]'.", 2)

        tn.write('AUTHENTICATE "267765"\r\n')

        tn.read_until("250 OK", 2)

        tn.write("signal NEWNYM\r\n")

        tn.read_until("250 OK", 2)

        tn.write("quit\r\n")

        tn.close()

        time.sleep(3)

        log.msg('Proxy changed')

        return RetryMiddleware._retry(self, request, reason, spider)

#then use it in settings.py:

DOWNLOADER_MIDDLEWARE = {

                         'spider.middlewares.RetryChangeProxyMiddleware': 600,

                         }

#and then you just want to send requests through local tor proxy (polipo) which could be done with:

tsocks scrapy crawl spirder 

#I've done this long ago but this solution seems ok and, most important, it works

pytorctl.git - УСТАРЕЛ, но работает

The following is a simple example of TorCtl usage. This attaches a listener 3 that prints the amount of traffic going over tor each second.

In []:
from TorCtl import TorCtl
 
def newId(host, port, pass):
    conn = TorCtl.connect(controlAddr=host, controlPort=port, passphrase=pass)
    if conn:
        TorCtl.Connection.send_signal(conn, "NEWNYM")
 
newId('localhost', '9051', 'pass')
#https://gist.github.com/crackcomm/3824079#

В этой библиотеке используется та же команда, что и в коде для telnet



Посты чуть ниже также могут вас заинтересовать

Комментариев нет:

Отправить комментарий