使用Tor api制作一个匿名代理服务器

我正在做一个应用程序,使大量的API调用一些网站。 我碰到的麻烦是,该网站每分钟可以进行的API调用数量有限制。 为了解决这个问题,我希望将Tor与node-http-proxy结合使用来创build一个代理表,它使用从tor api中获取的匿名IP地址。

所以我的问题是,这是多么可能,你会推荐什么工具来完成它。 我的应用程序是用JavaScript编写的,所以涉及到像node-tor这样的解决scheme是可取的。

我已经find了一个合理的解决scheme,通过Node.js使用torcurl命令行工具。

下载 tor命令行工具并将其设置在$ PATH中。

现在,我们可以通过这个本地代理发送请求,它将通过TORnetworkingbuild立一个“电路”。 让我们看看我们的IP地址使用http://ifconfig.me 。 你可以将所有这些东西复制到你的节点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代理产生时设置延迟。

接下来,让我们通过TORnetworking并询问http://ifconfig.me什么IP地址正在访问它。

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

如果你想要一个新的IP地址,通过closures然后重新启动tor似乎是最可靠的方法:

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

注意:还有另外一种方式,我曾经看到人们描述获取一个新的IP地址(build立一个新的“电路”),但似乎只有10%的时间在我的testing工作。 如果你想尝试一下:

find并复制torrc.sample torrc ,然后更改torrc如下:

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

    $ tor --hash-password "your_password"

然后,你可以使用这样的function发送一个NEWNYM信号到你的本地tor代理尝试获得一个新的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();