2016-05-10 7 views
2

Я бы хотел проверить, прежде чем начинать сканирование с помощью python scrapy. Я использую polipo/tor/scrapy на linux.подключение к проверке установлено до запуска scrapy

с этой настройкой, правильно используя тор на своих ползаниях. То, как я проверяю, правильно ли использует scrapy, является обход this page в myspider.

class mySpider(scrapy.Spider): 
    def start_requests(self): 
     yield Request('https://check.torproject.org/', self.parse) 

    def parse(self, response): 
     logging.info("Check tor page:" + str(response.css('.content h1::text'))) 

Однако я думаю, что может быть лучший/чистый способ сделать это. Я знаю, что могу check tor service status или check ip address, но я хочу проверить, правильно ли установлено соединение.

ответ

2

Несколько окончательный способ сделать это - подключиться к порту управления Tor и выдать GETINFO status/circuit-established.

Если Tor имеет активный контур построен, он будет возвращать:

250-status/circuit-established=1 
250 OK 

Если Tor не используется в течение некоторого времени, это может быть 0. Можно также вызвать GETINFO dormant, которые привели бы к 250-dormant=1. Скорее всего, когда вы попытаетесь использовать Tor, он построит схему, и спящий станет 0, а установленная схема будет 1 запрещать любые основные проблемы с сетью.

В любом случае, бездействующий = 0 или установленный по схеме = 1, должно быть достаточно, чтобы сказать, что вы можете использовать Tor.

Это простой протокол, поэтому вы можете просто открыть сокет для порта управления, аутентифицировать и выдавать команды или использовать Controller со Stem.

См. control spec для получения дополнительной информации.

+0

спасибо за ваш ответ. Я только что заметил, что скрученный использует txtorcon и не работает, поэтому я думаю, что scrapy использует txtorcon, поэтому я думаю, что я должен научиться getinfo в txtorcon вместо – PHA

+0

Похоже, что это [torcontrolprotocol.py] (https: //github.com/meejah/txtorcon/blob/master/txtorcon/torcontrolprotocol.py#L384). Могло бы также использовать это, но это очень простой протокол, основанный на командах, ничего особенного для простых команд. Однако он усложняется анализом определенных результатов и пониманием того, как идентифицировать конец сообщения. – drew010

+0

Если я правильно понимаю, что 'dormant' и' circuit-installed' вернут 1 и 0 соответственно, если Tor не использовался некоторое время. (1) Пробуют ли эти команды Tor? (2) Если не то, что было бы лучшим способом разбудить его? – nopara73