加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

用Ruby控制Tor客户端

发布时间:2020-12-16 19:15:57 所属栏目:百科 来源:网络整理
导读:我正在编写一个 Ruby脚本,它自动抓取网站进行数据分析,现在我有一个相当复杂的要求:我必须能够模拟来自各个国家的访问,大约20个不同的国家.网站将根据IP位置包含不同的信息,因此完成此任务的唯一方法是从实际位于该国家/地区的服务器请求它. 由于我不想在这
我正在编写一个 Ruby脚本,它自动抓取网站进行数据分析,现在我有一个相当复杂的要求:我必须能够模拟来自各个国家的访问,大约20个不同的国家.网站将根据IP位置包含不同的信息,因此完成此任务的唯一方法是从实际位于该国家/地区的服务器请求它.

由于我不想在这20个国家的每一个国家购买服务器,我选择试试Tor – 正如许多人所知,通过编辑torrc配置文件,可以指定退出节点,因此可以指定国家/地区.实际请求将来自哪个.

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

此外,如果我遗漏了一些东西,并且有一个更简单的替代方案来解决这个问题,请告诉我.

谢谢!

解决方法

请看一下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 OKn/)
    localhost.cmd('AUTHENTICATE ""') { |c| print c; throw "Cannot authenticate to Tor" if c != "250 OKn" }
    localhost.cmd('signal NEWNYM') { |c| print c; throw "Cannot switch Tor to new route" if c != "250 OKn" }
    localhost.close
  end

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读