Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- $config = [
- // Включение записи отладочной информации
- 'log' => false,
- // Список "проксируемых" трекеров
- 'allow' => [
- 'rutracker' => [
- // Список хостов-анонсеров
- 'hosts' => [
- 'bt.t-ru.org',
- 'bt2.t-ru.org',
- 'bt3.t-ru.org',
- 'bt4.t-ru.org',
- 'bt.rutracker.cc',
- 'bt2.rutracker.cc',
- 'bt3.rutracker.cc',
- 'bt4.rutracker.cc',
- ],
- // Адрес анонсера на данном трекере
- 'uri' => '/ann',
- 'check' => [
- // Заменить на актуальный пасскей, либо закомментировать, если проверка не требуется
- 'pk' => '0123456789abcdef',
- ],
- ],
- ],
- ];
- /******************************************************************************/
- // @see: http://www.bittorrent.org/beps/bep_0003.html#trackers
- $_GET['ip'] = $_SERVER['REMOTE_ADDR'];
- $host = $_GET['dst'];
- unset($_GET['dst']);
- $uri = null;
- foreach ($config['allow'] as $item) {
- // Разрешаем проксирование только для известных хостов
- if (in_array($host, $item['hosts'])) {
- $uri = $item['uri'];
- // Проверяем допустимые для данного трекера параметры в запросе, например пасскей
- foreach ($item['check'] as $key => $value) {
- if (!isset($_GET[$key]) || $_GET[$key] != $value) {
- $uri = null;
- break;
- }
- }
- break;
- }
- }
- if ($uri) {
- $announce = "http://{$host}{$uri}?" . http_build_query($_GET);
- $ses = curl_init($announce);
- curl_setopt_array($ses, [
- CURLOPT_RETURNTRANSFER => true,
- CURLOPT_TIMEOUT => 20,
- CURLOPT_USERAGENT => $_SERVER['HTTP_USER_AGENT'], // Может проверяться анонсером
- ]);
- $result = curl_exec($ses);
- $info = curl_getinfo($ses);
- header("Content-Type: {$info['content_type']}", true, $info['http_code']);
- print $result;
- } else {
- header('Content-Type: text/plain', true, 404);
- }
- if ($config['log']) {
- // Сохраняем лог запроса/ответа для отладки
- $logfile = __DIR__ . '/btlog/' . date('Y-m-d/U') . '.txt';
- mkdir(dirname($logfile), 0700, true);
- file_put_contents(
- $logfile,
- var_export($_GET, true) . PHP_EOL . PHP_EOL .
- var_export($_POST, true) . PHP_EOL . PHP_EOL .
- var_export($_SERVER, true) . PHP_EOL . PHP_EOL .
- var_export($info, true) . PHP_EOL . PHP_EOL .
- $result
- );
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement