Помощь для программы BitTorrent Proxy
Помощь для программы BitTorrent Proxy / Инструкция по созданию файла клиена

Предисловие

В данной инструкции описывается структура файла клиента, а также дается пример по его созданию. Читающему человеку не обязательно разбираться во всех тонкостях HTTP протокола, и в том, как битторрент клиент общается с трекером, однако эти знания намного упростят понимание. В любом случае не поняв полностью описание структуры файла, можно в дальнейшем все понять, прочитав пример по созданию файла клиента.

Структура файла

Файл клиента представляет собой обычный текстовой INI файл, сохраненный в кодировке ANSI (не юникод!). Т.е. вы свободно можете создать новый файл (или отредактировать уже существующий) в стандартном блокноте. Самое главное, это сохранить файл именно в кодировке ANSI.

Для создания нового файла клиента, рекомендуется открыть уже существующий файл и просто отредактировать его и сохранить под другим именем. В этом случае вероятность того, что вы пропустите какой-то из параметров, намного меньше.

Параметры клиента разбиты на 4 раздела:
General - Общая информация о клиенте
Headers - параметры HTTP запроса для эмуляции данного клиента
Peerid - Параметры идентификатора клиента
Key - Параметры значения "Key" в HTTP запросе

Все объяснение будет приводиться на основе файла для клиента uTorrent 1.8.4

Раздел General
Данный раздел содержит 3 параметра:
ID - Идентификатор файла клиента, всегда должен быть равен значению BP14. При любом другом значении BitTorrent Proxy просто проигнорирует данный файл.
Title - Имя эмулируемого клиента.
Author - Имя автора создавшего данный клиент. В принципе не обязательный параметр.

Раздел Headers
Основной раздел, определяющий как BitTorrent Proxy должен построить HTTP запрос.

Urladd - строка параметров посылаемая аннонсеру трекера. Данная строка содержит ряд переменных, которые BitTorrent Proxy изменяет от запроса к запросу. Все переменные пишутся в фигурных скобках "{}". Вот список поддерживаемых, на данный момент, переменных:

  • {thash} - хеш текущего торрента.
  • {peerid} - идентификатор торрент клиента. Более подробные параметры данной переменной указываются в разделе Peerid.
  • {port} - порт текущего подключения.
  • {uploaded} - количество загруженных данных.
  • {downloaded} - количество скачанных данных.
  • {left} - количество данных, которые осталось скачать.
  • {key} - ключ подключения. Более подробные параметры данной переменной указываются в разделе Key.
  • {event} - параметр текущего события.

UserAgent - юзер-агент клиента.
Headers - Остальные параметры HTTP запроса. Параметры между собой должны разделяться посредством {\\n} (В конце всегда должно стоять {\\n}!!!). Также поддерживаются 2 переменные:
  • {host} - текущий хост трекера.
  • {uagent} - значение юзер-агента.

Protocol - Версия HTTP протокола. Как правило, всегда используется HTTP/1.1.

Раздел Peerid
Данный раздел более подробно описывает, как BitTorrent Proxy должен создавать идентификатор торрент клиента.

Prefix - Префикс, неизменная часть идентификатора. У очень многих клиентов имеет длину в 8 символов и данный формат -XXYYYY-, где XX - это две буквы (как правило, аббревиатура имени клиента), а YYYY - 4 цифры (как правило, означающие версию). Но это абсолютно не обязательное правило (как можно видеть, тот же uTorrent 1.8.4 не совсем точно соблюдает его).
PrefixSize - длина префикса (в байтах). Обратите внимание что, не смотря на то, что префикс uTorrent 1.8.4 состоит из 14-ти символов, его длина все же 10 байт, так как строчка закодирована по правилам кодирования URL, и поэтому %ad и %3f обозначают по одному байту каждый.
Encoding - Так как по правилам BitTorrent идентификатор клиента должен иметь длину в 20 байтов, а длина префикса, как правило, намного меньше, то все остальное "пространство" заполняется случайными символами. Параметр Encoding указывает должны ли все символы быть закодированы по правилу кодирования URL. 0 - не должны, 1 - должны.
Uppercase - Определяет должны ли дополнительные символы быть исключительно в верхнем регистре или нет. 0 - не должны, 1 - должны.

Раздел Key
Дополнительные параметры, указывающие как BitTorrent Proxy должен создавать значение ключа Key.

Size - длина ключа.
Type - какие символы использовать для ключа. Поддерживаются 2 значения: Num - только цифры, Hex - цифры и латинские буквы от A до F.
Uppercase - В случае, если параметр Type равен Hex, то определяет должны ли быть буквы в верхнем регистре. 1 - должны, 0 - не должны.

Пример создания

Так как на момент написания данной инструкции ещё не существует файла для клиента uTorrent 3.1, то именно для него мы и будем создавать файл.

В первую очередь нам понадобятся две программы: сам битторрент клиент и сниффер. Я лично в качестве сниффера буду использовать CommView, вы же можете использовать любой другой сниффер, главное, чтоб вы умели с ним работать.

С разделом General никаких трудностей быть не должно, тут все просто:

[General]
ID=BP14
Title=uTorrent 3.1
Author=Megas

