【问题标题】:Torify connection and change exit node programmaticallyTorify 连接并以编程方式更改出口节点
【发布时间】:2015-11-18 22:29:38
【问题描述】:

我正在编写一个 PHP 脚本,它基本上循环遍历我存储在数据库中的一些数据。该项目的两个主要重要字段是“url”和“country”。

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

我想知道是否以及如何(向我指出资源、提示、解决方案)我可以使用 Tor 以编程方式检查这两个字母的国家代码并使用该 IP 访问该 URL。我猜这与使用那个国家的出口节点有关,但我不太确定。

【问题讨论】:

    标签: php curl tor


    【解决方案1】:

    使用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 类。

    【讨论】:

    • 嘿draw010,你有什么方法可以解析url,而不是只获取ResponseBody?我想在所有重定向之后获取那个结束 URL(因为我的 URL 会有很多)。请让我知道这是否可能
    • 假设 $curl 是您的 CurlWrapper 对象,echo $curl-&gt;getInfo()['url']; 应该返回重定向后使用的最终 URL。如果这不起作用,请告诉我,肯定有办法获取重定向 url。
    • 好的,draw010,我今天正在测试,会尽快通知你
    • drew010,我在尝试使用您的脚本时遇到错误。这是我的带有错误消息的代码:pastebin.com/tK9AXjaM
    • @MilanAM 这只是意味着 Tor 控制服务器没有运行/侦听(默认情况下不会),或者它正在侦听 9051 以外的端口(有时使用 9151)。确保控制端口正在侦听,然后您应该能够连接。
    猜你喜欢
    • 1970-01-01
    • 2010-12-30
    • 1970-01-01
    • 2010-10-06
    • 2016-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-21
    相关资源
    最近更新 更多