linux @ 11 Август 2008
В предыдущих статья я рассматривал, как увеличивать рейтинг на торрент трекерах, с помощь отсылки GET запросов получаемых с помощью Wireshark и tcpdump, в этом посте я хочу рассказать, как можно модифицировать код rtorrent таким образом, чтобы он отсылал другие показатели на сервер:
- количество скачанного
- количество отданного
- сколько осталось скачивать
- представлятся другим торрент клиентом(если вдруг rtorrent неразрешен на трекере)
Также мы рассмотрим различные способы улучшения работы rtorrent. В общем, на мой взгляд это одна из наиболее полезных статей в серии.

Итак, приступим:
Сперва наперво нам необходимо скачать исходники rtorrent и libtorrent:
wget http://libtorrent.rakshasa.no/downloads/rtorrent-0.8.2.tar.gz
wget http://libtorrent.rakshasa.no/downloads/libtorrent-0.12.2.tar.gz

Далее разархивируем их(можно взять последнюю development версию из svn, как это сделать - описано в этой статье):
tar zxvf rtorrent-0.8.2.tar.gz
tar zxvf libtorrent-0.12.2.tar.gz

Итак, приступим к модификации кода.

Пункт первый - увеличиваем отдачу:
vim libtorrent-0.12.2/src/tracker/tracker_http.cc
Находим строчку: s << "&uploaded=" << up
Изменяем значение up, на (up*2), это увеличит отдачу в два раза, строка итоговая будет выглядеть так: s << "&uploaded=" << (up*2)

Пункт второй - уменьшаем количество скачиваемого:
Ищем строку: << "&downloaded=" << down
Меняем соответственно down на (down*0.5).

Пункт третий - уменьшаем количество оставшегося:
Ищем строку: << "&left=" << left;
Заменяем left на (left*0.5), нужно менять на то же значение, что и down, поскольку некоторые трекеры смотрят на параметры отдаваемых торрент-клиентом(лучше вообще эти параметры не менять).

Пункт четвёртый - надеваем чужую маску:
Не секрет, что помимо указанных выше данных торрент-клиент сообщает трекеру своё название, и код этого названия с потолка не берётся, давайте ознакомимся со списком примерных User Agent'ов:
peer_id (PEER_NAME) User-Agent String: USER_AGENT:
-AZ3022- Azureus 3.0.2.2 Azureus/3022
-BC0091- BitComet 0.0.9.1 BitComet/0091
-BF1355- BitFlu 1.3.5.5 BitFlu/1355
-UT1610- uTorrent 1.6.1.0 uTorrent/1610

Расшифровывается очень просто -UAVERS-, где UA сокращённый User Agent, а VERS - V.E.R.S - версия torrent-клиента без точек.
На многих трекерах запрещены User Agent, использующие возможность скачивания без возможности отдачи(например на torrents.ru таким образом закрыта Opera), вот список UA, которые, с высокой долей вероятности ни на одном трекере закрыты не будут:
'AG' - Ares
'A~' - Ares
'AR' - Arctic
'AV' - Avicora
'AX' - BitPump
'AZ' - Azureus
'BB' - BitBuddy
'BC' - BitComet
'BF' - Bitflu
'BG' - BTG (uses Rasterbar libtorrent)
'BR' - BitRocket
'BS' - BTSlave
'BX' - ~Bittorrent X
'CD' - Enhanced CTorrent
'CT' - CTorrent
'DE' - DelugeTorrent
'DP' - Propagate Data Client
'EB' - EBit
'ES' - electric sheep
'FT' - FoxTorrent
'GS' - GSTorrent
'HL' - Halite
'HN' - Hydranode
'KT' - KTorrent
'LH' - LH-ABC
'LP' - Lphant
'LT' - libtorrent
'lt' - libTorrent (rtorrent)
'LW' - LimeWire
'MO' - MonoTorrent
'MP' - MooPolice
'MR' - Miro
'MT' - MoonlightTorrent
'PD' - Pando
'qB' - qBittorrent
'QD' - QQDownload
'QT' - Qt 4 Torrent example
'RT' - Retriever
'S~' - Shareaza alpha/beta
'SB' - ~Swiftbit
'SS' - SwarmScope
'ST' - SymTorrent
'st' - sharktorrent
'SZ' - Shareaza
'TN' - TorrentDotNET
'TR' - Transmission
'TS' - Torrentstorm
'TT' - TuoTu
'UL' - uLeecher!
'UT' - µTorrent
'WT' - BitLet
'WY' - FireTorrent
'XL' - Xunlei
'XT' - XanTorrent
'XX' - Xtorrent
'ZT' - ZipTorrent

