使用 Ruby 控制 Tor 客户端

2024-04-09

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

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

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

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

Thanks!


请查看 Tor 控制协议。您可以使用 telnet 控制电路。http://thesprawl.org/memdump/?entry=8 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 检测站点来检查您的地址是否已更改。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Ruby 控制 Tor 客户端 的相关文章

  • 使用旧的 ruby​​gems 版本进行捆绑安装

    我遇到的问题似乎与1个月前的问题 https stackoverflow com questions 38279896 rubygems 2 0 14 is not threadsafe bunder install message whe
  • Selenium 找不到“spec”文件夹

    因此 我正在尝试建立本地系统来帮助完成仅使用 Rails 的雇主的现有项目 他们希望我主要关注 rspec 测试 因为该项目几乎可以正常运行 我需要充实他们错过的东西 但是 我无法获取 rake spec 来构建我的测试文件夹 事实上 测试
  • Ruby 依赖注入库

    我一直在研究一些 Ruby 依赖注入库 特别是 我检查了Needle http needle rubyforge org and Copland http copland rubyforge org 它们已经存在很长一段时间了 但用途并不多
  • 什么是“太聪明”的 Ruby 代码示例? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在与一些程序员朋友进行讨论 他们说他们看到 Ruby 程序员 尤其是 编写了很多 太聪明 的代码 所以我想知道那会是什么样子 我指
  • 验证 ActionCable 连接

    我发现了一个很棒的 ActionCable gem 它是 SPA 的一个很好的解决方案 我只想发送html css and js资产 所有其他连接将通过ActionCable 交换字符串或者整数并不难 但是如何通过ActionCable登录
  • 如何覆盖 Ruby Ranges 的 .. 和 ... 运算符以接受 Float::INFINITY?

    我想覆盖 and Ruby 中的运算符Range 原因是 我正在处理数据库中的无限日期范围 如果你拉一个infinty从 Postgres 中取出日期时间 你会得到一个Float INFINITY在红宝石中 问题是 我无法使用Float I
  • 如何使 Rails 3 资源预编译速度更快?

    我有一个正在运行的 Rails 3 2 1 应用程序 我正在通过 Capistrano 进行部署deploy assets它运行deploy assets precompile task 一切工作都很好 除了编译本身非常慢 我没有那么多 C
  • Rails 4 - 如何链接到 PDF 文件(名称.PDF)?

    我正在生成 PDF 文件 我的链接如下所示 当我点击这个时 它会带我去 display invoice 123456789 这是一个 HTML 版本 在控制器中的操作如下 def display invoice if params invo
  • 红宝石边缘情况

    ruby 有一些边缘情况很难解释 因为解析会带来一些有趣的问题 我在这里列出其中两个 如果您知道更多 请添加到列表中 def foo 5 end this one works if tmp foo puts tmp to s end How
  • “没有可用的二元红宝石”是什么意思?

    每当我使用rvm install x x x 即使安装成功 我也会收到此警告 No binary rubies available for osx 10 12 x86 64 ruby 2 4 0 Continuing with compil
  • 捆绑安装无法从 https://rubygems.org/ 获取规格

    我正在尝试遵循 Hartl Rails 教程 但在使用捆绑器 gem 时遇到了问题 使用命令 bundle install 或 bundle update 时 我得到以下输出 从中获取源索引https rubygems org https
  • Rails:CSRF 令牌不工作但已设置

    我在 Heroku 上有我的 Rails 3 应用程序 当我发送银行信息时 我得到 WARNING Can t verify CSRF token authenticity但我的 CSRF 令牌已设置 https gist github c
  • Rails 4:资产未在生产中加载

    我正在尝试将我的应用程序投入生产 但图像和 CSS 资源路径不起作用 这是我目前正在做的事情 图像资源位于 app assets images image jpg 样式表位于 app assets stylesheets style css
  • Rails 3 在 Ruby 1.9.2 上初始化非常慢

    我使用 RVM 来管理环境 安装了 Ruby 1 9 2 p136 我认为是最新版本 和 Rails 3 创建了 gemset 并运行捆绑器 到目前为止一切正常 但 Rails 在运行命令 即生成 销毁 rake 等 时初始化速度非常慢 完
  • REXML - 如何提取单个元素

    我正在用 ruby 编写一些验收测试 其中涉及断言响应 XML 中值的存在 我的 XML 是这样的
  • Rails - 渲染:目标锚标记的操作?

    我希望像这样使用渲染 render action gt page form 我也尝试过这个 render template gt site page form 那也没用 这个特定页面上的表单位于最底部 如果提交时发生任何错误 我不希望用户被
  • rvm gem 安装错误?

    我正在摆弄 ruby gems 和 rvm 它工作得很好 但现在当我尝试安装 gem 时出现错误 gem install Rails错误 同时 执行 gem Errno EACCES 权限被拒绝 Users da rvm gems ruby
  • ruby 正则表达式匹配模式的多次出现

    我正在寻找构建一个 ruby 正则表达式来匹配模式的多次出现并将它们返回到数组中 模式很简单 即 两个左括号 一个或多个字符 后跟两个右括号 这就是我所做的 str Some random text lead first name and
  • 存根和 rspec 旧语法的问题

    我正在编写一些代码并使用 rspec 但收到警告 提示语法已过时 我不太清楚应该如何编写它 it should calculate the value correctly do mock cards Card new clubs 5 Car
  • RoR - Rails 中的大文件上传

    我有一个 Rails Web 应用程序 允许用户上传视频 视频存储在 NFS 安装的目录中 当前的设置适用于较小的文件 但我也需要支持大文件上传 最多 4GB 当我尝试上传 4GB 文件时 它最终会发生 但从用户体验的角度来看很糟糕 上传开

