Прервите соединение и измените узел выхода программно

1

Я пишу скрипт PHP, который в основном циклыет через некоторые данные, которые я сохранил в своей базе данных. Двумя основными важными областями для этого проекта являются "url" и "country".

В основном то, что я пытаюсь сделать, - это цикл через все эти URL-адреса и определить, какие ссылки были нарушены (с использованием какого-либо PHP-решения, но не важно знать эту проблему). Однако проблема, с которой я столкнулась, заключается в том, что вы не можете получить доступ к URL-адресу, присвоенному определенной стране, если у вас нет IP-адреса, исходящего из этой страны. У меня уже есть этот скрипт, настроенный для URL-адресов США, потому что я здесь, и поэтому он делает это просто.

Мне было интересно, если и как (укажите мне ресурсы, советы, решения). Я могу использовать Tor для программной проверки этого двухбуквенного кода страны и перехода к этому URL-адресу с использованием этого IP-адреса. Я предполагаю, что это будет иметь какое-то отношение к использованию Exit Node из этой страны, но я не уверен.

Теги:
curl
tor

1 ответ

2
Лучший ответ

Используя ExitNodes конфигурации 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 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-обертка, которая маршрутизирует cURL через прокси-сервер Tor SOCKS5. ControlClient используется для установки параметра конфигурации перед каждым запросом для перехода на ExitNodes из определенной страны.

Используя композитор, вы можете установить TorUtils:

php composer.phar require dapphp/torutils

Затем в вашем коде используйте require 'vendor/autoload.php'; для автозагрузки классов TorUtils.

Надеюсь, это поможет кому-то.

  • 0
    Эй, drew010, у тебя есть способ, как я могу решить URL, вместо того, чтобы просто получить ResponseBody? Я хочу получить этот конечный URL после всех перенаправлений (потому что мой URL будет иметь много). Пожалуйста, дайте мне знать, если это возможно
  • 0
    Предполагая, что $curl является вашим объектом CurlWrapper, echo $curl->getInfo()['url']; должен вернуть окончательный URL-адрес, используемый после перенаправления. Если это не работает, дайте мне знать, определенно есть способ получить URL перенаправления.
Показать ещё 10 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню