gpt4 book ai didi

ruby - 用 Ruby 控制 Tor 客户端

转载 作者:数据小太阳 更新时间:2023-10-29 06:53:19 24 4
gpt4 key购买 nike

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

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

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

此外,如果我遗漏了什么,并且有更简单的替代方案可以替代整个过程,请告诉我。

谢谢!

最佳答案

请查看 Tor 控制协议(protocol)。您可以使用 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 检测站点来检查您的地址是否已更改。

关于ruby - 用 Ruby 控制 Tor 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6297438/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com