IPB

Здравствуйте, гость ( Вход | Регистрация )

Торрент клиент, Необычна задача для торент клиента
Joneg
сообщение 2.4.2010, 21:45
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 8
Регистрация: 2.4.2010
Пользователь №: 4 985



Доброго времени суток.
Вопрос как бы несовсем в раздел. Но связан с ретрекером.

На основе распространённого скрипта в интернете сделал ретрекер. Юзеры будут друг друга находить.
Так же в сети есть файловый сервер, обменник. Народ качает одно и тоже. Некоторые люди выкладывают скачаное на этот сервер. Однако остальные продолжают качать из инета. На файловом сервере уже естественно остаются только файлы. Никаких .torrent файлов нет.

Существует ли вообще такой клиент, который сможет просканировать папку\папки и понаделать запросов на ретрекер, что у него есть файлы с такими то хешами и он может их раздавать?

Даже не знаю, что толком в поисковике то написать по этому вопросу. В теории протокола причин, почему это невозможно, не увидел.

Хеш ведь создаётся из всего файла в целом?
Перейти в начало страницы
 
+Цитировать сообщение
 
Начать новую тему
Ответов
Joneg
сообщение 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 файла для одного программа не производит.

Непонятно почему у меня хэш изменляся при изменении имени файла. Сейчас попробую указать размер куска как в оригинальном торрент файле.
Перейти в начало страницы
 
+Цитировать сообщение

Сообщений в этой теме


Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 28.4.2024, 1:31
Top.Mail.Ru