SHARE
TWEET

Bittorrent proxy announcer

a guest Mar 24th, 2017 3,314 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2.  
  3. $config = [
  4.   // Включение записи отладочной информации
  5.   'log' => false,
  6.   // Список "проксируемых" трекеров
  7.   'allow' => [
  8.     'rutracker' => [
  9.       // Список хостов-анонсеров
  10.       'hosts' => [
  11.         'bt.t-ru.org',
  12.         'bt2.t-ru.org',
  13.         'bt3.t-ru.org',
  14.         'bt4.t-ru.org',
  15.         'bt.rutracker.cc',
  16.         'bt2.rutracker.cc',
  17.         'bt3.rutracker.cc',
  18.         'bt4.rutracker.cc',
  19.       ],
  20.       // Адрес анонсера на данном трекере
  21.       'uri' => '/ann',
  22.       'check' => [
  23.         // Заменить на актуальный пасскей, либо закомментировать, если проверка не требуется
  24.         'pk' => '0123456789abcdef',
  25.       ],
  26.     ],
  27.   ],
  28. ];
  29.  
  30. /******************************************************************************/
  31.  
  32. // @see: http://www.bittorrent.org/beps/bep_0003.html#trackers
  33. $_GET['ip'] = $_SERVER['REMOTE_ADDR'];
  34.  
  35. $host = $_GET['dst'];
  36. unset($_GET['dst']);
  37.  
  38. $uri = null;
  39. foreach ($config['allow'] as $item) {
  40.   // Разрешаем проксирование только для известных хостов
  41.   if (in_array($host, $item['hosts'])) {
  42.     $uri = $item['uri'];
  43.     // Проверяем допустимые для данного трекера параметры в запросе, например пасскей
  44.     foreach ($item['check'] as $key => $value) {
  45.       if (!isset($_GET[$key]) || $_GET[$key] != $value) {
  46.         $uri = null;
  47.         break;
  48.       }
  49.     }
  50.     break;
  51.   }
  52. }
  53.  
  54. if ($uri) {
  55.   $announce = "http://{$host}{$uri}?" . http_build_query($_GET);
  56.   $ses = curl_init($announce);
  57.   curl_setopt_array($ses, [
  58.     CURLOPT_RETURNTRANSFER => true,
  59.     CURLOPT_TIMEOUT        => 20,
  60.     CURLOPT_USERAGENT      => $_SERVER['HTTP_USER_AGENT'], // Может проверяться анонсером
  61.   ]);
  62.   $result = curl_exec($ses);
  63.   $info = curl_getinfo($ses);
  64.   header("Content-Type: {$info['content_type']}", true, $info['http_code']);
  65.   print $result;
  66. } else {
  67.   header('Content-Type: text/plain', true, 404);
  68. }
  69.  
  70. if ($config['log']) {
  71.   // Сохраняем лог запроса/ответа для отладки
  72.   $logfile = __DIR__ . '/btlog/' . date('Y-m-d/U') . '.txt';
  73.   mkdir(dirname($logfile), 0700, true);
  74.   file_put_contents(
  75.     $logfile,
  76.     var_export($_GET, true) . PHP_EOL . PHP_EOL .
  77.     var_export($_POST, true) . PHP_EOL . PHP_EOL .
  78.     var_export($_SERVER, true) . PHP_EOL . PHP_EOL .
  79.     var_export($info, true) . PHP_EOL . PHP_EOL .
  80.     $result
  81.   );
  82. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top