IPB

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

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


Новичок
*

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



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

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

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

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

Хеш ведь создаётся из всего файла в целом?
Перейти в начало страницы
 
+Цитировать сообщение
FreeM@N
сообщение 3.4.2010, 12:19
Сообщение #2


Активный участник
***

Группа: Админы
Сообщений: 660
Регистрация: 15.12.2008
Из: Москва
Пользователь №: 15



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


--------------------
Перейти в начало страницы
 
+Цитировать сообщение
Joneg
сообщение 3.4.2010, 15:36
Сообщение #3


Новичок
*

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



Желание есть. Впринципи возможет и такой вариант, особо даже переписывать ничего не придётся... А вообще крутились мысли ковыряния какого нибудь простого клиента с целью переписывания для подобных вещей.
Перейти в начало страницы
 
+Цитировать сообщение
Joneg
сообщение 7.4.2010, 19:09
Сообщение #4


Новичок
*

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



Подскажите пожалуйсто от чего зависит хеш файла.
Сейчас пытался провести эксперемент.

На одной машине есть оригинальный torrent файл на видео файл.

Закачал видеофайл на сервер.
Через createtorrent сделал на него torrent файл.
В качестве трекера прописал только ретрекер свой. Открываю mysql. Раздача появилась в таблице, однако хеш не совпадает с тем, который ожидает другой клиент.

По началу имя файлы было другим, переименовал в оригинальное, хеш снова изменился, но не совпадает с ожидаемым.

Тут видимо всё зависит напрямую от количества кусков файлов. Сейчас заметил что в 2 раза отличается. в одном торенте куски по 512 кб в другом по 256 кб.

Похоже вся идея накрывается медным тазом? Или я чтото недопонимаю?
Перейти в начало страницы
 
+Цитировать сообщение
FreeM@N
сообщение 8.4.2010, 11:43
Сообщение #5


Активный участник
***

Группа: Админы
Сообщений: 660
Регистрация: 15.12.2008
Из: Москва
Пользователь №: 15



Что-то не то видимо сделали. Хеш одного и того же файла должен быть одинаков, иначе затея с ретрекерами провалилась бы не начавшись.


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

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


Торент клиент сразу же подхватил раздачу и скачал файл.
Даже из-за зависимости общего хэша от кол-ва кусков идея уже зашла в тупик, но всё же интересно каким образом влияет имя файла то?
Перейти в начало страницы
 
+Цитировать сообщение
FreeM@N
сообщение 9.4.2010, 0:18
Сообщение #8


Активный участник
***

Группа: Админы
Сообщений: 660
Регистрация: 15.12.2008
Из: Москва
Пользователь №: 15



Извините что сбил вас с толку и не поправил - конечно же есть зависимость от имени и от размера кусков.
Под "одним и тем же файлом" я имел ввиду абсолютно один и тот же файл, включая и имя.

Вы чем торенты создаёте? Есть ли настройка для автоматического выставления размера куска - если есть то при её использовании думаю можно с большим шансом попасть на нужный хеш.
Однако всё меняет проблема с именами - т.к. у вас файлохранилище то имена скорее всего отличаются от тех, что висят на торентах...вобщем да, не ясно как это будет себя вести.
Можно попробовать поднять торент клиента на файловом сервере который будет раздавать только на локалку, но это уже на пляски с бубном похоже...


--------------------
Перейти в начало страницы
 
+Цитировать сообщение
Joneg
сообщение 9.4.2010, 10:29
Сообщение #9


Новичок
*

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



Имена файлов отличаются. Юзеры любят их переименоввывать.
А поднятие торрент клиента на сервере это я собственно и планировал сделать, а для этого клиента, скрипт по средством createtorrent создавал бы torrent файлы.
Но вероятность совпадения хэшей при таком количестве зависимостей ничтожно мала.
Перейти в начало страницы
 
+Цитировать сообщение

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

 



RSS Текстовая версия службы мониторинга серверов Сейчас: 25.7.2017, 5:33
Rambler's Top100