【问题标题】:Using the Tor api to make an anonymous proxy server使用 Tor api 制作匿名代理服务器
【发布时间】:2013-08-01 07:50:41
【问题描述】:

我正在制作一个对某个站点进行大量 api 调用的应用程序。我遇到的麻烦是该站点对每分钟可以进行的 api 调用数量有限制。为了解决这个问题,我希望将Tornode-http-proxy 结合使用来创建一个代理表,该表使用取自tor api 的匿名IP 地址。

所以我的问题是,这有多大可能,你会推荐什么工具来完成它。我的应用程序是用 javascript 编写的,因此涉及 node-tor 之类的解决方案更可取。

【问题讨论】:

  • 我要跳出一步,说你规避限制可能违反了 API 提供者的服务条款。限制就在那里,因为这是他们所能提供的全部。您应该要求 API 提供商帮助您在他们的限制范围内工作,或者您应该告诉他们为什么限制太低。
  • 正如@Bergi 所说——缓存请求,或设置本地服务器以在开发时返回虚拟/真实数据。如果数据以 JSON 形式返回,那甚至可以是您提供的纯文本文件,只要使用正确的 mime 类型即可。
  • 对不起,我不明白您的代理表会如何改变:远程站点不会仍然收到来自同一 IP 的传入请求吗?我在使用网络爬虫时遇到过这样的问题,我通常使用async 来限制我的爬虫的吞吐量以适应被爬取的站点自身的限制。
  • 如果您使用的 API 通过计算 IP 地址发出请求的次数来施加限制,那么使用 TOR 听起来像是一个有趣的选择。 API 是否还要求您提供私钥来访问其服务? (如果是这样,更改请求来自的 IP 地址不会有太大帮助,不是吗?)

标签: javascript node.js proxy tor


【解决方案1】:

我通过 Node.js 使用 torcurl 命令行工具找到了一个合理的解决方案。

Downloadtor 命令行工具并将其设置在您的 $PATH 中。

现在,我们可以通过这个本地 tor 代理发送请求,该代理将通过 TOR 网络建立“电路”。让我们使用http://ifconfig.me 来查看我们的IP 地址。您可以将所有这些内容复制粘贴到您的 Node REPL 中:

var cp = require('child_process'),
    exec = cp.exec,
    spawn = cp.spawn,
    tor = spawn('tor'),
    puts = function(err,stdo,stde){ console.log(stdo) },
    child;

在此之后,您可能希望在生成 tor 代理并自行设置时延迟构建。

接下来,让我们通过 TOR 网络,询问http://ifconfig.me 访问它的 IP 地址是什么。

function sayIP(){
  child = exec('curl --proxy socks5h://localhost:9050 http://ifconfig.me',puts);
}

sayIP();

如果你想要一个新的 IP 地址,通过关闭再打开来重新启动tor 似乎是最可靠的方法:

function restartTor(){
  tor.kill('SIGINT');
  tor = spawn('tor');
}

restartTor();

注意:还有另一种方式我看到人们描述了即时获取新 IP 地址(设置新的“电路”),但它似乎只适用于大约 10%我测试的时间。如果你想试试:

找到torrc.sample并将其复制到torrc,然后将torrc更改如下:

  1. 取消注释ControlPort 9051(9050是本地代理,打开9051让我们控制它)
  2. 取消注释并设置CookieAuthentication 0
  3. 取消注释 HashedControlPassword 并将结果设置为:

    $ tor --hash-password "your_password"

然后您可以使用这样的函数向您本地的tor 代理发送 NEWNYM 信号,以尝试在不重新启动的情况下获取新的 IP 地址。

function newIP(){
  var signal = 'echo -e "AUTHENTICATE \"your_password\"\r\nsignal NEWNYM\r\nQUIT" | nc -v 127.0.0.1 9051';
  child = exec(signal,puts);
}

newIP();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-16
    • 2010-12-30
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-10
    • 2020-03-11
    相关资源
    最近更新 更多