Torify连接并以编程方式更改出口节点

时间:2015-11-18 22:29:39

标签: php curl tor

我正在编写一个PHP脚本,它基本上通过我存储在数据库中的一些数据来循环。这个项目的两个主要重要领域是' url'和' country'。

基本上我要做的是循环遍历所有这些URL并确定哪些链接被破坏(使用一些PHP解析器,但对于解决此问题并不重要)。但是,我遇到的问题是您无法访问分配给某个国家/地区的网址,除非您拥有来自该国家/地区的IP地址。我已经为美国网址设置了这个脚本,因为我在这里,所以它很简单。

我想知道是否以及如何(指向资源,提示,解决方案)我可以使用Tor以编程方式检查此2个字母的国家/地区代码并使用该IP转到该URL。我猜这将与使用该国家的退出节点有关,但我不太确定。

1 个答案:

答案 0 :(得分:2)

使用ExitNodes配置选项,可以使用语法{US}指定特定国家/地区的退出节点,其中US是国家/地区代码。

使用PHP TorUtils库可以通过简单的方式实现自动化。

这是一个代码示例:

<?php

require 'TorUtils/src/ControlClient.php';
require 'TorUtils/src/TorCurlWrapper.php';

// list of country codes to use
$countries = array('US', 'FR', 'RU', 'GB', 'CA');

// get new control client for connecting to Tor's control port
$tc = new Dapphp\TorUtils\ControlClient();

$tc->connect(); // connect
$tc->authenticate('password'); // authenticate

foreach($countries as $country) {
    $country = '{' . $country . '}'; // e.g. {US}

    $tc->setConf(array('ExitNodes' => $country)); // set config to use exit node from country

    // get new curl wrapped through Tor SOCKS5 proxy
    $curl = new Dapphp\TorUtils\TorCurlWrapper();
    $curl->setopt(CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:41.0) Gecko/20100101 Firefox 41.0');

    // make request - should go through exit node from specified country
    if ($curl->httpGet('http://whatismycountry.com')) {
        echo $curl->getResponseBody();
    }
}

TorCurlWrapper是一个简单的cURL包装器,它通过Tor SOCKS5代理路由cURL。 ControlClient用于在每个请求切换到某个国家/地区的ExitNodes之前设置配置选项。

使用composer可以安装TorUtils:

php composer.phar require dapphp/torutils

然后在您的代码中使用require 'vendor/autoload.php';自动加载TorUtils类。

希望这有助于某人。