【发布时间】:2014-07-17 06:23:04
【问题描述】:
简而言之
我想通过 Tor 网络加载 html 内容并执行 JavaScript 以通过 AJAX 通过该网络加载其他内容。这必须通过在 Linux 服务器上运行的脚本自动完成,无需任何人工干预。我找不到能够自动执行通过 Tor 网络的 JavaScript 的工具组合。
详细说明
我想写一个具有这种特性的应用程序:
环境
- 自主运行(无需任何人工干预)
- 在非 GUI(“无头”)Linux 服务器 (Ubuntu 12.04) 上运行
特点
- 使用 Tor 网络匿名加载 Web 内容(html 文档、图像等)
- 执行嵌入或附加到 html 文档中的 JavaScript(以通过 AJAX 或类似技术加载其他内容)
- 当所有内容都加载时:将 html 文档转换为 DOM 树并从该树中提取特定项目。
环境限制禁止使用网络浏览器。一切都必须由程序或脚本完成。功能约束强制执行不直接连接到互联网,而是通过 Tor 网络的 JavaScript。
托尔
要使用 Tor 网络,我可以在我的机器上运行一个提供套接字的 Tor 客户端。然后我编写了一个连接到这个套接字的 Perl 脚本。 Perl 脚本通过此套接字将 http 和 https 请求发送到 Tor 客户端,后者随后通过 Tor 网络路由它们。所有响应都以相同的方式返回。
我已经测试过了,它工作正常。但是在 Perl 脚本中,执行接收到的 html 文档附带的 JavaScript 确实很困难。我不得不用 Perl 编写一个 JavaScript 模拟器来实现这一点,但这超出了我的可用时间和技能范围。
JavaScript
要执行嵌入或附加的 JavaScript,我可以使用 phantomJS 或 slimerJS 之类的工具(phantomJS 在 Ubuntu 12.04 上无法正常工作,因此我使用提供几乎相同功能的 slimerJS)。使用这个工具,我可以加载 html 文档并自动执行所有附带的 JavaScript,因此我还可以接收到所有不属于最初的 html 文档但后来通过 Ajax 或类似技术加载的内容。此外,我还可以轻松分析文档的 DOM 树以提取我感兴趣的项目。
我也对此进行了测试,它也可以正常工作,但我知道的工具(phantomJS 和 slimerJS)使用它们自己的程序连接到互联网。似乎没有办法告诉他们连接到一个套接字并使用它通过它与互联网进行通信。
我的问题
有没有办法通过 Tor 网络自动执行 Ajax 调用?
对我来说似乎存在两种可能的方式:
- 获取在 Perl 脚本中执行的 JavaScript 代码。这可以通过一个模块来完成,但我找不到任何模拟 JavaScript 解释器的 cpan 模块。解释器应该调用我必须编写的 Perl 函数,而不是直接连接到 Internet。
- 强制 slimerJS(或 phantomJS 或任何其他工具)连接到 localhost 上的套接字并通过此套接字发送所有请求。也许可以在假装提供直接访问互联网但实际上将所有通信重定向到 Tor 客户端的套接字的环境中启动 slimerJS?
【问题讨论】:
-
this 可能会有所帮助。
-
@JohnC 不,它没有帮助。我看不到告诉 WWW::Mechanize 将自己连接到套接字的方法。与 WWW::Mechanize::Firefox 和 WWW::HtmlUnit 相同。顺便说一句:当一个解决方案(如 WWW::Mechanize::Firefox)需要安装 Web 浏览器时,这不是解决方案,因为浏览器需要一个图形用户界面 (GUI),即使它从不使用它。但是在我的机器上没有安装 GUI,我也不打算安装它。 (我的服务器是在距离我 800 公里的商业服务器场中租用的虚拟机。我通过 SSH 与它通信。)
标签: javascript ajax perl sockets tor