Торрент клиент, Необычна задача для торент клиента |
Здравствуйте, гость ( Вход | Регистрация )
Торрент клиент, Необычна задача для торент клиента |
2.4.2010, 21:45
Сообщение
#1
|
|
Новичок Группа: Пользователи Сообщений: 8 Регистрация: 2.4.2010 Пользователь №: 4 985 |
Доброго времени суток.
Вопрос как бы несовсем в раздел. Но связан с ретрекером. На основе распространённого скрипта в интернете сделал ретрекер. Юзеры будут друг друга находить. Так же в сети есть файловый сервер, обменник. Народ качает одно и тоже. Некоторые люди выкладывают скачаное на этот сервер. Однако остальные продолжают качать из инета. На файловом сервере уже естественно остаются только файлы. Никаких .torrent файлов нет. Существует ли вообще такой клиент, который сможет просканировать папку\папки и понаделать запросов на ретрекер, что у него есть файлы с такими то хешами и он может их раздавать? Даже не знаю, что толком в поисковике то написать по этому вопросу. В теории протокола причин, почему это невозможно, не увидел. Хеш ведь создаётся из всего файла в целом? |
|
|
3.4.2010, 12:19
Сообщение
#2
|
|
Активный участник Группа: Главные Админы Сообщений: 661 Регистрация: 15.12.2008 Из: Москва Пользователь №: 15 |
Да, хеш создаётся из файла, но я таких программ не встречал.
Но думаю не сложно сделать скрипт который пройдётся по всем файлам и для каждого сделает .torrent файл и положит его рядом...было бы желание. -------------------- |
|
|
3.4.2010, 15:36
Сообщение
#3
|
|
Новичок Группа: Пользователи Сообщений: 8 Регистрация: 2.4.2010 Пользователь №: 4 985 |
Желание есть. Впринципи возможет и такой вариант, особо даже переписывать ничего не придётся... А вообще крутились мысли ковыряния какого нибудь простого клиента с целью переписывания для подобных вещей.
|
|
|
7.4.2010, 19:09
Сообщение
#4
|
|
Новичок Группа: Пользователи Сообщений: 8 Регистрация: 2.4.2010 Пользователь №: 4 985 |
Подскажите пожалуйсто от чего зависит хеш файла.
Сейчас пытался провести эксперемент. На одной машине есть оригинальный torrent файл на видео файл. Закачал видеофайл на сервер. Через createtorrent сделал на него torrent файл. В качестве трекера прописал только ретрекер свой. Открываю mysql. Раздача появилась в таблице, однако хеш не совпадает с тем, который ожидает другой клиент. По началу имя файлы было другим, переименовал в оригинальное, хеш снова изменился, но не совпадает с ожидаемым. Тут видимо всё зависит напрямую от количества кусков файлов. Сейчас заметил что в 2 раза отличается. в одном торенте куски по 512 кб в другом по 256 кб. Похоже вся идея накрывается медным тазом? Или я чтото недопонимаю? |
|
|
8.4.2010, 11:43
Сообщение
#5
|
|
Активный участник Группа: Главные Админы Сообщений: 661 Регистрация: 15.12.2008 Из: Москва Пользователь №: 15 |
Что-то не то видимо сделали. Хеш одного и того же файла должен быть одинаков, иначе затея с ретрекерами провалилась бы не начавшись.
-------------------- |
|
|
8.4.2010, 12:26
Сообщение
#6
|
|
Новичок Группа: Пользователи Сообщений: 8 Регистрация: 2.4.2010 Пользователь №: 4 985 |
ТЕ по вашему даже от имени файла его хэш не будет изменятся?
Почитал в интернете, получается в торрент файл пишут не общий хэш всего файла, а хэши кусков. А то что отображается в клиенте и в трекере это некий хэш хэшей. Но опять же не видно связи с именем файла, а она есть! Думаю лучше всего посмотреть алгоритм в исходнике одной из прогорамм для создания torrent файлов, например createtorrent-1.1.4 Процесс создания torrent файла для дирриктории рассматривать не будем. В общем при работе с одним файлом обращение идёт сразу в int create_from_file( const char* src, FILE* f, long long fsize, int piecelen ) Код src - путь до исходного файла, который добавляет fsize - соотв размер файла piecelen - !!!размер одного куска!!! int create_from_file( const char* src, FILE* f, long long fsize, int piecelen ) { char* sha; char* buf; int r, shalen; FILE* fs = fopen( src, "rb" ); // "length", "name", "piece length", "pieces" fprintf( f, "6:lengthi%llde", fsize ); write_name( src, f ); fprintf( f, "12:piece lengthi%de", piecelen ); shalen = fsize / piecelen; if( fsize % piecelen ) shalen++; fprintf( f, "6:pieces%d:", shalen * 20 ); if( fs ) { sha = (char*) malloc( sizeof(char) * SHA_DIGEST_LENGTH ); buf = (char*) malloc( piecelen ); printf( "computing sha1... " ); fflush( stdout ); while( ( r = fread( buf, 1, piecelen, fs ) ) ) //читаем из исходного файла один кусок { SHA1( buf, r, sha ); //счтиаем его хэш (куска) fwrite( sha, 1, 20, f ); //пишем его в свежесозданный torrent файл } free( buf ); free( sha ); fclose( fs ); printf( "done\n" ); } else { fprintf( stderr, "could not open file %s\n", src ); return 1; } return 0; } Больше никаких подсчётов хэшей, связанных с созданием torrent файла для одного программа не производит. Непонятно почему у меня хэш изменляся при изменении имени файла. Сейчас попробую указать размер куска как в оригинальном торрент файле. |
|
|
8.4.2010, 13:38
Сообщение
#7
|
|
Новичок Группа: Пользователи Сообщений: 8 Регистрация: 2.4.2010 Пользователь №: 4 985 |
Информация об оригинальном торрент файле
Появления этого файла на месном ретрекере сейчас ждёт торрент клиен с домашнего компа Код root@news10:/share# btinfo original.torrent Name: ProzektorPH_59_SATRip_[tfile.ru].avi Info hash: effe122c54b59f6fe2e9d17a5ec1a67585dd0386 Tracker URLs: [ [ udp://tracker.tfile.me/ ] [ http://tracker.tfile.me/announce.php?ak=114df373a3& ] [ http://retracker.local/announce ] [ http://retracker.home/announce ] [ udp://tracker.publicbt.com:80/announce ] [ udp://tracker.openbittorrent.com:80/announce ] [ http://tracker.publicbt.com:80/announce ] [ http://tracker.openbittorrent.com:80/announce ] ] Number of pieces: 789 Piece size: 524288 Total size: 413558784 Number of files: 1 Files: ProzektorPH_59_SATRip_[tfile.ru].avi (413558784) Созданный торрент файл с размером куска 256 кбайт и НЕ оригинальным именем файла Код root@news10:/share# btinfo test256.torrent Name: test.avi Info hash: d62297be64f55d68cab1d2b6931d53b00a503518 Tracker URLs: [ [ http://192.168.225.200:80/announce ] ] Number of pieces: 1578 Piece size: 262144 Total size: 413558784 Number of files: 1 Files: test.avi (413558784) Созданный торрент файл с размером куска 512 кбайт и НЕ оригинальным именем файла Хэш всё равно не совпадает! Код root@news10:/share# btinfo test512.torrent Name: test.avi Info hash: b1582887d27acb1f54ec0c8c54653f18ef32438e Tracker URLs: [ [ http://192.168.225.200:80/announce ] ] Number of pieces: 789 Piece size: 524288 Total size: 413558784 Number of files: 1 Files: test.avi (413558784) Созданный торрент файл с размером куска 256 кбайт и оригинальным именем файла Код root@news10:/share# btinfo test_orig_name256.torrent Name: ProzektorPH_59_SATRip_[tfile.ru].avi Info hash: ca0db3b77ed6b9ab4450824e02e5b7e77fe372f0 Tracker URLs: [ [ http://192.168.225.200:80/announce ] ] Number of pieces: 1578 Piece size: 262144 Total size: 413558784 Number of files: 1 Files: ProzektorPH_59_SATRip_[tfile.ru].avi (413558784) Созданный торрент файл с размером куска 512 кбайт и оригинальным именем файла Хэш совпал Код root@news10:/share# btinfo test_orig_name512.torrent Name: ProzektorPH_59_SATRip_[tfile.ru].avi Info hash: effe122c54b59f6fe2e9d17a5ec1a67585dd0386 Tracker URLs: [ [ http://192.168.225.200:80/announce ] ] Number of pieces: 789 Piece size: 524288 Total size: 413558784 Number of files: 1 Files: ProzektorPH_59_SATRip_[tfile.ru].avi (413558784) Торент клиент сразу же подхватил раздачу и скачал файл. Даже из-за зависимости общего хэша от кол-ва кусков идея уже зашла в тупик, но всё же интересно каким образом влияет имя файла то? |
|
|
9.4.2010, 0:18
Сообщение
#8
|
|
Активный участник Группа: Главные Админы Сообщений: 661 Регистрация: 15.12.2008 Из: Москва Пользователь №: 15 |
Извините что сбил вас с толку и не поправил - конечно же есть зависимость от имени и от размера кусков.
Под "одним и тем же файлом" я имел ввиду абсолютно один и тот же файл, включая и имя. Вы чем торенты создаёте? Есть ли настройка для автоматического выставления размера куска - если есть то при её использовании думаю можно с большим шансом попасть на нужный хеш. Однако всё меняет проблема с именами - т.к. у вас файлохранилище то имена скорее всего отличаются от тех, что висят на торентах...вобщем да, не ясно как это будет себя вести. Можно попробовать поднять торент клиента на файловом сервере который будет раздавать только на локалку, но это уже на пляски с бубном похоже... -------------------- |
|
|
9.4.2010, 10:29
Сообщение
#9
|
|
Новичок Группа: Пользователи Сообщений: 8 Регистрация: 2.4.2010 Пользователь №: 4 985 |
Имена файлов отличаются. Юзеры любят их переименоввывать.
А поднятие торрент клиента на сервере это я собственно и планировал сделать, а для этого клиента, скрипт по средством createtorrent создавал бы torrent файлы. Но вероятность совпадения хэшей при таком количестве зависимостей ничтожно мала. |
|
|
Текстовая версия | Сейчас: 14.12.2024, 10:45 |