【问题标题】:Controlling Tor client with Ruby用 Ruby 控制 Tor 客户端
【发布时间】:2011-09-11 22:49:02
【问题描述】:

我正在编写一个自动爬取网站以进行数据分析的 Ruby 脚本,现在我有一个相当复杂的要求:我必须能够模拟来自不同国家的访问,大约 20 个不同的国家。该网站将根据 IP 位置包含不同的信息,因此完成此操作的唯一方法是从实际位于该国家/地区的服务器请求它。

由于我不想在这 20 个国家/地区中的每一个都购买服务器,因此我选择尝试 Tor - 正如你们中的许多人所知,通过编辑 torrc 配置文件可以指定出口节点,因此实际请求的来源国家/地区。

当我手动执行此操作时,例如通过编辑 torrc 文件以使用阿根廷服务器,然后使用 Vidalia 断开 Tor,重新连接 Vidalia,然后重新运行请求,它工作正常。但是,我想完全自动化这个过程,并尽可能高效地完成它。 Tor 是用 C 语言编写的,我想避免为此拆开它的整个源代码。知道仅使用 Ruby 实现整个过程自动化的最简单方法是什么吗?

另外,如果我遗漏了一些东西,并且有一个更简单的替代方法可以替代整个考验,请告诉我。

谢谢!

【问题讨论】:

    标签: ruby tor


    【解决方案1】:

    请查看 Tor 控制协议。您可以使用 telnet 控制电路。 http://thesprawl.org/memdump/?entry=8

    要切换到新电路,然后切换到新端点:

      require 'net/telnet'
    
      def switch_endpoint
        localhost = Net::Telnet::new("Host" => "localhost", "Port" => "9051", "Timeout" => 10, "Prompt" => /250 OK\n/)
        localhost.cmd('AUTHENTICATE ""') { |c| print c; throw "Cannot authenticate to Tor" if c != "250 OK\n" }
        localhost.cmd('signal NEWNYM') { |c| print c; throw "Cannot switch Tor to new route" if c != "250 OK\n" }
        localhost.close
      end
    

    请注意创建新电路的延迟,可能需要几秒钟,因此您最好在代码中添加延迟,或通过调用某个远程 IP 检测站点检查您的地址是否已更改。

    【讨论】:

      猜你喜欢
      • 2022-01-17
      • 1970-01-01
      • 2020-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-14
      • 2023-03-03
      • 1970-01-01
      相关资源
      最近更新 更多