随机推荐

  • Node.js 监听 MongoDB 变化

    Node js 有没有办法监听 MongoDB 集合中特定数据的更改 并在发生更改时触发事件 嗯 这是一个老问题 但我也在为同样的事情而苦苦挣扎 我发现了一些花絮帮助我构建了一个解决方案 并且我已将其作为库发布 https github c
  • document.head v. document.getElementsByTagName("head")[0]

    使用有什么区别document head并使用document getElementsByTagName head 0 我运行的测试表明它们都需要大约一毫秒 我也见过 document head document getElementsBy
  • 如何在结构字段上创建可变迭代器

    所以我正在使用 Rust 开发一个小型 NES 模拟器 并且我正在尝试使用我的状态寄存器 寄存器是一个结构体 其中包含一些包含布尔值的字段 标志 寄存器本身是 CPU 结构体的一部分 现在 我想循环这些字段并根据我执行的某些指令设置布尔值
  • 为什么 -std=c++98 标志有时不起作用?

    情况如下 我想创建一个简单的 C 程序 但它必须使用onlyC 98 函数 我在用Ubuntu 20 04 4 LTS 我在用c 作为编译器我使用以下标志进行编译 Wall Werror Wextra std c 98 pedantic e
  • JTabbedPane 自定义选项卡外观

    我想自定义 JTabbedPane 中选项卡的外观 我想从最简单 最朴素的行为开始 无边框 纯色 问题是仍然存在不平整的情况 选项卡的边距略有重叠 您会看到 由于选择了第二个选项卡 因此它被 带到了前台 这是通过轻微的边距重叠来实现的 有没
  • staruml 抽象类?

    有谁知道如何使用 StarUML 创建抽象类 我在文档中找不到任何提及 是否有某种反映抽象类的更一般的概念 从工具箱中选择类并将其添加到画布中 然后转到属性选择 isAbstract 复选框 然后类名显示为斜体
  • C++ timegm 将 DST 转换为未来某个给定时间的某个时区?

    我需要在我的班级中从 UTC 时间准确转换为给定时区的本地时间 无论 DST 是否有效 我的问题是 当我使用struct tm我必须提供 tm isdst 成员 或者将其保留为 1 以自动确定 from mktime 3 linux man
  • 关于Android应用程序更新的问题

    几个问题 升级应用程序对存储的数据 即首选项和数据库 有什么影响 系统是否执行新版本的全新安装 即删除旧版本然后安装新版本 或其他操作 如果用户想要保留存储的数据 例如共享首选项或 SQLite 数据库中的值 怎么办 如何模拟此应用程序更新
  • 在 Android Lollipop 5.0.1 的工作配置文件中安装未知来源的应用程序

    问题与 工作简介 相关安卓工作用 我编写了一个示例应用程序 它创建托管工作配置文件并将其自身设置为个人资料所有者 我需要通过配置文件所有者推送一些企业应用程序 因此 当我尝试安装时 它显示 安装被阻止 无法从未知来源安装 如果我切换按钮 设
  • 尝试使用 chrome.downloads (由于某种原因未定义)[重复]

    这个问题在这里已经有答案了 我正在尝试使用 Chrome 扩展从 URL 下载文件 图像 chrome 下载 https developer chrome com extensions downloads 但由于某种原因chrome dow
  • LINQ to Entities 无法识别该方法

    我在使用 Linq to Entities 时遇到问题 无法找到解决方法 这是我的代码 var queryResult result Where x gt x FollowedUp Value GetWeekFromDateTime Dat
  • 专门用于shared_ptr的集合

    是否存在一个集合 它知道shared ptr内部 并避免定期复制存储的shared ptr元素 而只复制其内部弱指针 这隐含地意味着 不会执行任何构造函数 析构函数调用 并且不会对shared ptrs的引用计数器进行操作 理论上 在采用C
  • 使用布尔系列/数组从 pandas 数据框中选择

    我有一个数据框 High Low Close Date 2009 02 11 30 20 29 41 29 87 2009 02 12 30 28 29 32 30 24 2009 02 13 30 45 29 96 30 10 2009
  • 避免在会话中存储不同 SQL 模式的连接字符串

    我计划在 Azure 中建立一个多租户应用程序 其中通过架构分离实现数据隔离 我计划使用子域来识别租户 想法是从子域获取租户名称 从登录页面获取用户 ID 和密码 并验证 uid 密码和租户 ID 以进行身份 验证 如果经过身份验证 则应用
  • 如何将 Typescript 模块转换为 JavaScript

    我有一个像这样的 src 工作目录 src functions final utils I have two文件 都在 final 内 我需要将其从打字稿转换为JavaScript才能在浏览器中运行 问题是 我的最终文件正在从其他 src
  • 如何修复 py2app 上的 distutils.errors.DistutilsError? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我最近尝试使用 py2app 并且有一个名为 test py 的简单应用程序 一切都很好 直到我输入 python3 setup
  • 如何使用 Xamarin.Forms 显示警报框以进行验证?

    How to 使用 Xamarin Forms 显示警报框用于验证 我知道我们可以使用 ContentView 代码后面的以下代码显示警报 但我想显示我的 ViewModel 中的警报框 DisplayAlert Alert You hav
  • 失败安装解析失败清单格式错误

    我在安装应用程序时遇到一个奇怪的问题 当我编译我的项目时没有错误 但是当我尝试启动它时显示 安装错误 INSTALL PARSE FAILED MANIFEST MALFORMED Error 我已经尝试了很多与安装错误相关的事情 INST
  • Azure 数据工厂 V2 中的分页规则值(适用于 Rest API)

    我正在尝试填写Value分页规则内的框解释于本文 https sqlkover com azure data factory and the exact online rest api dealing with pagination 最近发
  • 使用 Ruby 控制 Tor 客户端

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