PDA

Просмотр полной версии : стуктура .torrent файлов


eLWAux
17.11.2008, 22:35
не знал куда запостить, поетому запостил сюда, так-как в будущем єсть идеи написать perl-анализатор..;)

подскажите, где найти инфо про структуру .torrent файла..
искал-не нашол, плохо искал)

astrologer
17.11.2008, 23:01
http://wiki.theory.org/BitTorrentSpecification

mr.The
17.11.2008, 23:09
astrologer +1
ТС - на русском можеш неискать. нету. читай что есть. структура имхо очень хитровые...ая. особенно вложеность параметров один в другой. а в остальном всё просто)

eLWAux
17.11.2008, 23:26
уже я немножко накатал:
system('cls');

opendir(TEMPDIR,$dir) or die("[-] Error ($!)..");
@FILES=grep(/\.torrent$/i, readdir TEMPDIR);
closedir(TEMPDIR);

for ($i=0;$i<@FILES;) {
$res='';
open(DESC, @FILES[$i]);
while (<DESC>) {$res.= $_;}
close(DESC);
$res =~ /:name\d{0,4}:(.*)12:piece/;
if (-s $1) {print '[+] ';} else {print '[-] ';}
print $1."\n";
$i++;
}
находит все *.torrent файли в текущей папке и видирает названия файлов и проверяет их существования..

eLWAux
18.11.2008, 00:09
уже нашол инфо про строки:
СТРОКИ
<длина строки>:<строка>. Пример: 5:xakep

и сделал ф-цию для чтения строк:
sub read_str
{
if ($_[0] =~ /:$_[1](\d{0,4}):/)
{return substr($_[0], index($_[0],$_[1])+length($_[1])+length($1)+1, $1)}
else {return '';}
}

пример:
print read_str($res,'announce');

может у кого-то єсть наброски кода?)

Kaimi
18.11.2008, 00:18
и сделал ф-цию для чтения строк

эээ? а чо она делает?

eLWAux
18.11.2008, 00:37
чтоб читать byte strings из торрента
byte strings

Byte strings are encoded as follows: <string length encoded in base ten ASCII>:<string data>
Note that there is no constant beginning delimiter, and no ending delimiter.

Example: 4:spam represents the string "spam"

astrologer
18.11.2008, 00:47
может у кого-то єсть наброски кода?) Их должно быть немало в сети. Для PHP что-то (http://sourceforge.net/projects/torrentflux/) есть.

eLWAux
18.11.2008, 00:52
torrentflux - єто не парсер походу..
4 МБ для парсера замного)
меня интересует только как достать данние..
только что понял что там супер заебистая система, параметри в параметрах под параметрами)..

gisTy
18.11.2008, 01:34
torrentflux - єто не парсер походу..
4 МБ для парсера замного)
меня интересует только как достать данние..
только что понял что там супер заебистая система, параметри в параметрах под параметрами)..
torrentflux - это не чистый парсер, это полноценный торрент-клиент.. но ему же как то надо парсить .torrent-файлы... собственно можешь выдернуть парсер оттуда и переделать его на перле

eLWAux
18.11.2008, 01:35
torrentflux - это не чистый парсер, это полноценный торрент-клиент.. но ему же как то надо парсить .torrent-файлы... собственно можешь выдернуть парсер оттуда и переделать его на перле
так и сделаю

Nek1t
19.11.2008, 20:12
Глянь исходник TBDev, там есть как раз функция для чтения структуры *.torrent
+ [DICT] [root] (24609)
- [STRING] [announce] (39): http://tracker/announce.php
- [STRING] [comment] (35): Торрент создан для 'Tracker'
- [STRING] [created by] (14): User1
- [INT] [creation date] (12): 1227102437
- [STRING] [encoding] (7): UTF-8
+ [DICT] [info] (24241)
- [INT] [length] (11): 315064055
- [STRING] [name] (32): Full Metal Panic! TSR OVA.mkv
- [STRING] [name.utf-8] (32): Full Metal Panic! TSR OVA.mkv
- [INT] [piece length] (8): 262144
- [STRING] [pieces] (24046): 0x5bc99ff0e0d2b901bc5942bbe33e09c915b8e899d5adf764 71...
- [INT] [private] (3): 1
- [STRING] [source] (40): [http://tracker] Tracker
- [STRING] [publisher] (14): User1
- [STRING] [publisher-url] (50): http://tracker/userdetails.php?id=4200
- [STRING] [publisher-url.utf-8] (50): http://tracker/userdetails.php?id=4200
- [STRING] [publisher.utf-8] (14): User1

cupper
09.10.2009, 12:04
UP

а когда торрент клиент отправляет запрос на сервер, там первое значение это SHA1 хеш сумма от значение info из метафайла .torrent. До какого поля длиться значения info ?
до
- [INT] [piece length] (8): 262144 ???
т.е. нужно подавать в SHA1 строку в бенкод формате, начиная cо следющего символа после обозначения поля info и до чего конкретно ?

И еще, это хешсумму нужно передвать непосредственно как hex значения или как строку всетаки ?