Теперь скачаем какой-нибудь торрент файл с любого трекера. Я для этих целей использую трекер opensharing.org. Что хорошо в нем, так это то, что он открытый и торрент файлы можно скачать без какой-либо регистрации, а также его анонсер находится не на стандартном 80 порту, а на 2710. Это нам поможет при нахождении нужных нам пакетов в сниффере.

И так, приступим. Рекомендую в первую очередь отключить все программы, работающие с интернетом (браузер, ICQ, онлайн радио и т.д.), чтоб нам было легче работать. Теперь запустим битторрент клиент и добавим скачанный с трекера торрент файл.

Теперь нажмем на "Дополнительно" и перейдем к списку анонсеров для этого торрента.

Удалим все кроме одного. Оставленный анонсер должен начинаться с http:// (а не с udp:// или https://). Обратите внимание, на каком порте находится анонсер (в данном случае это 2710, если порт не указан, значит, он равен 80).

Оставляем битторрент клиент, но, ни в коем случае, не запускаем раздачу! Теперь запускаем сниффер, устанавливаем фильтр на необходимый порт, дабы отсеять все остальные подключения, которые будут нам мешать.

Запускаем анализ трафика, возвращаемся к битторрент клиенту и запускаем раздачу. Как только видим, что клиент соединился с трекером (в uTorrent это можно видеть на соответствующей закладке),

возвращаемся к снифферу и отключаем анализ трафика. Теперь пройдя к списку "отловленных" пакетов нужно найти необходимый нам пакет, который был обращен именно к нашему трекеру. В идеальном случае в списке отловленных пакетов будет всего один пакет (так как мы отключили все программы работающие с интернетом, а также установили фильтр на нужный нам порт). Просматриваем его содержимое:

Синим здесь отображен запрос от клиента к анонсеру, а красным ответ анонсера. Ответ анонсера нам абсолютно не нужен, так что сконцентрируемся на (синем) запросе. Разберем сначала первую строчку:

GET /announce?info_hash=%85ge%b4%13%5c%d77%b8%c0q%c9%f4%9e%0d%de%1ap%02%b2&peer_id=-UT3100-%e1gJ%f3%a4%24%eb%bf%12%dc%f8%13&port=15346&uploaded=0&downloaded=0&left=1887477760&corrupt=0&key=3A579D8B&event=started&numwant=200&compact=1&no_peer_id=1 HTTP/1.1
Она всегда имеет следующий вид "GET путь_до_анонсера?строка_параметров протокол". Так что мы уже можем указать версию протокола в файле клиента:
Protocol=HTTP/1.1
Строка с параметрами это всё, что начинается с info_hash=. Просто скопируем строку в Urladd и заменим не нужные части переменными и получим строчку такого вида:
Urladd=info_hash={thash}&peer_id={peerid}&port={port}&uploaded={uploaded}&downloaded={downloaded}&left={left}&corrupt=0&key={key}{event}&numwant=200&compact=1&no_peer_id=1
Как можно видеть, данная строка идентична версии 1.8.4. Обычно эта строка не меняется от версии к версии какого либо клиента. Просматривая другие параметры HTTP запроса, сразу видим, что юзер-агент у нас равен uTorrent/3100(26593), так что добавляем его в файл клиента.
UserAgent=uTorrent/3100(26593)
Теперь просто переписываем остальные заголовки, разделяя их ключом {\\n} и заменяя имя хоста переменной {host}, а юзер-агента переменной {uagent}. Как видно тут есть ряд отличий от версии 1.8.4.
Headers=Host: {host}{\\n}User-Agent: {uagent}{\\n}Accept-Encoding: gzip{\\n}Connection: Close{\\n}Content-Length: 0{\\n}

Теперь займемся разделом Perrid. Идентификатор клиента это строчка находящаяся между peer_id= и ближайшим знаком &.

peer_id=-UT3100-%e1gJ%f3%a4%24%eb%bf%12%dc%f8%13&
Цветом выделены разные части идентификатора, красным выделена постоянная часть, а зеленым случайные символы, не имеющие какого либо значения. Для определения постоянной части, я рекомендую провести процедуру по отлову пакета подключения (то, что мы сделали в самом начали) несколько раз, при чем, между каждом разом полностью закрывать и запускать заново битторрент клиент. После этого вы четко увидите, какая именно часть из всей этой строчки не меняется. В данном случае постоянная часть равна -UT3100-%e1g, её длина в байтах равна 10, все остальные символы закодированы по правилу кодирования URL и они имеют нижний регистр. Так что получаем следующие настройки:
[Peerid]
Prefix=-UT3100-%e1g
PrefixSize=10
Uppercase=0
Encoding=1
Очень важно правильно определить идентификатор клиента, если вы сделаете это не правильно, то вы рискуете получить бан на трекере, когда будете использовать его.

С разделом Key всё тоже предельно просто. Ключ у нас имеет следующее значение (выделен красным):

key=3A579D8B&
Как видно он состоит из 8 символов, это цифры и буквы (от A до F), буквы имеют верхний регистр. Так что раздел Key будет иметь следующие настройки:
[Key]
Size=8
Type=Hex
Uppercase=1

Вот и всё, сохраняем полученый файл в папке с файлами клиентов и им можно пользоваться.

Если вы создадите новый файл клиента, которого нет в списке на сайте, то присылайте его мне, я добавлю его в общий список с обязательным указанием авторства.