Торрент клиент, Необычна задача для торент клиента |
Здравствуйте, гость ( Вход | Регистрация )
Торрент клиент, Необычна задача для торент клиента |
2.4.2010, 21:45
Сообщение
#1
|
|
Новичок Группа: Пользователи Сообщений: 8 Регистрация: 2.4.2010 Пользователь №: 4 985 |
Доброго времени суток.
Вопрос как бы несовсем в раздел. Но связан с ретрекером. На основе распространённого скрипта в интернете сделал ретрекер. Юзеры будут друг друга находить. Так же в сети есть файловый сервер, обменник. Народ качает одно и тоже. Некоторые люди выкладывают скачаное на этот сервер. Однако остальные продолжают качать из инета. На файловом сервере уже естественно остаются только файлы. Никаких .torrent файлов нет. Существует ли вообще такой клиент, который сможет просканировать папку\папки и понаделать запросов на ретрекер, что у него есть файлы с такими то хешами и он может их раздавать? Даже не знаю, что толком в поисковике то написать по этому вопросу. В теории протокола причин, почему это невозможно, не увидел. Хеш ведь создаётся из всего файла в целом? |
|
|
8.4.2010, 12:26
Сообщение
#2
|
|
Новичок Группа: Пользователи Сообщений: 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 файла для одного программа не производит. Непонятно почему у меня хэш изменляся при изменении имени файла. Сейчас попробую указать размер куска как в оригинальном торрент файле. |
|
|
Текстовая версия | Сейчас: 21.9.2024, 11:17 |