В связи с переходом на линукс, встала проблема о использовании торрентов. И не просто использовании, а что бы как и раньше – не думать о рейтинге. Благо, тут всё opensource и всё намного проще чем в случае с uTorrent.
.
В качестве клиента я выбрал Deluge. Он лёгкий, достаточно быстрый и часто обновляется. Написан на питоне и использует libtorrent.
.
Так как патч будет для libtorrent, то он будет работать для всех клиентов, использующих эту либу.
И так, приступим.
.
Скачиваем свежий libtorrent-rasterbar, распаковываем в любую удобную папку.
Теперь, нужно найти в каком файле передаётся информация на трекер. Выполним поиск по содержимому файлов:
find -type f -exec grep -il “downloaded” {} ;
На выходе будет достаточно большой список файлов. Опытным путём, установлено, что нужные файлы:
./src/http_tracker_connection.cpp
./src/udp_tracker_connection.cpp
Их-то и предстоит патчить.
.
Как видно из названия, первый файл – для http соединений, а второй – для udp. Второй случай, конечно, много реже, но его так же не мешает пропатчить.
.
Теперь по порядку:
.
http_tracker_connection.cpp
Находим строку в которой есть “downloaded”. У меня сразу был найдена нужная строка, выглядит примерно так:
snprintf(str, sizeof(str), “&peer_id=%s&port=%d&uploaded=%”PRId64
“&downloaded=%”PRId64″&left=%”PRId64″&corrupt=%”PRId64″&compact=1″
“&numwant=%d&key=%x&no_peer_id=1″
, escape_string((const char*)&tracker_req().pid[0], 20).c_str()
, tracker_req().listen_port
, stats ? tracker_req().uploaded : 0
, stats ? tracker_req().downloaded : 0
, stats ? tracker_req().left : 0
, stats ? tracker_req().corrupt : 0
, tracker_req().num_want
, tracker_req().key);
url += str;
Здесь нас интересуют параметры downloaded и left.
Теперь просто заменим строки
, stats ? tracker_req().downloaded : 0
, stats ? tracker_req().left : 0
на
, 0
, 0
Тут, конечно, можно добавить деление реально скачанного, например, на 5. Что бы уменьшить риск бана, но это уже по вкусу.
.
Далее, udp_tracker_connection.cpp:
Находим строки вида
detail::write_int64(stats ? req.downloaded : 0, out); // downloaded
detail::write_int64(stats ? req.left : 0, out); // left
И по аналогии с http версией заменяем их на
detail::write_int64(0, out); // downloaded
detail::write_int64(0, out); // left
Вот собственно и всё. Осталось скомпилировать и установить libtorrent:
./configure && make && make install
В случае с ubuntu, не забывайте о sudo.
.
Надо сказать, собирается он довольно долго. На моём Athlon X2 2.1 Ghz и 3GB озу это заняло около 15-ти минут.
.
Да, всё описанное действительно для версии 0.15.0. Например в 0.14.9 строки выглядят немного по другому, хотя найти их не составляет труда.
Похожие записи:
апреля 17, 2010 at 15:16
А как этот патч привязать(присунуть) к Deluge или его вручную прокомпилить и он идет как составляющая к Deluge?
Просто боюсь то что Deluge свою либу постарее версии юзает и может даунгрейдить эту.
апреля 17, 2010 at 15:20
Просто собираешь и устанавливаешь эту либу, deluge её подхватит при запуске. Главное, что бы версия совместимая была.
апреля 17, 2010 at 15:22
А Deluge должен быть установлен заранее?
mr.The: не имеет значения. Хотя, у меня был установлен до патча.
апреля 17, 2010 at 15:38
вот не люблю таких людей, хотите скачать, но не готовы другим помочь. на этом основано п2п коммьюнити
апреля 17, 2010 at 15:56
ZogG Пишет:
апреля 17, 2010 at 15:38
Личеров куча, а п2п коммьюнити где то за бугром или даже в другом мире.
Так что нафиг раздавать и портить себе жесткий диск лишней нагрузкой.
апреля 17, 2010 at 16:26
Нет, раздавать надо, но по мере сил. Я уже ответил тебе в твиттере, что у меня асимметричный канал, и поддерживать ратио проблематично. Поэтому раздаю по мере сил 24\7 и не напрягаюсь.
Как там было.. От каждого по способностям, каждому по потребностям?
апреля 17, 2010 at 18:09
Раздавать не надо.Мое Эго выше обычных людишек и я могу лишь в НГ и еще какие-то дни выделить 50 кб/c на сидерство.
апреля 21, 2010 at 6:59
@Tiradoir, чтоб тебе сидеры на всех торрентах больше 10кб\с не выдавали
апреля 21, 2010 at 14:27
На правах кэпа: у меня обычно так и есть, ~50 сидеров отдают по 1-10 кб. Норм)
мая 3, 2010 at 19:23
А вот нихера, я имел ввиду общий поток отдач =р
июня 16, 2010 at 10:40
для freebsd интересен /usr/ports/net-p2p/libtorrent/work/libtorrent-0.12.6/src/tracker/tracker_http.cc
июня 18, 2010 at 9:06
на ./configure застревает =[
mr.The: всё понятно же, нужно установить boost. А гугл подскажет, как это сделать.
июля 3, 2010 at 11:54
В libtorrent-rasterbar-0.14.10 не так совсем.
Нет left и stats в файле http_tracker_connection.cpp
Даже похожего ничего нет.
Не подскажешь, что там менять?
Спасибо.
июля 3, 2010 at 11:56
есть такое:
}
entry const* complete = scrape_data->find_key(“complete”);
entry const* incomplete = scrape_data->find_key(“incomplete”);
entry const* downloaded = scrape_data->find_key(“downloaded”);
if (complete == 0 || incomplete == 0 || downloaded == 0
|| complete->type() != entry::int_t
|| incomplete->type() != entry::int_t
|| downloaded->type() != entry::int_t)
{
июля 3, 2010 at 12:02
И такое:
url += “&downloaded=”;
url += to_string(tracker_req().downloaded).elems;
url += “&left=”;
url += to_string(tracker_req().left).elems;
mr.The: вот это как раз то, что нужно.
Заменяешь to_string(tracker_req().downloaded).elems; на “0″
и to_string(tracker_req().left).elems так же на “0″.
июля 3, 2010 at 12:57
Большое спасибо, заменил. Все зависимости удовлетворены, но при компиляции вылезает такая ошибка:
../../src/http_tracker_connection.cpp:140: error: expected ‘;’ before ‘url’
make[3]: *** [http_tracker_connection.lo] Ошибка 1
make[3]: Leaving directory `/home/serge/libtorrent-rasterbar-0.14.10/build/src’
make[2]: *** [all-recursive] Ошибка 1
make[2]: Leaving directory `/home/serge/libtorrent-rasterbar-0.14.10/build’
dh_auto_build: make -j1 returned exit code 2
make[1]: *** [override_dh_auto_build-nopy] Ошибка 2
В этой 140 строке следующее:
url += “&corrupt=”;
Может её тоже теперь менять нужно?
июля 3, 2010 at 13:09
Я так выставил:
url += “&downloaded=”;
url += 0;
url += “&left=”;
url += 0;
Может не правильно?
июля 3, 2010 at 13:15
Даже с оригинальным файлом не собирается. Что-то ему в этом файле не нравится:
../../src/http_tracker_connection.cpp:143: error: expected ‘;’ before ‘if’
../../src/http_tracker_connection.cpp:466: error: expected ‘}’ at end of input
../../src/http_tracker_connection.cpp:466: error: expected ‘}’ at end of input
../../src/http_tracker_connection.cpp: At global scope:
../../src/http_tracker_connection.cpp:466: error: expected ‘}’ at end of input
make[3]: *** [http_tracker_connection.lo] Ошибка 1
июля 3, 2010 at 14:35
Какой-то касяк при сборке. Может потому что сижу на нестабильном Дебиане:-)
Пропатчил и собрал libtorrent под rtorrent.
Патчится намного быстрее и проще. Много настроек накруток и всяких обманов. Себе уменьшил до нуля download. Работает. Другие настройки лень было проверять.
На этом успокоился)
августа 7, 2010 at 23:13
Очень полезно. rTorrent 0.12.6/0.8.6 обрался без проблем. Огромнейшее спасибо за статью, все получилось.
Огромнейшая просьба к автору статьи, как-то по возможности, статейку написать libtorrent DHT patch. Наподобии той, которая у Вас по Utorrent, включение PEX и DHT в приватных торрентах.
Спасибо.
августа 20, 2010 at 6:09
Все сделал, как описал автор, собралось все хорошо, но только беда – не работают эти доработки. скачал для теста фильмец с торрента – все осталось по прежнему, трафик весь учелся. что не так?
декабря 23, 2011 at 7:41
сделал как написано, но после перезагрузки скаченное вновь стало учитываться
быть может я “недоустановил”?
команда “./configure && make && make install” устанавливает, я правильно понял же? или после нее нужно еще что-то сделать?
mr.The: должно работать. Возможно, система автоматически скачала обновления, хотя врядли.
Попробуй удалить либторрент из менеджера пакетов, а потом поставь через make install.
марта 8, 2012 at 18:53
А можно сделать такой патч для rtorrentа?
мая 21, 2012 at 11:03
Для rtorrent можно аналогичным способом) разница лишь в том, что rtorrent использует другую библиотечку libtorrent не rasterbar, а rakshasa.