проверьте, установлено ли соединение tor перед запуском scrapy

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

с этой настройкой scrapy правильно использует tor при сканировании. Способ, которым я проверяю, правильно ли скрайп использует tor, заключается в том, чтобы сканировать эту страницу в 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')))

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


person PHA    schedule 10.05.2016    source источник


Ответы (1)


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

Если у Tor есть построенная активная цепь, она вернет:

250-status/circuit-established=1
250 OK

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

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

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

Дополнительную информацию см. в спецификации управления.

person drew010    schedule 11.05.2016
comment
спасибо за ваш ответ, я только что заметил, что Twisted использует txtorcon, а не стебель, поэтому я думаю, что scrapy использует txtorcon, поэтому я думаю, что вместо этого я должен научиться получать информацию в txtorcon - person PHA; 11.05.2016
comment
Похоже, что работает torcontrolprotocol.py. С таким же успехом можно использовать это, но это очень простой протокол, основанный на командах, в котором нет ничего особенного для таких простых команд. Однако это усложняется с анализом определенных результатов и знанием того, как определить конец сообщения. - person drew010; 11.05.2016
comment
Если я правильно понимаю, dormant и circuit-established вернут 1 и 0 соответственно, если Tor не использовался какое-то время. (1) Эти команды пробуждают Tor? (2) Если нет, то как лучше всего его разбудить? - person nopara73; 09.06.2017
comment
Простой запрос этой информации у контроллера не разбудит Tor. Вы можете разбудить его с помощью SIGNAL NEWNYM, попытавшись разрешить адрес RESOLVE somehost.net или открыв SOCKS-соединение и выполнив запрос (перед отправкой запроса будет небольшая задержка для построения цепей и установления соединений). Я не могу сказать с абсолютной уверенностью, но я не думаю, что Tor может быть бездействующим, если у вас есть установленные каналы, поскольку бездействующий описывается как zero if Tor is currently active and building circuits, and nonzero if Tor has gone idle due to lack of use or some similar reason. - person drew010; 09.06.2017