Возвращаемся на раздачу или как сделать невозможное
Время на прочтение
14 мин
Количество просмотров 70K
Предыстория
Не так давно, а именно 5 июня хабрачеловек по имени alan008 задал вопрос. Чтобы не заставлять ходить за подробностями, приведу его здесь:
Нужна помощь!
За несколько лет с разных трекеров (преимущественно c rutracker’а) разными клиентами (преимущественно uTorrent’ом) скачано много гигабайт разного полезного контента. Скачанные файлы впоследствии вручную перемещались с одного диска на другой, uTorrent их соответственно не видит. Многие .torrent файлы устарели сами по себе (например, велась раздача сериала путем добавления новых серий заменой .torrent файла).
Теперь сам вопрос: есть ли способ автоматически (не вручную) установить соответствие между имеющимися на компьютере .torrent файлами и содержимым, раскиданным по разным логическим дискам компьютера? Цель: удалить лишние (неактуальные) .torrent файлы, а для актуальных — поставить всё на раздачу. У кого какие идеи? 🙂
При необходимости (если это требуется) можно снова поместить все файлы данных в один каталог на одном логическом диске.
В обсуждениях сошлись на том, что если это и можно сделать, то только ручками. Мне же этот вопрос показался интересным, и после возвращения из отпуска я нашел время, чтобы в нем разобраться.
Потратив в общей сложности неделю на разбор формата .torrent-файла, поиск нормально работающей библиотеки для его парсинга, я приступил к написанию программы, которая позволит решить проблему затронутую в упомянутом вопросе.
Прежде чем начать, стоит отметить несколько моментов:
- Получилось много, но не все.
- По формату файла .torrent будут даны лишь необходимые пояснения.
- Людей, чувствительных к временами некачественному коду, прошу меня заранее простить — я знаю, что многое можно было написать лучше, оптимальнее и безглючнее.
Для тех, кому интересно, что из этого получилось, технические подробности и подводные камни — прошу под кат.
В данном случае имеется отличный способ решения — перекачать заново. Но мы же не ищем легких путей, да и предлагался такой вариант! Итак, будем решать задачу по сложному — не скачивать.
Приступая к написанию любой программы, необходимо сначала продумать хотябы базовый алгоритм ее работы. В нашем случае алгоритм, по сути, состоит из двух шагов:
- Найти и прочитать все .torrent-файлы;
- Найти в куче файлов тот, который соответствует описанному в .torrent, и переместить его в папку, соответствующую пути в .torrent.
Для реализации своей идеи, я использовал C#, однако для этого подойдет любой язык, на котором есть библиотеки для чтения файлов в формате bencode и реализована возможность считать SHA-1 хеш.
Ну что же, приступим к решению поставленной задачи.
Ищем торренты и читаем их
После того, как я разобрался с устройством .torrent-файлов, передо мной встал вопрос парсинга всего этого чуда. Прошерстив интернет по данному вопросу, я обнаружил несколько .NET-библиотек под это дело. Выбор свой я остановил на, более-менее понятной и работающей из коробки библиотеке BencodeLibrary, однако впоследствии пришлось ее немного дополнить под свои нужды, но об этом позже.
Начнем с самого простого момента — чтения .torrent.
Строение .torrent-файла довольно простое — он представляет из себя словарь в формате bencode. В данном словаре нас интересует только пара с ключом info — блок описания файлов. Этот тоже является словарем и содержит в себе информацию об имени файлов, их размере. Кроме того, как многим известно, торрент хеширует файлы не целиком, а по кускам определенной длины, которая зависит от размера этих файлов. Информация о размере этого куска также содержится в словаре info.
Для хранения информации из прочитанного файла будем использовать такой класс Torrent
:
class Torrent
public class Torrent
{
public Torrent(string name, List<LostFile> files, int pieceLength, char[] hash, string fileName)
{
Name = name;
Files = files;
PieceLength = pieceLength;
Hash = hash;
FileName= fileName;
}
public string Name;
public int PieceLength;
public char[] Hash;
public List<LostFile> Files;
public string FileName;
...
}
Здесь поля хранят следующую информацию:
* Name
— имя торрента (вообще говоря — имя папки или имя файла)
* Files
— список файлов, которые нам надо будет в дальнейшем искать
* PieceLength
— размер тех самых кусочков, хеш которых нам предстоит считать
* Hash
— хеш строка всех файлов
* FileName
— имя .torrent-файла на диске
Теперь стоит заострить внимание на строке хеша. Она составляется очень просто. Все файлы склеиваются в один (виртуально конечно) друг за другом, образуя при этом один БОЛЬШОООООООЙ воображаемый файл. В этом воображаемом файле берем кусок длины PieceLength
, считаем SHA1 хеш, кладем хеш в строку, берем следующий кусок, считаем хеш, дописываем к концу строки с хешем предыдущего куска. Т. е. это обычная конкатенация хешей всех кусков.
Как мог заметить внимательный читатель, файл внутри класса — это не просто файл, а особый тип данных, в котором файл описывается некой конструкцией типа LostFile
. Вот она:
class LostFile
public class LostFile
{
public LostFile(string name, long length, long beginFrom)
{
Name = name;
Length = length;
BeginFrom = beginFrom;
}
public string Name;
public long Length;
public long BeginFrom;
. . .
}
Здесь все просто: имя файла и его размер. Кроме того этот класс содержит еще одно поле — BeginFrom
. Оно описывает начало этого файла в том БОЛЛЬШОООООМ воображаемом файле. Он нужен, чтобы взять правильную часть файла для подсчета хеша — ведь длина файла очень редко кратна длине куска.
Подготовив структуры для хранения необходимой информации, можно приступать к их заполнению.
С помощью найденной на просторах интернета библиотеки BencodeLibrary мы читаем наш .torrent-файл и выкорчевываем из него блок info:
List<LostFile> files = new List<LostFile>(); // список файлов, понадобится позднее
BDict torrent = (BDict)BencodingUtils.DecodeFile(filename, Encoding.UTF8);
BDict fileInfo = (BDict)torrent["info"];
Далее из этого блока необходимо забрать данные об имени торрента, размере куска.
string name = ((BString)fileInfo["name"]).Value;
int pieceLength = (int)((BInt)fileInfo["piece length"]).Value;
С чтением хеша возникла проблема, решение которой мне не очень нравится, но оно работает. Дело в том, что по спецификации все строки в .torrent-файле должны быть в UFT8. Если читать хеш, который по спецификации записан в формате bencode-строки, как UTF8-строку, то возникнет проблема сравнения — хеши одинаковых кусков не совпадут. Читая же торрент в предлагаемой кодировке codepage-437, мы получим проблемы с русскими буквами в путях. Выход из такой ситуации, которая меня тормознула на два дня, я нашел не лучший, но работающий — читать два раза в разных кодировках.
torrent = (BDict)BencodingUtils.DecodeFile(filename, Encoding.GetEncoding(437));
char[] pieces = ((BString)((BDict)torrent["info"])["pieces"]).Value.ToCharArray();
В этом месте мы передаем в метод `BencodingUtils.DecodeFile` вторым параметром информацию о кодировке. Это как раз тот момент, когда пришлось добавлять один метод в библиотеку — изначально codepage-437 была вшита в код.
Мы добрались до самого интересного момента в этой части — чтение информации о файлах. Торрент файлы бывают двух типов. Эти типы различаются тем, сколько файлов в них описано. При описании только одного файла в .torrent пишется его имя и размер.
Сначала разберем .torrent с описанием одного файла.
long Length = ((BInt)fileInfo["length"]).Value;
files.Add(new LostFile(name, Length, 0)); // files - список файлов
Тут все просто — имя торрента совпадает с именем файла. В случае, когда файлов в раздаче много, то в поле name пишется имя папки, в которую их надо положить (на самом деле может быть что угодно, но почему-то все пишут имя папки в которой эти файлы лежали при создании). Кроме того появляется список files в котором содержится информация о каждом файле: путь к нему и размер. Если размер — просто целое число, то путь к файлу представляет собой список из строк (имен директорий), пройдя по которым мы увидим этот файл.
Такое лучше пояснять на примере. Для файлов level_1level_2_1file_1.txt
и level_1level_2_2file_2.txt
, если мы захотим их раздавать, поле name будет содержать имя папки верхнего уровня ("level_1"
), а список path для одного из файлов будет следующего вида: {"level_2_1", "file_1.txt"}
и {"level_2_2", "file_2.txt"}
для другого.
Нам для .torrent с несколькими файлами надо путь до каждого файла собрать в одну строку. Кроме того, надо хранить начало каждого файла в том БОЛЬШООООМ (не забыли, правда же?!):
BList filesData = (BList)fileInfo["files"];
long begin = 0;
foreach (BDict file in filesData)
{
BList filePaths = (BList)file["path"];
long length = ((BInt)file["length"]).Value;
string fullPath = name;
foreach (BString partOfPath in filePaths)
{
fullPath += @"" + partOfPath.Value;
}
files.Add(new LostFile(fullPath, length, begin)); // files - список файлов
begin += length;
}
Очень важно отметить, что порядок следования файлов в БОЛЬШОООООМ файле может быть любым, не обязательно по алфавиту или по размеру. Но порядок файлов в списке files будет точно таким же. Это ключевой момент для понимания принципа хеширования. Для примера, в ситуации, изображенной на первом рисунке, список файлов будет следующим: {"file_3","file_1", ..., "file_2"}
. Таким образом, считая хеш одного файла, мы знаем какой файл надо будет брать следующим.
Когда мы все это дело прочитали и посчитали — давайте создадим и вернем экземпляр Torrent
:
new Torrent(name, files, pieceLength, pieces, filename);
Собирая теперь все чтение и разбор .torrent-файла воедино, получаем:
ReadTorrent
static Torrent ReadTorrent(string filename)
{
List<LostFile> files = new List<LostFile>();
BDict torrent = (BDict)BencodingUtils.DecodeFile(filename);
BDict fileInfo = (BDict)torrent["info"];
string name = ((BString)fileInfo["name"]).Value;
int pieceLength = (int)((BInt)fileInfo["piece length"]).Value;
torrent = (BDict)BencodingUtils.DecodeFile(filename, Encoding.GetEncoding(437));
char[] pieces = ((BString)((BDict)torrent["info"])["pieces"]).Value.ToCharArray();
if (fileInfo.ContainsKey("files")) // Multifile torrent
{
BList filesData = (BList)fileInfo["files"];
long begin = 0;
foreach (BDict file in filesData)
{
BList filePaths = (BList)file["path"];
long length = ((BInt)file["length"]).Value;
string fullPath = name;
foreach (BString partOfPath in filePaths)
{
fullPath += @"" + partOfPath.Value;
}
files.Add(new LostFile(fullPath, length, begin));
begin += length;
}
}
else // Singlefile torrent
{
long Length = ((BInt)fileInfo["length"]).Value;
files.Add(new LostFile(name, Length, 1));
}
return new Torrent(name, files, pieceLength, pieces, filename);
}
Теперь, когда у нас есть все необходимые данные, мы готовы к самому интересному — поиску наших файлов.
Ищем файлы
Мы вплотную подошли к реализации второго шага нашего алгоритма. Для этого будем использовать метод FindFiles
такого вида:
void FindFiles(Torrent torrent, List<FileInfo> files, string destinationPath) {}
Здесь files
— список файлов, среди которых мы будем искать, destinationPath
— путь до папки назначения, в которую будут помещаться найденные файлы.
Для каждого файла в .torrent мы будем перебирать все файлы из кучи и их сверять. Так как проверка хеша довольно затратна, то надо сначала отсеять явно левые файлы. Ну посудите сами: если я качал дискографию в .mp3 и переместил ее, то явно не менял расширения файлов. Имя мог поменять, а вот расширение вряд ли.
FileInfo fileOnDisk = files[j];
if (fileOnDisk.Extension != Path.GetExtension(fileInTorrent.Name))
continue;
Также стоит проверять длину файла, но это уже сомнительно и иногда может давать ложные срабатывания. Только после того, как мы отсеяли по расширению явно левые файлы, можно приступать к проверке хеша.
if (!torrent.CheckHash(i, fileOnDisk))
continue;
После того как проверка завершена, и мы удостоверились в соответствии файла искомому — перемещаем его в папку назначения с правильным путем. Перед перемещением будем естественно проверять наличие директории, а также проверим есть ли уже такой файл или нет. copyFile
— переменная передаваемая с формы пользователем, ее назначение, я думаю, понятно всем.
FileInfo fileToMove = new FileInfo(destinationPath + @"" + fileInTorrent.Name);
if (!Directory.Exists(fileToMove.DirectoryName))
Directory.CreateDirectory(fileToMove.DirectoryName);
if (!fileToMove.Exists)
{
// Перемещаем-копируем файл
if (copyFile)
File.Copy(fileOnDisk.FullName, fileToMove.FullName);
else
File.Move(fileOnDisk.FullName, fileToMove.FullName);
// Убираем из списка рассматириваемых
files.Remove(fileOnDisk);
// Убираем из описания торрента
torrent.Files.RemoveAt(i--);
break; //Больше искать файл в дереве не надо, можно переходить к следующему в torrent
}
Есть в коде выше три важных для пояснения момента. Начну с двух последних — вот эти строки:
files.Remove(fileOnDisk);
torrent.Files.RemoveAt(i--);
Я посчитал вполне логичным убирать уже отсортированные файлы из рассмотрения, что позволит несколько сократить время выполнения поиска. Во второй строке есть конструкция .RemoveAt(i--);
так как из коллекции убирается текущий элемент, то указатель надо сдвинуть назад, чтобы на следующей итерации цикла брался следующий элемент, а не через один.
Теперь про первый момент. Я знаю про наличие foreach
для списка, но его при использовании нельзя модифицировать этот спикок, то есть мы не сможем удалять уже ненужные более элементы. Итак, собирая все выше описанное в один метод, имеем:
ReadTorrent
public static void FindFiles(Torrent torrent, List<FileInfo> files, string destinationPath, bool copyFile)
{
for (int i = 0; i < torrent.Files.Count; i++)// (LostFile fileInTorrent in torrent.Files)
{
LostFile fileInTorrent = torrent.Files[i];
for (int j = 0; j < files.Count; j++)
{
FileInfo fileOnDisk = files[j];
// Ищем файл с таким же разширением
if (fileOnDisk.Extension != Path.GetExtension(fileInTorrent.Name))
continue;
// Проверяем размер
if (fileOnDisk.Length != fileInTorrent.Length)
continue;
// Проверяем хэш
if (!torrent.CheckHash(i, fileOnDisk))
continue;
// Все проверки пройдены. перед нами искомый файл
// Перемещаем его
FileInfo fileToMove = new FileInfo(destinationPath + @"" + fileInTorrent.Name);
if (!Directory.Exists(fileToMove.DirectoryName))
Directory.CreateDirectory(fileToMove.DirectoryName);
if (!fileToMove.Exists)
{
if (copyFile)
File.Copy(fileOnDisk.FullName, fileToMove.FullName);
else
File.Move(fileOnDisk.FullName, fileToMove.FullName);
// И убираем из списка рассматириваемых
files.Remove(fileOnDisk);
// Убираем из описания торрента
torrent.Files.RemoveAt(i--);
break;
}
}
}
}
Ну вот! Самое вкусное.
Проверка хеша
Как видно из кода выше, для проверки хеша мы передаем имя файла на диске и номер файла в списке файлов торрента. Это надо для того, чтобы не запускать поиск в списке файлов, а сразу взять его по номеру, раз он известен (еще одно “+1” циклу for
).
public class Torrent
{
public string Name;
public int PieceLength;
public char[] Hash;
public List<LostFile> Files;
public string FileName;
public bool CheckHash(int index, FileInfo fileOnDisk) {}
}
Теперь приступим к реализации нашего метода проверки хеша. На данном этапе мы знаем номер в списке файлов торрента и путь до файла на диске
LostFile checkingFile = this.Files[index];
if (checkingFile.Length < this.PieceLength * 2 - 1)
return false;
В принципе, мы можем считать хеш любого файла, но давайте немного упростим себе задачу. Мы будем браться только за файлы, длина которых больше или равна PieceLength * 2 - 1
. Такое ограничение даст нам возможность вычленить хотя бы один кусок для проверки, полность находящийся в файле. У такого подхода есть несколько существенных плюсов:
- Нет необходимости дополнительно искать на диске соседние файлы;
- Длина куска для хеширования очень редко превышает 2-4 МБ, что дает нам еще один плюс — с точки зрения производительности и времени, докачать такие файлы намного проще, чем искать их на диске.
На этом этапе мы подошли к самому сложному из всего, что нам надо было сделать — поиску нужного куска для проверки. Давайте немного отдалимся от программирования и обратимся к математике, сформулировав вспомогательную задачку.
Когда торрент-клиент проводит хеширование файлов, он считает хеш по порядку, однако бывает так, что нет одного или нескольких файлов. Тогда торрент-клиенту надо знать какой следующий кусок брать и откуда он будет начинаться в следующем имеющемся файле. Для вычисления двух этих цифр будем использовать следующий код, в котором переменная firstChunkNumber
содержит номер первого куска, который полностью содержится в данном файле, а bytesOverhead
— количество байт от начала файла до начала этого куска. Для лучшего понимания этого момента взгляните на поясняющий рисунок после кода.
long start = 0;
long firstChunkNumber = 0;
long bytesOveload = checkingFile.BeginFrom % this.PieceLength;
if (bytesOveload == 0) // Если кусок начинается с первого байта файла
{
start = checkingFile.BeginFrom;
firstChunkNumber = checkingFile.BeginFrom / this.PieceLength;
}
else
{
firstChunkNumber = checkingFile.BeginFrom / this.PieceLength + 1;
start = firstChunkNumber * this.PieceLength - checkingFile.BeginFrom;
}
Ответить на вопрос «Почему номер куска разный для случая, когда его начало совпадает с началом файла, и для случая, когда кусок лежит внутри?» предлагается самостоятельно.
Сейчас, зная номер куска мы должны взять его хеш из торрента с помощью такой конструкции:
char[] hashInTorrent = new char[20]; // 20 - длина хеша SHA1 в байтах
Array.Copy(this.Hash, firstChunkNumber * 20, hashInTorrent, 0, 20);
После этого, надо прочитать кусок из файла и посчитать его хеш:
char[] fileHash = new char[this.PieceLength];
using (BinaryReader fs = new BinaryReader(new FileStream(fileOnDisk.FullName, FileMode.Open)))
{
using (SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider())
{
byte[] piece = new byte[this.PieceLength];
fs.BaseStream.Position = start;
fs.Read(piece, 0, this.PieceLength);
fileHash = Encoding.GetEncoding(437).GetString(sha1.ComputeHash(piece)).ToCharArray();
}
}
Ну и самое важное — его проверить. У меня, почему-то не захотел работать ни один из методов Equals()
, которые я смог найти, поэтому проверяем так:
for (int i = 0; i < fileHash.Length; i++)
{
if (fileHash[i] != hashInTorrent[i])
return false;
}
Собирая воедино сие творение возбужденного мозга, получим метод следующего содержания:
CheckHash
public bool CheckHash(int index, FileInfo fileOnDisk)
{
LostFile checkingFile = this.Files[index];
if (checkingFile.Length < this.PieceLength * 2 - 1)
return false;
long start = 0;
long firstChunkNumber = 0;
long bytesOveload = checkingFile.BeginFrom % this.PieceLength;
if (bytesOveload == 0)
{
start = checkingFile.BeginFrom;
firstChunkNumber = checkingFile.BeginFrom / this.PieceLength;
}
else
{
firstChunkNumber = checkingFile.BeginFrom / this.PieceLength + 1;
start = firstChunkNumber * this.PieceLength - checkingFile.BeginFrom;
}
char[] hashInTorrent = new char[20];
Array.Copy(this.Hash, firstChunkNumber * 20, hashInTorrent, 0, 20);
char[] fileHash = new char[this.PieceLength];
using (BinaryReader fs = new BinaryReader(new FileStream(fileOnDisk.FullName, FileMode.Open)))
{
using (SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider())
{
byte[] piece = new byte[this.PieceLength];
fs.BaseStream.Position = start;
fs.Read(piece, 0, this.PieceLength);
fileHash = Encoding.GetEncoding(437).GetString(sha1.ComputeHash(piece)).ToCharArray();
}
}
for (int i = 0; i < fileHash.Length; i++)
if (fileHash[i] != hashInTorrent[i])
return false;
return true;
}
На этой прекрасной ноте, рассказ о методах и алгоритмах заканчивается, и мы переходим к рассказу о реализации в реальной жизни данного творения. Вполне понятно, что данная задача мной решалась не для того, чтобы решить, а для того, чтобы реализовать. Поэтому привожу на суд общественности мое творение, которое реализует все то, о чем написано выше.
Программа
Программа написана, как уже упоминалось на C#. При работе не сильно прихотлива, требует только .NET 2.0. Есть однако одно ограничение на использование: торрент файлы и коллекцию лучше убрать из корня логического диска. Причина этого ограничения — использование при сканировании директорий параметра `SearchOption.AllDirectories`, что приводит к вылету при попытке прочитать закрытые директории типа корзины или `System Volume Information` (если знающие люди подскажут как это обойти, то буду весьма признателен). Для папки назначения особых ограничений естественно нет, главное чтобы влезло, и можно было в нее писать, иначе вылетит с ошибкой (не моделировал, но логично).
В процессе работы, после окончания обработки очередного файла, выводится результат — имя .torrent-файла на диске и количество обработанных файлов.
Чтобы запустить сканирование, необходимо выбрать три директории (с файлами .torrent, с файлами для сортировки и папку для отсортированного), по желанию указать две опции и запустить сканирование.
По поводу производительности. Она пока что низкая: обработка 10 больших torrent-файлов заняла около 5 минут.
Так как работает приложение в один поток, то во время выполнения интерфейс подвисает, но я над этим работаю. Также хочу напомнить, что файлы малого размера (меньше 2-х мегабайт) не будут перемещены по причине отсутствия возможности проверки хеша. Вполне вероятны ложные срабатывания из-за того, что проверяется только один кусок под номером firstChunkNumber
. Пока что проверять все куски слишком затратно, но в планах есть.
Не ищите торренты рекурсивно, если они собраны в корне диска.
Копирование может занять много времени, поэтому интерфейс может подвиснуть — не пугайтесь.
Так как писалась эта программа 4fun, то качество кода там немного не то, которое хотелось бы, но у меня оно работает. Данная программа не тестировалась, исправлялись только очевидные ошибки, поэтому могут быть, да что скрывать-то, есть скрытые баги. ИСПОЛЬЗУЯ ДАННУЮ ПРОГРАММУ, ВЫ ИСПОЛЬЗУЕТЕ ЕЕ НА СВОЙ СТРАХ И РИСК.
Взять исходники можно на github. Распространяется по GPLv2. Там есть архив с исполняемым файлом. Для работы требуется библиотека Bencode Library, но не оригинальная, а модифицированная мною (есть у меня в репозитарии, подключена субмодулем).
Спасибо всем, кто проявил терпение и дочитал эту статью до конца. Рад услышать ваши вопросы, приветствуется всевозможная помощь в совершенствовании алгоритма и, в особенности, кода.
Источники: BitTorrentSpecification.
UPD1. По результатам обсуждения мне стало понятно, что правильней будет не ломать существующие коллекции выдергиванием файлов на раздачу, а наоборот — создавать хардлинки в нужном для раздачи месте на файлы внутри упорядоченных коллекций (фильмо и дискографий, например). В дальнейшем программа будет работать именно так.
UPD2. Если у тех, кто пользовался этой утилитой, есть еще какие-то пожелания по функционалу или баг репорты, то прошу оставлять их на github в issue-трекере.
Содержание
- 1 Как пользоваться Поиском?
- 1.1 Опции поиска по Трекеру
- 1.2 Опции поиска по Форуму
- 2 Поиск в разделах и подразделах
- 2.1 Поиск по одному разделу
- 2.2 Поиск по всем подразделам из одного общего раздела
- 3 Вспомогательные элементы поиска
- 3.1 Поиск по алфавиту
- 3.2 Как найти пользователя, если он не оставил ни одного сообщения?
- 3.3 Советы по поиску
- 3.4 Как отслеживать новые торренты, темы и сообщения в нужных разделах?
- 4 Как добавить поиск по форуму в браузер
- 4.1 Firefox 3
- 4.2 Opera 9
- 4.3 Internet Explorer 7
Как пользоваться Поиском?
Поиск осуществляется только по названиям тем.
Минимальный размер слова для поиска по форуму или трекеру – одна буква или символ.
Опции поиска по Трекеру
Поиск по трекеру ищет только “живые” раздачи, то есть раздачи, на которых зарегистрирован торрент.
На главной странице выбираете вкладку Трекер.
Откроется окно вида:
Если открылось совсем другое окно, то необходимо нажать “Расширенный поиск”
При поиске доступны следующие опции:
1. В списке разделов можно выбрать те, по которым будет осуществляться поиск.
- Для выбора нескольких интересующих разделов зажимаете клавишу Ctrl и щелкаете по интересующим разделам.
- Для поиска в только в конкретной категории трекера (“Кино, Видео и ТВ”, “Сериалы”, “Спорт” и т.д.) необходимо выбрать в ней любой раздел и нажать ссылку “Категории” под поисковым запросом. Аналогично можно выбрать конкретный раздел в категории. Для сброса фильтра разделов необходимо нажать ссылку “Всех разделах”.
- Если зажать клавишу Shift и щелкнуть на каком-либо разделе, будут выбран этот раздел и все идущие до него.
- Одновременно можно выбрать не более 200 разделов.
2. Вы можете упорядочить раздачи по:
- зарегистрирован (выбрано по умолчанию)
- название темы (упорядочивание возможно только при выборе одного подраздела)
- количество скачиваний (торрент-файла; обновляется раз в сутки в 5 утра по МСК)
- количество сидов
- количество личей
- размер раздачи (упорядочить можно только для одного подраздела).
Внимание. Поиск работает следующим образом: из всех тем выбираются 400 первых, подходящих под заданные условия. Сортировка найденных тем производится после этого. Поэтому, если хотите найти все темы, соответствующие заданным критериям, задавайте более жёсткие условия поиска, чтобы число результатов было менее 400.
3. При выборе любого из вышеуказанных параметров, сортировать можно по:
- возрастанию
- убыванию (выбрано по умолчанию)
4. Можно вывести торренты за определенное время. По умолчанию выбрано за все время. Опция доступна только при пустом поисковом запросе.
5. Также можно показывать только:
- Только открытые раздачи [v] (то есть раздачи, с которых можно скачать торрент-файл.)
- Новые с последнего посещения
- Cкpыть coдepжимoe {…} – отключает показ содержимого в фигурных скобках в результатах поиска по трекеру (для тех, кто не хочет узнавать результаты матчей раньше времени).
- Будущие закачки
6. Поиск по нику автора.
- Можно отфильтровать свои раздачи
7. Данная кнопка позволяет через поисковые сервера Google или Duck искать не только по заголовкам тем, но и по сообщениям первой страницы темы тот запрос, что вы указали в поисковой форме.
- Внимание! Поиск через Google практически не работает для пользователей из РФ. Для его полноценного использования рекомендуем использовать VPN или Tor Browser. См. Что делать, если вам заблокирован доступ на rutracker.org
8. Скрипт Ссылка на выбранные разделы позволяет получить ссылку (url) на поиск только по разделам, выбранным в данный момент. Её можно скопировать в буфер и далее вставить в адресную строку браузера, добавить в виде ярлыка в “Избранное” браузера, или опубликовать на форуме. Обращайте внимание, что для корректной вставки ссылки в текст на форуме с помощью тэгов [url][/url] необходимо, чтобы вместо каждого f[]= в тексте ссылки стояло f= и номера подразделов, разделенные запятой. Для поиска по всем разделам трекера необходимо ввести f=all или f=-1. Если поиск идёт по нескольким ключевым словам, то их необходимо объединять знаком +.
Опции поиска по Форуму
Поиск по форуму ищет любые темы на форуме.
На главной странице выбираете вкладку Поиск
Откроется окно вида:
Где:
1. В поле Форум выбираете разделы, по которым будет осуществляться поиск.
Внимание!
- Для выбора интересующих разделов зажимаете клавишу Ctrl и щелкаете по интересующим разделам
- Если зажать клавишу Shift и щелкнуть по какому-либо разделу, будут выбран этот раздел и все идущие до него.
2. Результаты поиска можно показывать в виде:
- темы (выбрано по умолчанию)
- сообщения
и также можно упорядочить темы по времени. По умолчанию выбрано по за все время.
3. Можно выбрать показ тем, новых с последнего посещения.
4. Данная кнопка позволяет через поисковый сервер Google искать не только по заголовкам тем, но и по сообщениям первой страницы темы тот запрос, что вы указали в поисковой форме.
Поиск в разделах и подразделах
Иногда возникает ситуация, когда нужно найти какую-либо тему в одном конкретном подразделе, или, при необходимости, во всех подразделах одного общего раздела. В этом случае можно поступить так.
Поиск по одному разделу
Заходите в нужный раздел, в поле [1] (см рисунок) вводите название нужной вам темы, и нажимаете кнопку “по разделу” [2]
Если тема будет найдена, результаты отобразятся в таком виде:
Поиск по всем подразделам из одного общего раздела
Заходите в раздел, в поле [1] (см рисунок выше) вводите название нужной вам темы, и нажимаете кнопку “по подразделам” [3]
Если тема будет найдена, результаты отобразятся в таком виде:
Заметьте, в обоих случаях учитываются словоформы.
Как и в обычном поиске, лучше всего вписывать названия тем на языке оригинала
Вспомогательные элементы поиска
- Для поиска раздачи/темы по части слова, наберите в поиске эту часть, а недостающую замените на *
например по запросу:
бура*
в результате будут найдены буратино, буран, буравчик и т.д.
Замечание: Перед * должно быть хотя бы 3 символа.
- Если вы хотите найти тему, содержащую в названии оба слова, а не какое-то одно, то надо перед каждым из слов поставить знак плюс:
+Звёздные +войны
- Если требуется исключить какое-то слово, перед ним нужно поставить знак минус:
+Звёздные +войны -гоблин
- Если вы хотите найти любые из нескольких слов – перечислите все подходящие варианты через вертикальный слеш: | . Будут показаны результаты поиска с любым из этих слов. Например:
Ужасы | Триллер | Комедия
- Поиск по точной фразе возможен при помощи кавычек, например:
"Will Rock"
Внимание! Знаки препинания не являются частью слова, а символ “_” является.
Поиск по алфавиту
При упорядочивании по названию темы необходимо учитывать, что для компьютера упорядочивание в алфавитном порядке имеет ряд особенностей. Алфавитный порядок для компьютера следующий:
- знаки пунктуации (точка, дефис, двойные кавычки, одинарные кавычки, фигурные скобки и др.)
- цифры от 0 до 9
- буквы латинского алфавита
- некоторые дополнительные знаки пунктуации (символ подчёркивания, например)
- символы кириллицы
- некоторые специальные графические символы (например, парные двойные кавычки)
Как найти пользователя, если он не оставил ни одного сообщения?
Если пользователь не оставил ни одного сообщения, то зная его ник, вы можете посмотреть его профиль, указав в строке его ник:
rutracker.org/forum/profile.php?mode=viewprofile&u=Ник
Внимание! В случае соответствия ника одного пользователя, состоящего из набора цифр, с числовым id другого пользователя, будет открыт профиль, соответствующий числовому id.
Для поиска такого пользователя используйте форму
http://rutracker.org/forum/profile.php?mode=viewprofile&u=ХХХХХХ&name=1
где ХХХХХХ – цифровой ник.
Советы по поиску
- Если вы хотите узнать, какие из раздач пользуются популярностью у пользователей, то в поиске по трекеру упорядочите по Скачан и по убыванию.
- Для поиска раздач, на которых отсутсвуют сиды, упорядочите раздачи по: по количеству личеров, по убыванию и
источника не было: от 2 недель – до 1 дня (любое из доступных значений, включительно).
- Если страниц в теме много, а вы хотите оказаться в середине, например, и не хотите листать до нужной, то можете в строке подставить номер темы и номер сообщения и оказаться на нужной странице. При расчете номера сообщения учитывайте, что на странице по умолчанию помещается 30 сообщений:
rutracker.org/forum/viewtopic.php?t=номер_темы&start=номер_сообщения
Например, если вы хотите оказаться на 37 странице, то вместо номера сообщения вы должны подставить 1080, т.е. 36*30.
- Если вы хотите оказаться на определенной странице в подразделе, вы подставляете значения в строку:
rutracker.org/forum/viewforum.php?f=id_подраздела&start=номер_страницы
При расчете номера, учитывайте, что на 1 странице помещается 50 тем.
Как отслеживать новые торренты, темы и сообщения в нужных разделах?
Для тех, кто хочет отслеживать новые темы, новые посты в определенных разделах соответствующих вашим интересам на форуме, предлагаем сделать закладку вида rutracker.org/forum/tracker.php?ff[]=521&f[]=599&f[]=313&f[]=101&tm=-1&o=1
или
rutracker.org/forum/tracker.php?f=521,599,313,101&tm=-1&o=1
Где:
rutracker.org/forum/tracker.php
– поиск по трекеру;- 521, 599, 313, 101 – номера интересующих нас разделов (в нашем случае, это разделы Мультфильмы (DVD, HDTV), Аниме (DVD, HDTV), Зарубежное кино (HDTV), Зарубежное кино (DVD));
- tm=-1 , o=1 – дополнительные параметры. (в данном случае, это поиск за все время и по дате регистрации торрент-файла.)
Рассмотрим более подробно параметры и синтаксис составления URL страницы.
Начало всегда: http://rutracker.org/forum/tracker.php
Затем идут параметры и их значения, вида: Имя_параметра = значение
Разделителем команд является &, он же объединяет несколько команд в одну.
Параметр f[] или просто f – раздел форума по которому осуществлять поиск. Номера разделов могут быть перечислены через запятую.
Для определения номера интересующей темы кликните правой кнопкой мыши на теме и выберите свойства:
Для браузера Firefox – навести курсор на тему, номер увидите внизу слева:
Упорядочить выдачу результатов по критерию – параметр: o
Значения:
- 1 – Дата регистрации
- 2 – Название темы
- 4 – Скачан раз
- 10 – Seeders
- 11 – Leechers
- 7 – Размер
Сортировать выдачу по – параметр: s
Значения:
- 1 – по возрастанию
- 2 – по убыванию
Выдавать торренты за интервал – параметр: tm
Значения:
- -1 – за все время
- 1 – за сегодня
- 3 – последние 3 дня
- 7 – посл. неделю
- 14 – посл. 2 недели
- 32 – последний месяц
Показывать только торренты (пара – параметр = значение):
Значения:
- my=1 – Мои
- new=1 – Новые с последнего посещения
В выдаче показать колонку:
Значения:
- dc=1 – Категория
- df=1 – Форум
- da=1 – Автор
- ds=1 – Скорость
Название содержит слова – параметр: nm
Значение – строка в двойных кавычках
Никнейм того, кто запостил раздачу – параметр: pn
Значение – строка в двойных кавычках
Результат поиска заносим в избранное (для удобства):
Пример:
Фильмы за последние 3 дня, упорядоченные по убыванию количества сидеров.
rutracker.org/forum/tracker.php?f[]=7&tm=3&o=10&s=2
Как добавить поиск по форуму в браузер
Firefox 3
Инструкция по добавлению поиска по rutracker.org для Firefox
1. Нужно поставить расширение Add to Search Bar (желательно ставить последнюю версию, т.к. старые с новыми версиями Mozilla Firefox не работают), после чего зайти на http://rutracker.org/forum/search.php для поиска по форуму (или http://rutracker.org/forum/tracker.php для поиска по трекеру), правый клик в поле поиска, выбрать в меню пункт “Добавить плагин в панель поиска…”
2. В диалоге подтверждения добавления нажать «ОК». Поиск добавлен.
3. Если поиск по трекеру не отображается, то его надо выбрать из списка:
Альтернативный вариант
Нужно поставить расширение Add to Search Bar (желательно ставить последнюю версию, т.к. старые с новыми версиями Mozilla Firefox не работают), после нажимаете на вашу панель поиска и выбираете такой пункт:
→И никаких других процедур после этого делать не надо, поиск добавлен.
Opera 9
Инструкция по добавлению поиска по rutracker.org для Opera 9
1. Зайти на http://rutracker.org/forum/search.php для поиска по форуму (или http://rutracker.org/forum/tracker.php для поиска по трекеру), правый клик в поле поиска, выбрать в меню пункт “Create search”
2. В диалоге подтверждения добавления вести ключевое слово (будет использоваться для вызова быстрого поиска из адресной строки) и нажать “OK”
3. Поиск добавлен в список.
♠ps.♠ При необходимости можно изменить поисковые запросы, для этого нужно зайти в Tools > Preferences > Search, выбрать в списке нужный поисковик и нажать “Edit“.
Строки запросов для rutracker.org – http://rutracker.org/forum/tracker.php?nm=%s (поиск по трекеру) и http://rutracker.org/forum/search.php?nm=%s (поиск по форуму), дополнительные параметры запросов можно посмотреть в инструкции:
“Как отслеживать новые торренты, темы и сообщения в нужных разделах”
Internet Explorer 7
Инструкция по добавлению поиска по rutracker.org для IE7
1. Кликнуть на “стрелке вниз” рядом с кнопкой поиска, выпадет меню. Выбрать “Find More Providers” (“Найти других поставщиков” в русском варианте).
2. На открывшейся странице ввести в форму “Create Your Own” поисковую строку и название для этого поиска. Нажать “Install“.
Строки для rutracker.org – http://rutracker.org/forum/tracker.php?nm=TEST (поиск по трекеру) и http://rutracker.org/forum/search.php?nm=TEST (поиск по форуму)
3. В диалоге подтверждения добавления нажать “Add Provider”
4. Всё, поиск добавлен в список.
Вопросы по пользованию поиском можно задать здесь
Поиск по торрентам
RuTracker
Крупнейший русскоязычный торрент трекер. Зарегистрировано более миллиона пользователей. Скачать бесплатно фильмы, музыку, книги, программы…
Главное правило – вам позволят скачать втрое больше, чем вы отдали. Так что обязательно нужно отдавать.
Если же вы напортачили и вас закрыли, просто зарегистрируйтесь заново, но теперь соответствуйте правилам. Так самому же будет проще и удобнее.
Загрузка файлов
Обратите внимание, что в ролике указан старый, недействующий адрес torrents.ru, новый же – rutracker.org (расширение Chrome
YaCy
YaCy (англ. Yet another Cyberspace – еще одно киберпространство; созвучно с англ. Ya see — да, понял).
Это пипринговая сеть (от человека к человеку) без использования серверов, подобно Торренту.
Такую сеть нельзя отследить и вычислить.
Принцип такой, каждый ставит у себя программу и становится участником сети, где каждый участник индексирует и делится своими исследованиями интернета. Так все индексируется и собирается общая база.
На английском языке
TorLook
Быстрый поисковик торрентов среди русских и зарубежных трекеров.
Поиск торрентов происходит быстро, есть инструмент сортировки и фильтрации результатов.
Найти и скачать торрент, где допустимо, можно бесплатно без регистрации.
Скачиваем фильмы через торрент.
Довольно обширная база. Хорошо и визуально понятно структурирована.
Попадаем на стартовую страницу и сразу видим постеры фильмов с номером рейтинга.
Вверху будут наиболее свежие и наиболее востребованные.
Жмем и попадаем на страницу фильма, где можно посмотреть трейлер и скачать выбрав требуемое качество.
Cinemate
Каталог и поисковик по крупнейшим русскоязычным торрент-трекерам.
Ищем, переходим на сайт, регистрируемся и потом качаем.
В базу поисковика попадают ссылки на раздачи только полнометражных фильмов и мультфильмов. Все ссылки сгруппированы по фильмам и категориям качества, что позволяет быстро найти подходящую для вас копию.
В поиске есть подсказка даже с превьюшкой, как видно ниже.
Довольно часто одна и та же копия фильма, появившись на одном трекере, через некоторый период времени попадает на другой, потому все раздачи на страницах фильмов сгруппированы по повторам, как это видно ниже.
Очень просто и наглядно, легко выбрать, что качать.
Регистрация не обязательна, но желательна.
Зарегистрированные пользователи имеют возможность следить за появлением новых фильмов с участием любимых актеров и режиссеров, а также новых раздач у отслеживаемых кинолент. При появлении новых раздач приходит оповещение в специальный раздел на сайте или по email.
Есть возможность подписаться на множество RSS-каналов, чтобы быть в курсе всех изменений на сайте: появлении нового фильма с любимым актером, новой раздачи у интересующего вас фильма, изменений в Ленте обновлений и списке отзывов и т.п.
Поиск по документам
Поиск по блогам
Поиск по микроблогам
Поиск по соцсетям
Поиск по новостям
Поиск покупок
Лучший ответ
amphiby
Мастер
(2407)
12 лет назад
запусти в клиенте, там нажми на этот торрент, нажми на вкладку “трекеры”, там возможно будет написано название сайта
Остальные ответы
С Н
Мудрец
(10093)
12 лет назад
запучти его и в свойствах торрента посмотри ссылку
gerunzo
Мастер
(1808)
12 лет назад
ну запусти его а уже в програмке внизу нажимаеш трекеры ))
Мудрец
(18380)
12 лет назад
открываешь программой и там во вкладке трекеров посмотришь, а можно этот же файл открыть блокнотом и там будут указаны адреса трекеров
Алексей Фирсов
Гуру
(2853)
12 лет назад
Можешь открыть его в текстовом редакторе
эдуард фурников
Профи
(881)
6 лет назад
Если в torrent-клиенте, то во вкладке трекеры есть такая информация, она представлена в этаком вертикальном списке, если torrent-файл открыть блокнотом, информация о трекере там тоже будет.
Особенности поиска и скачивания торрент файлов через uTorrent
Протокол BitTorrent появился в начале 2000-х годов, но тогда еще мало кто мог оценить его возможности. Сегодня технология BitTorrent используется множеством приложений, но ассоциируется она прежде всего с uTorrent — самым популярным клиентом для скачивания контента с торрент-трекеров. Ниже мы дадим инструкцию по скачиванию файлов с ее помощью, а заодно расскажем какие существуют способы поиска контента, который можно скачать через uTorrent.
Следует начать с того, что uTorrent не имеет собственного встроенного поискового движка. Если ввести в поисковое поле клиента запрос, в браузере по умолчанию будет открыта страница с предложением установить расширение Safe Torrent Scanner , добавляющее к строке запроса ключевое слово « torrent » и отправляющее запрос в поисковую систему Google . Поиск интересующего вас контента лучше выполнять непосредственно на сайте торрент — трекере , также для этой цели можно использовать специальные программы, например, Bit Che .
Скачивание торрент файлов через uTorrent
Перед тем как приступать к работе с uTorrent, рекомендуется выполнить некоторые настройки, в частности, указать папку, в которую будет скачиваться контент. Запустив клиент, нажмите Ctrl + P, чтобы открыть его настройки и переключитесь в раздел «Папки». Отметьте птичками чекбоксы «Помещать загружаемые файлы в:» и «Перемещать завершенные загрузки в:» и укажите в обоих полях папку для сохранения контента, лучше всего на пользовательском диске.
Далее придерживаемся следующего алгоритма:
- Посетите сайт торрент-трекера и найдите интересующий вас контент;
- Как правило, торрент-трекеры предлагают два способа скачивания — через торрент-файл и через магнитную ссылку. Если вы выберите первый вариант, на ваш ПК будет скачан небольшой файл с расширением TORRENT;
- Запустите его двойным кликом;
- В результате файл будет открыт в uTorrent, при этом вам будет предложено немедленно приступить к загрузке контента. Снимите, если надо, галки с тех входящих в торрент файлов, которые вам не нужны;
- Нажмите в открывшемся окне «OK», чтобы приступить к загрузке.
- Далее вы сможете наблюдать за прогрессом скачивания уже в основном окне uTorrent.
Если вы предпочтёте скачивание через магнитную ссылку, в окне браузера появится запрос на открытие клиента. Подтвердите открытие клиента нажатием кнопки «Открыть» и выполните действия, описанные в третьем пункте инструкции по скачиванию контента с использованием torrent-файла.
Плюсы и минусы скачивания контента через uTorrent
Плюсы:
- Удобство и простота, скачивание можно приостановить и возобновить позже.
- Множество источников контента
Минусы:
- Высокая нагрузка на сеть, при скачивании через uTorrent резко падает скорость загрузки по другим каналам.
- IP-адрес пользователя «светит» в интернет.
- Назойливая реклама в бесплатной версии клиента. (ее можно отключить)
- Некоторые торрент-трекеры требуют обязательной регистрации.
Использование uTorrent и аналогичных программ является быстрым, удобным и простым способом получить бесплатный доступ к самому разному контенту. Однако скачивать контент рекомендуется только с проверенных и хорошо зарекомендовавших себя трекеров, предоставляющих полный набор сведений о файлах.
Как найти нужный файл в торрент
Completing the CAPTCHA proves you are a human and gives you temporary access to the web property.
What can I do to prevent this in the future?
If you are on a personal connection, like at home, you can run an anti-virus scan on your device to make sure it is not infected with malware.
If you are at an office or shared network, you can ask the network administrator to run a scan across the network looking for misconfigured or infected devices.
Another way to prevent getting this page in the future is to use Privacy Pass. You may need to download version 2.0 now from the Chrome Web Store.
Cloudflare Ray ID: 71a97a736ee2b884 • Your IP : 82.102.23.104 • Performance & security by Cloudflare
Как быстро найти нужный файл на торрент-трекерах
Иногда вам нужно что-то скачать: какую-то программу, а чаще всего, чего греха таить, новый сезон любимого сериала. Но оказывается, что нужный контент заполучить легально вобщем-то и негде. Вы честно заходите на сайт CBS или даже HBO, пытаетесь зарегистрироваться, а в ответ получаете сообщение о том, что не ту страну вы выбрали для проживания.
Ситуацию усугубляет то, что с 2015 года вступил в силу «Антипиратский закон», и с тех пор заблокировали много популярных торрент трекров. Позже запретили доступ и к анонимайзерам. И найти нужную программу, фильм стало куда сложнее, все чаще можно встетить сообщение: «По требованию правообладателя торрент заблокирован».
Совершенно случайно, мы наткнулись на один из способов решить эту проблему. Есть такой сайт Uptracker, который составляет рейтинг торрент-трекеров. И оказывается, что на нём есть ещё и поисковик по этим самым трекерам. Поисковик Uptracker — это минималистичный и удобный раздел сайта для поиска торрентов абсолютно бесплатно и без назойливых реклам. Сервис помогает легко и быстро найти нужный файл и также его скачать, без каких-либо обязательств.
Вкратце как-то так можно быстро описать достоинства поисковика: 1. Приятный и простой интерфейс; 2. Отсутствие рекламы; 3. Оптимальный поиск; 4. Удобство и простота; 5. Отсутствие регистрации.
Простой и легкий в освоении, в белых тонах поисковик, идет навстречу новым пользователям, осуществляя поиск всевозможных ресурсов без какой-либо регистрации. Пользователю нужно лишь скачать торрент-файл через magnet-ссылку и в дальнейшем пользоваться своими загрузками на своё усмотрение.
Интерфейс поисковика
Сайт встречает нас светлым дизайном и сразу без лишних предисловий указывает на свой поисковик, расположенный крупным планом по центру. Слева присутствует вертикальная графа с социальными сетями для возможности поделиться торрент поисковиком. Сверху над поиском присутствует информация для добавления сайта в закладки и кнопка на главную сайта Uptracker. Под поисковой графой можно найти условия использования, рейтинг торрент-трекеров, дату основания и ссылку на главную сайта.
Функционал
Любой пользователь интернета знает, что такое торрент-трекеры, и использует возможности, которые они дают. Есть возможность скачивать игры, фильмы, музыку, изображения, по самым оптимальным для вас раздачам и с наилучшей скоростью.
К каждому найденному торрент-трекеру есть соответствующая информация: сиды, личеры, дата загрузки, размер и название. Можно сразу посмотреть, какие файлы и папки находятся внутри.
Скачивание осуществляется только magnet-ссылкой, что довольно очень удобно. Поисковик не имеет акцент на определенном типе контента, в отличие от других ресурсов с узкой специализацией.
Заключение
Если вам важна скорость торрент-трекеров и быстрота поиска, а также качество выдаваемого результата, то вы можете добавить сервис Uptracker-поиск себе в избранное, и с комфортом и удобством им пользоваться. Не нужно бегать по сайтам в надежде не нахватать вирусов, можно в два клика найти интересующие для вас файлы и безопасно скачивать их.
Красиво выполненный сайт-поисковик, без реклам и лишних иллюстраций, не бросается в глаза и не отвлекает от поиска торрентов.
Главное помните, что пользование торрентами не освобождает вас от соблюдения законов той страны, в которой вы находитесь. Удачных вам поисков.