Более полный список можно посмотреть на этой страничке.
Итак, чтобы сменить открываем файл:
vim libtorrent-0.12.2/configure
И меняем там
#define PEER_NAME "-lt0B01-"
Например на:
#define PEER_NAME "-UT1720-"
Также, чтобы не вычислили подмену заменяем в файле:
vim rtorrent-0.8.2/configure
#define USER_AGENT std::string(PACKAGE "/" VERSION "/") + torrent::version()
На:
#define USER_AGENT "uTorrent/1720"
В принципе это основные шпионские штучки, в общем - главное не попадитесь ;)

Теперь займёмся модификацией исходного кода в сторону улучшения работы rtorrent.
Открываем:
vim libtorrent-0.12.2/src/protocol/peer_connection_leech.cc
И заменяем:
if (cachedTime - m_timeLastRead > rak::timer::from_seconds(240))
if (cachedTime - m_timeLastRead > rak::timer::from_seconds(20))

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

В принципе всё, что я хотел рассказать о работе с rtorrent, завтра-послезавтра я коротко расскажу как можно изменить отдачу в Deluge.




37 Response to “Torrent рейтинг - 3”

  1. set (анонимно) Says:

    ой, а для азуреуса третьей версии будут варианты? :) а то у меня с аплодом туговато... держу ратио в норме, но приходится себе во многом отказывать :(

  2. guy (анонимно) Says:

    угу. помогите ненасытным потребителям убить битторент своим потребительским подходом.

  3. librarian (анонимно) Says:

    Это так, изыскания на тему. Я привожу пример opensource программ, я ровно также видел и uTorrent(у которого, кстати исходники закрыты) пробитый и специальные программы которые работают навроде прокси. И что то я не вижу гибели p2p-torrent сетей. Те у кого канал широкий вообще на эту тему не заморачиваются, основная масса ни про что такое не знает, а небольшая часть которая будет всё это выполнять, ничего особенного на общем фоне не сделает.

    Azureus'ом не пользуюсь, уж больно много ресурсов он ест. И желания раскапывать сорцы к нему не очень большое. За n-ую сумму могу конечно покопаться, но мне оно лично не надо...

  4. homolibere (анонимно) Says:

    ай молодца, ай правильную тему описал. очень признателен. как руки дойдут, так обязаточно копипаст в свой блог (авторство соблюдем).

  5. bobirk (анонимно) Says:

    Я себе приблуду писал в виде http proxy для коммуникации с трекером. В сорцы тогда лезть не надо и многие клиенты можно приучить :)

  6. librarian (анонимно) Says:

    Если будет время, то расскажу как можно будет написать такое, это в принципе несложно. Можно и локалхостовский прокси использовать, и на сервере собрать... Да и сквид соответствующим образом настроить.

  7. bobirk (анонимно) Says:

    Добавь опцию подписки на комментарии по e-mail лучше ;)

  8. librarian (анонимно) Says:

    @bobirk:

    Сделал :)

  9. mikoto (анонимно) Says:

    Плохо так поступать. Широкий - не широкий канал, а раздать даже в два раза больше, чем скачал, не проблема. По крайней мере, со своими 128 кбитами (раньше 64) никогда не возникало проблем с рейтингом.

  10. librarian (анонимно) Says:

    Плохо - не плохо, вопрос технический.

    У меня тоже не возникало.

  11. mikoto (анонимно) Says:

    Раз так - согласен.

    В принципе, весь open source рассчитан на порядочность )

  12. Samyon (анонимно) Says:

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

    #define USER_AGENT std::string(PACKAGE "/" VERSION "/") + torrent::version()

    На:

    #define USER_AGENT "uTorrent/1720"

    Я заменил на

    #define USER_AGENT std::string( "uTorrent/1720")

    Что скажешь?

  13. librarian (анонимно) Says:

    А на каком этапе то вылетает?

  14. Samyon (анонимно) Says:

    На этапе make. Пишет Error после экрана листинга. Что конкретно говорит - не помню, если надо скажу. Только я компилил последние стабильные релизы, а ты последние беты. Может в этом дело?

    А кстати, как можно запустить нормальный rTorrenent и патченный на 1 машине? Только через Chroot? А по другому можно? :-)

  15. librarian (анонимно) Says:

    Если просто интересно разобраться будет(мне кстати интересно) то можешь на почту скинуть, у меня в http://librarian.spb.ru/work/ указан адрес.

    Можно два rtorrent запускать, с разными конфигами, а так да, только через chroot.

  16. Начало учебного года | librarian@blog:~$ (анонимно) Says:

    [...] Конника. Самыми читаемыми статьями в этом месяце были: Torrent рейтинг - 3 Как я оптимизировал систему: Ubuntu 8.04 Hardy Дружим mutt и GMail. [...]

  17. Samyon (анонимно) Says:

    I'm sorry...

    Короче, я стал компилировать ещё раз, как у тебя написано, и всё получилось. Наверно что-то в прошлый раз не так сделал... :-(

  18. alias (анонимно) Says:

    Пытался сделать у себя:

    "Находим строчку: s << "&uploaded=" << up"

    Нету такой, у меня в libtorrent-0.12.2 она выглядит вот так:

    s << "&uploaded=" <uploaded_adjusted()

    Что на что можно здесь заменить? Все строки для замены, описанные в статье у меня выполняют info... Что делать?

  19. librarian (анонимно) Says:

    Используй более старую библиотеку. Это описано, если не ошибаюсь для 11.

  20. alias (анонимно) Says:

    Не могу! Ибо FreeBSD и все установлено из портов. Не буду отступать от единой системы, а то забуду потом и наворочу делов :) Кроме того 12 библиотеку требует rtgui 0.2.5!

  21. librarian (анонимно) Says:

    Ну я пока новые версии библиотек не разбирал, и пока не буду. Ноут купил, не до rtorrent.

  22. tierpunk (анонимно) Says:

    у меня стоит 804 убунту, такая же проблема "&uploaded;=" uploaded_adjusted(), скачал версию из 710, заменил строчку скомпилировал, запустил все ок, вот только ifconfig говорит что я отдал 4 гега и на торренте сказанно что отдано 4 гега, тоесть результата ноль, хотя делал умножение uploaded на 3

  23. librarian Says:

    Ещё раз повторюсь, это было написано для старых версий библиотеки и самого rtorrent(конкретную версию я уже не помню). Если хотите накрутить рейтинг по описанной здесь методике - используйте старые библиотеки. На новых несколько иная методика отправки данных, разбираться в ней снова и в дальнейшем поддерживать я не хочу и не собираюсь в ближайшем обозримом будущем.

  24. tierpunk (анонимно) Says:

    ок понятно.

  25. evkon Says:

    s

  26. evkon (анонимно) Says:

    в новых версиия домножаем не "up", а "info", то есть будет выглядеть так:

    s

  27. jeka (анонимно) Says:

    Мне интересно, есть ли готовое решение типа greedy под linux? просто вкомпиливать накрутку рейтинга неохота - негибкое решение...

  28. librarian Says:

    Нет, по крайней мере я пока так далеко в изучении С++ не ушёл

  29. jeka (анонимно) Says:

    не, имееться ввиду, вообще существует ли таковой в природе (кем-то писанный)?

  30. librarian Says:

    Не в курсе, думаю что где то у кого то есть. Azureus(не помню как он сейчас называется) такой функционал с плагином поставляет

  31. jeka (анонимно) Says:

    У меня еще вопрос по третьему пункту:

    ты пишешь, мол, left тоже надо умножать на тот же коэффициент, что и downloaded. Позволь с тобой не согласиться - например:

    торрент весит 100 метров, я скачал 20 метров, в downloaded сказал, что скачал 10 метров (для коэффициента 0.5). Получаеться, я должен в left сказать 90 метров (100 - 20 * 0.5), но на самом деле left = left * 0.5 = 80 * 0.5 = 40

    Или я может чего-то не учел?

  32. Олег (анонимно) Says:

    В либторенте я сделал так:

    s

  33. librarian Says:

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

  34. librarian Says:

    TODO: Пофиксить баг этот, с угловыми скобками

  35. Олег (анонимно) Says:

    Аэм сори, а код мой видно или нет? )) Если нет, то я еще раз запостю. )

  36. librarian Says:

    Видно, правда только мне, я когда патчи свои доделаю, для всяких других современных торрент клиентов - тебя обязательно упомяну.

  37. Аноним (анонимно) Says:

    Олег, не видно. Если не трудно запости еще раз.

Leave a Reply

Не регистрировать/аноним

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email.
(При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д.)


(обязательно)