使用Tor api制作一个匿名代理服务器
我正在做一个应用程序,使大量的API调用一些网站。 我碰到的麻烦是,该网站每分钟可以进行的API调用数量有限制。 为了解决这个问题,我希望将Tor与node-http-proxy结合使用来创build一个代理表,它使用从tor api中获取的匿名IP地址。
所以我的问题是,这是多么可能,你会推荐什么工具来完成它。 我的应用程序是用JavaScript编写的,所以涉及到像node-tor这样的解决scheme是可取的。
我已经find了一个合理的解决scheme,通过Node.js使用tor
和curl
命令行工具。
下载 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
如下:
- 取消注释
ControlPort 9051
(9050是本地代理,开放9051让我们控制它) - 取消注释并设置
CookieAuthentication 0
。 -
取消注释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();