【问题标题】:check tor connection is established before running scrapy在运行scrapy之前检查tor连接是否建立
【发布时间】:2016-09-05 05:39:54
【问题描述】:

我想在开始使用 python scrapy 爬行之前检查 tor。我在 linux 上使用polipo/tor/scrapy。

有了这个设置,scrapy 在它的爬网中正确地使用了 tor。我检查scrapy是否正确使用tor的方法是在myspider中抓取this page。

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 但我想实际检查一下是否正确建立了tor 连接。

【问题讨论】:

    标签: python scrapy tor


    【解决方案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-builted=1 都足以告诉您可以使用 Tor。

    这是一个简单的协议,因此您只需打开一个到控制端口的套接字、进行身份验证和发出命令,或者使用来自 Stem 的Controller。

    请参阅control spec 了解更多信息。

    【讨论】:

    • 感谢您的回复,我刚刚注意到twisted 使用的是txtorcon 而不是stem 所以我猜scrapy 使用的是txtorcon 所以我想我应该学习如何在txtorcon 中获取信息
    • 看起来像torcontrolprotocol.py。不妨使用它,但它是一个非常简单的基于命令的协议,对于像这样的简单命令没有什么特别之处。然而,解析某些结果并知道如何识别消息的结尾确实会变得更加复杂。
    • 如果我理解正确,dormant 和 circuit-established 如果有一段时间没有使用 Tor,将分别返回 1 和 0。 (1) 这些命令会唤醒 Tor 吗? (2) 如果不是,最好的唤醒方式是什么?
    • 只是向控制器询问该信息不会唤醒 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。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多