Проблемы с торрентами

Интересно, а этот файл еще актуален? Соответствует ли он DPI triggering.7z от Xunlei?

Xunlei, можно ли сделать ваш файл (DPI triggering) в формате .dat для использования в uTorrent?

Пока у меня такие фильтры в Tixati
tixtati
Удобно, что практически все они сами обновляются. ipfilter.dat, упомянутый выше, находится на первом месте, хотя мне кажется, DPI triggering должен его полностью покрывать и можно от него отказаться, подскажите, если кто-то в этом разбирается.

Все остальные фильтры были в этом топике. Когда начинаются проблемы с DHT, включение некоторых фильтров, кажется, только усугубляет положение. При этом непонятно, какие фильтры с какими пересекаются, и можно ли их оптимизировать. Например, чем отличаются эти два списка (второй и третий на скрине)

Первый во многом состоит из списков iBlockList, как я понял

А вот combined-final-win.dat почему-то о них отказывается

combined-final-win.dat and combined-final.p2p: Are IP block lists suitable for use in torrent clients like Halite for Windows10, or qBitTorrent11 and Transmission12 under any OS. These lists adhere to ipfilter.dat and PeerGuardian P2P conventions, and will come in especially handy on public trackers (though you can use them confidently on private ones as well). The discerning user may be interested to know that all iBlockList sources have been abandoned for these lists, meaning that the increasingly outdated entries associated with that service, are now a thing of the past. The lists will mitigate a wide gamut of nefarious traffic, being merged from the same sources as the CIDR list described below.

В общем, не совсем понятна польза этих списков… Когда всё работает, оно и так всё работает.

А вот проблемы с DHT ещё появляются иногда. Но вроде бы меньше…

Наверное, можно, я не знаю за формат, попросите нейронку написать скрипт PowerShell для преобразования.

Для проверки вхождения подмножества можно поменять местами списки (перетащив левой кнопкой мыши) и обнулить счетчики, если ipfilter.dat покажет 0, значит первый список покрывает.

Да в принципе никакой, если значение nf_conntrack_expect_max на маршрутизаторе большое, нерабочие соединения будут висеть время nf_conntrack_tcp_timeout_syn_sent и затем освободят память, а клиент подолбившись залимитирует подключения к нерабочим адресам. Ну и сканеры пускай долбятся с попытками RCE, если клиент обновляется до последней версии, то риск минимален.

Ага, этот диапазон есть в самом конце файла

Да, на случай, если DPI triggering от Xunlei обновится, можно преобразовать cidr в диапазон ip утилитой https://github.com/ipinfo/cli/releases/tag/cidr2range-1.2.0

cidr2range_1.2.0_windows_amd64.exe "All CIDRs.txt" >AllCIDRsToRange.txt

Только эта утилита не дружит с символом возврата каретки, поэтому вначале нужно его удалить из All CIDRs.txt (к примеру, в Notepad++ переключиться на расширенный режим поиска и заменить все \r). Потом открыть блокнотом ipfilter.dat и скопировать туда содержимое AllCIDRsToRange.txt

Не могу найти источник этого файла, поэтому трудно сказать. Но очевидно, что там собраны разные фильтры, не только от Xunlei

Забыл спросить. А есть ли смысл в этой опции, если в других клиентах она отключена либо вообще не предусмотрена.

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

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

Да я так и понял… Из тех наблюдений, которые успел провести, особой разницы не заметил.

В принципе, список от David Moore, наверное, самый полный, и он обновляется часто. Можно оставить ссылку для автообноления, хуже не будет. Хотя, как я уже писал, включение фильтров вызывает еще большую потерю нодов, когда DHT плохо работает. Но может быть, это только визуально, не знаю.

В любом случае, сами фильтры неплохие и интересные. Некоторые, видимо, лучше использовать сразу в маршрутизаторах, как там и пишут

Спасибо за ссылку. Вроде сделал, вроде получилось :slight_smile:

Да вот он. А вот, что у меня получилось
ipfilter.dat (2,6 КБ)

Теперь бы всё это дело объединить этой утилитой и можно закидывать в uTorrent :slight_smile: Жаль только, что вручную придётся обновлять.

Смысл есть проверить дело ли в этой опции или нет. Будет ли консольная утилита, например, качать редкие торренты без трекера, которые обычные клиенты не качают.

Не, речь про источник вот этого

Там 1400+ записей, а в файле от Xunlei всего около 100, но возможно, больше и не нужно)

Ясно. Вопрос был как раз об этом.

Спойлер

enforce_node_id (также известная как dht_enforce_node_id) — это специализированная логическая настройка (Boolean) в библиотеке libtorrent. Она отвечает за строгую фильтрацию и безопасность узлов в децентрализованной сети DHT (Kademlia). [1, 2, 3]

Библиотека libtorrent используется во множестве популярных торрент-клиентов (например, qBittorrent, Deluge).


Назначение и принцип работы

Когда этот параметр включен, торрент-клиент игнорирует любые входящие запросы от узлов (peers), чей Node ID сгенерирован некорректно по отношению к их внешнему IP-адресу. Если от такого узла поступает запрос, ваш клиент автоматически возвращает ошибку "invalid node ID". [2, 3]

  • Как это работает: В современной спецификации Bittorrent DHT применяется механизм безопасности (BEP 42). Согласно ему, Node ID (идентификатор узла) должен жестко зависеть от внешнего IP-адреса этого узла (используется хеширование IP с солью). Это сделано для того, чтобы злоумышленник не мог произвольно выбирать себе ID в сети DHT. [1]
  • Значение по умолчанию: Обычно установлено в false (выключено) для обеспечения максимальной совместимости со старыми или нестандартными клиентами, которые не поддерживают BEP 42. [2]

Зачем нужна эта функция?

Параметр разработан для защиты от атак типа Sybil (Сивилла) и Eclipse (Затмение).
Без этой проверки злоумышленник может запустить множество виртуальных узлов со специально подобранными Node ID, чтобы “окружить” целевой инфохеш (торрент) или конкретного пользователя, перехватив весь DHT-трафик и заблокировав поиск реальных пиров. Обязательная привязка ID к IP делает такую атаку экономически и технически невыгодной. [1]


Стоит ли её включать?

Режим Плюсы Минусы Кому подойдет
Выключено (false) Максимальная скорость поиска раздач; доступ к пирам со старым софтом. Выше риск попасть на “замусоренные” или атакующие узлы. Обычным пользователям для стабильной и быстрой загрузки.
Включено (true) Повышенная безопасность; защита от спама и манипуляций в сети DHT. Может снизить количество доступных пиров; увеличивает шанс проблем с поиском метаданных. Разработчикам или пользователям в закрытых/корпоративных сетях с жесткими требованиями к безопасности.

Вы настраиваете этот параметр в своем собственном приложении на базе libtorrent или изменяете конфигурацию существующего торрент-клиента?

Спойлер

Да, эта опция будет работать, но ее включение напрямую повлияет на то, как ваш клиент взаимодействует с другими участниками сети.

Вот как поведет себя ваш клиент в зависимости от настроек других участников:

1. Если другие клиенты НЕ поддерживают BEP 42 (или это старый софт)

  • Результат: Ваш клиент заблокирует их.
  • Почему: Старые клиенты генерируют случайный Node ID, который не привязан к их IP-адресу. Для вашего клиента такой ID выглядит некорректным, поэтому он автоматически отклонит (drop) любые входящие запросы от них.

2. Если другие клиенты поддерживают BEP 42, но у них опция ВЫКЛЮЧЕНА

  • Результат: Взаимодействие будет успешным.
  • Почему: То, что у них выключена опция enforce_node_id, означает лишь одно: они принимают любые ID без строгой проверки. Однако современный софт по умолчанию генерирует правильные, валидные Node ID (согласно BEP 42). Поскольку их ID корректен, ваш клиент успешно пройдет проверку и примет запрос.

Главный вывод для вас

Включение enforce_node_id — это одностороннее решение для защиты вашего клиента. Оно не требует, чтобы у всех вокруг была включена эта опция.

Однако учитывайте последствия:

  • Сеть DHT станет для вас чище и безопаснее.
  • Количество доступных узлов (пиров) снизится, так как вы добровольно отсечете все старые или некорректно настроенные клиенты.

Если вы хотите узнать, как правильно настроить этот параметр для конкретной задачи, уточните: вы пишете свой код на libtorrent или настраиваете готовый клиент (например, qBittorrent)?

Возможно и есть смысл проверить… А есть что-то более Windows friendly, чем WSL? Была жу какая-то консольная утилита под Windows.

P.S. Скприпт от нейронки. Как я и думал, нерабочий и требует возни

powershell code for translating cidr records in text file into .dat format for utorrent
# Пути к файлам (измените при необходимости)
$InputFile = "C:\path\to\cidr_list.txt"
$OutputFile = "$env:APPDATA\uTorrent\ipfilter.dat"

# Проверка существования исходного файла
if (-not (Test-Path $InputFile)) {
    Write-Error "Исходный файл не найден по пути: $InputFile"
    return
}

# Массив для сбора сконвертированных строк
$OutputLines = @()

# Чтение исходного файла построчно
Get-Content $InputFile | ForEach-Object {
    $Line = $_.Trim()
    
    # Пропускаем пустые строки и комментарии
    if ([string]::IsNullOrWhiteSpace($Line) -or $Line.StartsWith("#")) {
        return
    }

    # Парсинг CIDR (например, 192.168.1.0/24 или одиночный IP)
    if ($Line -match "^(?<ip>\d{1,3}(\.\d{1,3}){3})(/(?<prefix>\d+))?$") {
        $IPString = $Matches['ip']
        $PrefixString = $Matches['prefix']

        try {
            # Конвертируем IP-адрес в объект [System.Net.IPAddress]
            $IP = [System.Net.IPAddress]::Parse($IPString)
            
            # Получаем байты адреса в сетевом порядке (Big-Endian)
            $Bytes = $IP.GetAddressBytes()
            
            # Объединяем байты в 32-битное целое число (UInt32) для битовых операций
            if ([BitConverter]::IsLittleEndian) {
                [Array]::Reverse($Bytes)
            }
            $IPInt = [BitConverter]::ToUInt32($Bytes, 0)

            # Определяем маску подсети по префиксу (если префикс не указан, считаем его /32)
            $Prefix = if ($PrefixString) { [int]$PrefixString } else { 32 }
            
            if ($Prefix -lt 0 -or $Prefix -gt 32) {
                Write-Warning "Некорректный CIDR префикс: $Line"
                return
            }

            # Расчет маски
            $Mask = if ($Prefix -eq 0) { 0xFFFFFFFFuint } else { [uint32](0xFFFFFFFFuint -shl (32 - $Prefix)) }

            # Вычисляем начальный и конечный IP диапазона в числовом виде
            $StartInt = $IPInt -band $Mask
            $EndInt = $StartInt -bor (-not $Mask)

            # Конвертируем числа обратно в байты и IP-адреса
            $StartBytes = [BitConverter]::GetBytes($StartInt)
            $EndBytes = [BitConverter]::GetBytes($EndInt)
            
            if ([BitConverter]::IsLittleEndian) {
                [Array]::Reverse($StartBytes)
                [Array]::Reverse($EndBytes)
            }

            $StartIP = ([System.Net.IPAddress]$StartBytes).IPAddressToString
            $EndIP = ([System.Net.IPAddress]$EndBytes).IPAddressToString

            # Добавляем строку в формате ipfilter.dat
            $OutputLines += "$StartIP - $EndIP"
        }
        catch {
            Write-Warning "Ошибка при обработке строки: $Line. Сообщение: $_"
        }
    } else {
        Write-Warning "Неверный формат строки (пропущено): $Line"
    }
}

# Сохраняем результат в кодировке UTF8 (без BOM) или ASCII, uTorrent без проблем её прочитает
$OutputLines | Set-Content -Path $OutputFile -Encoding ASCII

Write-Host "Конвертация успешно завершена! Файл сохранен в: $OutputFile"
Write-Host "Всего обработано диапазонов: $($OutputLines.Count)"

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

Твою ж дивизию. Если посмотреть на мой скрин, то видно, что ipfilter.dat знимает всего 9,984 адресов, в то время, как DPI Triggering.txt - 229,120. Это меня и ввело в заблуждение.

Количество записей не гарантирует больший диапазон, но здесь разница очень большая. Пришлось поразбираться.

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

Сразу навело на мысль, что Tixtati не хватает только одного диапазона адресов. Формат .dat подразумевает дополнительные поля:

The format of the ipfilter.dat file is as follows:

IPs range , Access level , Description

Access level values lower than 127' are blocked IPs and values over 127 are allowed IPs.

IPs range values are described by an initial IP a dash and the ending IP of the range.

Example

000.000.000.000 - 000.255.255.255 , 000 , "This" Network [RFC1700, page 4]
169.254.0.0 - 169.254.0.255 , 000 , Link local
192.168.0.0 - 192.168.255.255 , 0 , Optionally block my LAN
127.0.0.0 - 127.255.255.255 , 0 , Optionally block localhost (Loopback) 

Соответственно минимальным правильным вариантом должно быть:
ipfilter.dat (3,0 КБ)

Т.е. поле “Access level” должно быть обязательным. Поэтому ipfilter.dat отображал неполное количество IP-адресов, т.к. в этом файле почти все записи не содержат этого поля. Правильный вариант:
ipfilter.zip (8,8 КБ)

Теперь диапазон вырос до 626,896, т.е. стал в три раза больше, чем DPI Triggering от Xunlei.

Очень хороший вопрос :slight_smile: Хотелось бы услышать мнение автора. Но меня удивляет, что нет следов первого файла (откуда он взялся, кто автор и т.д.). Куда же они делись?

А можно сделать что-то подобное, только для Windows консоли?

Консольные торрент-клиенты под Windows

Вариант 1. Сборки на базе libtorrent (client_test или аналоги)

Если вы используете официальный демонстрационный консольный клиент libtorrent (client_test.exe) или кастомный консольный демон, конфигурация передается через текстовый файл настроек или аргументы командной строки при запуске. [1, 2, 3]
Через файл конфигурации (.settings или .conf):
В файле конфигурации вашего демона добавьте строку в блок настроек сессии settings_pack: [4]

dht_enforce_node_id = true

Через аргументы командной строки (если поддерживается клиентом):

client_test.exe --dht_enforce_node_id=1


Вариант 2. Консольный клиент qBittorrent Nox (qbittorrent-nox)

В современных версиях qBittorrent для Windows доступна официальная консольная версия (WebUI-only), которая называется qbittorrent-nox.exe. Она настраивается абсолютно так же, как и графическая версия, но конфигурационный файл лежит в другой подпапке.

  1. Завершите процесс qbittorrent-nox.exe (Ctrl+C в консоли).
  2. Нажмите Win + R, введите %APPDATA%\qBittorrent (или проверьте локальную папку qbittorrent-nox внутри %LOCALAPPDATA%).
  3. Откройте файл qBittorrent.ini (или qBittorrent-nox.ini) через Блокнот.
  4. В секцию [Advanced] добавьте строку:

libtorrent\dht_enforce_node_id=true

  1. Перезапустите консольный клиент.

Вариант 3. Популярный консольный клиент aria2

Популярный универсальный консольный CLI-загрузчик aria2c имеет собственную встроенную реализацию DHT (он не использует libtorrent). В спецификации aria2 нет прямой поддержки BEP 42 в виде жесткого флага enforce_node_id. [5]
Однако в aria2 безопасность DHT регулируется следующими параметрами в файле aria2.conf или в строке запуска:

  • –bt-max-open-files и регулировка таймаутов — помогает снизить нагрузку при Sybil-атаках.
  • –enable-dht=false — если вам требуется абсолютная изоляция от недоверенных пиров, DHT полностью отключается, а поиск идет только через трекеры.

Или ИИ шляпу пишет?

P.S. Кто пользуется qBittorrent скажите, это тоже шляпа?

Спойлер

В клиенте qBittorrent параметр enforce_node_id вынесен в скрытые инженерные настройки libtorrent. Включить его через стандартный графический интерфейс (даже в разделе «Дополнительно») нельзя.

Настройку необходимо прописать вручную в конфигурационном файле программы.

Пошаговая инструкция

Шаг 1. Полностью закройте qBittorrent [1]

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

  • Нажмите Файл → Выход (или Ctrl+Q).
  • Убедитесь, что иконка программы исчезла из трея Windows (возле часов).

Шаг 2. Откройте файл конфигурации

  1. Нажмите комбинацию клавиш Win + R на клавиатуре.

  2. Вставьте следующий путь и нажмите Enter:

    %APPDATA%\qBittorrent
    
    
  3. В открывшейся папке найдите файл с именем qBittorrent.ini.

  4. Нажмите по нему правой кнопкой мыши и откройте с помощью Блокнота (или любого другого текстового редактора). [2]

Шаг 3. Добавьте параметр libtorrent

  1. Прокрутите файл в самый низ или воспользуйтесь поиском (Ctrl + F), чтобы найти секцию [Advanced].

  2. Внутри этой секции (с новой строки) вставьте следующий параметр:

    libtorrent\dht_enforce_node_id=true
    
    

    Если секции [Advanced] в вашем файле вообще нет, просто создайте её, вставив в самый конец файла:

    [Advanced]
    libtorrent\dht_enforce_node_id=true
    
    
  3. Сохраните изменения (Ctrl + S) и закройте Блокнот.

Шаг 4. Запустите qBittorrent

Теперь можно снова запустить клиент. С этого момента встроенный движок libtorrent начнет строго фильтровать входящие DHT-запросы и отсекать узлы с некорректными ID.


Как проверить, что настройка применилась?

В самом интерфейсе qBittorrent не появится галочки, но косвенно работу фильтра можно заметить по двум признакам: [3]

  1. Количество узлов DHT: В нижней статусной строке клиента общее число «Узлов DHT» (DHT nodes) может стать чуть меньше, чем обычно, так как клиент перестанет запоминать «плохие» узлы.
  2. Лог работы: Если включить отображение лога (Вид → Панель Журнала), во вкладке «Предупреждения» или «Peer» в моменты сканирования сети могут проскакивать технические сообщения об ошибках отсечения пиров (зависит от уровня логирования вашей версии qBittorrent). [4]

Вы хотите включить эту опцию для повышения приватности в публичных сетях или для борьбы со спам-трафиком, который забивает процессор/роутер?

У меня все строки грузятся в uTorrent2.0.4, а в uTorrent3.6 только 1183 из 1420

Либо тут кто-то выкладывал, либо на рутрекере. Просто качаю себе все подряд “на всякий случай”, а потом иногда не могу вспомнить, что это и откуда)

P.S. А вообще, какую проблему мы сейчас решаем? С работой Dht вроде бы разобрались. Триггерные блокировки? У себя пока вроде не наблюдаю

В uTorrent вообще непонятно, что и куда грузится. Написано, что записи загружены, а что там загрузилось и в каком количестве… Ну ладно, будем верить, что uTorrent всё нормально отрабатывает :slight_smile:

Да всё ту же проблему, которую я описывал. Когда идет атака затмения, uTorrent пустует часами (ну может, 1-2 раздачи что-то там пытаются вяло раздавать). В статусе при этом идет набор нодов, но затем резкий сброс и повторный вход в DHT-сеть. Со стороны всё это выглядит, словно клиент тупо душат, т.е. окружают фейковыми нодами и не дают ему пробится в нормальную DHT-сеть. Этакое затмение клиента (Eclipse Attack). Кстати, я понял, почему uTorrent так себя ведет в статусе в такие моменты (кажется, понял). Видимо, он просто не расчитан на наплыв такого числа dht-нодов, которые в рекурсии засыпают его ссылками сами на себя. Таблица маршрутов у клиента тупо переполняется и сбрасывается.

Как-то так :slight_smile:

Свой список сделал на основе репортов округлив до /24, без проверок. Может сейчас уже и нет таких тригеров.

qBittorrent, конечно, примет эту опцию. Он примет что угодно. Но похоже её не использует, потому что количество DHT нод у меня не изменилось.

Собрать для Windows для меня очень сложно. Это проще было бы сделать в GitHub Actions.

Запрос разработчикам отправлен здесь https://github.com/qbittorrent/qBittorrent/discussions/24772

Хотя, может лучше обратиться в libtorrent, если интересует только консольная утилита.

Забыл ответить на эту часть. Да, я тоже не наблюдаю. Но раз уж речь зашла об этом :slight_smile:

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

Спасибо :slight_smile:

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

Например, вызывает сомнение утверждение, что все современные клиенты реализуют расширение безопасности BEP 42, привязывающее Node ID к IP-адресу. Хорошо бы, если так. Это дало бы возможность отсеить фейковые ноды в ущерб какой-то части легитимных, но может быть сама dht-сеть заработала нормально, пусть и с меньшим количеством пиров.

Интересно, почему это не у всех, если атака глобальная? От чего зависит?
Кстати, где-то писали, как бороться с этой атакой, что-то нужно добавить в клиент. Но опять не помню, где и как, лол. Если вспомню, напишу
У меня пока все ок с dht. С tixaty не удалось подружиться, но с его помощью удалось починить dht в uTorrent, перенаправив router.utorrent.com на рабочую ноду из tixati

Если автор англоязычной статьи не знает, то мне откуда знать? :slight_smile:

 I don’t know how they choose their targets from all torrenting clients, but it probably depends on long session length and total number of torrents.

Одно могу сказать, что проявляться может по-разному. В субботу утром запустил, все нормально. После обеда началось. На следующий день наоборот - с утра проблемы, к вечеру нормально.

Сегодня во второй половине дня запустил, за 2,5 часа только 2 ГБ раздалось. Плюнул на это дело, решил qBittorent поставить. Сделал всё, как ИИ велел. Версия v5.2.2 с libtorrent 2.
Добавил опции и два торрента, наблюдал.

[Advanced]
libtorrent\dht_enforce_node_id=true
libtorrent\log_alerts=true

Может в этом что-то и есть, но нужно больше тестов и времени. Решил перенести все раздачи из uTorrent. Блин… Я в шоках от утилиты

900 торрентов перенесла что орех щелкнула :slight_smile:

Посмотрим, что будет дальше. Пока с нейронкой общаюсь. Как уже писал, чешет она красиво, но на выходе почему-то получается пшик

Спойлер

Поскольку стандарт BEP 42 был принят в 2014 году, практически все актуальные торрент-клиенты уже давно поддерживают его нативно в своих современных версиях [:magnifying_glass_tilted_left:].

Ниже представлена сводная таблица всех популярных современных торрент-клиентов, их минимальных версий с поддержкой BEP 42, а также возможности принудительной фильтрации (enforce режима).

Таблица поддержки BEP 42 в современных клиентах

Название клиента Движок / Библиотека Минимальная версия с поддержкой BEP 42 Можно ли принудительно включить фильтрацию (enforce)? Как настраивается / Особенности
qBittorrent libtorrent (Arvid Norberg) v3.1.10 (2014) Да (Полная поддержка) Через ручное редактирование файла qBittorrent.ini (libtorrent\dht_enforce_node_id=true).
uTorrent (Classic) Собственный закрытый код v3.4.1 (2014) Нет (Частичный режим) Встроен по умолчанию на отправку валидного ID. Жёстко блокировать входящие “грязные” пакеты старых клиентов нельзя.
Deluge libtorrent (через Python-биндинги) v1.3.7 (2014) Да (Через плагины/конфиг) Зависит от версии установленной в системе библиотеки libtorrent. Напрямую флаг выставляется в core.conf.
BiglyBT / Vuze Собственный код (Java) v1.1.0.0 (2018) Да (Через GUI) В расширенных настройках DHT есть галочка “Enforce cryptographic node ID requirements”.
Transmission Собственный легковесный C-движок Не поддерживается Нет Принципиально не использует алгоритм BEP 42. Защита работает через внутренние таймауты и списки блокировок (blocklists).
rTorrent libTorrent (Rakshasa) Не поддерживается Нет Не поддерживает BEP 42. Из инструментов защиты доступно только полное отключение DHT (dht.mode.set = disable).
WebTorrent (CLI/Desktop) bittorrent-dht (JavaScript) Не поддерживается Нет Не реализует криптографическую привязку ID к IP. Защита возможна только полным отключением сети через ключ --no-dht.

Важное примечание по версиям qBittorrent:

Хотя минимальная поддержка появилась ещё в версии 3.1.10, для полноценной и стабильной работы защиты рекомендуется использовать версии qBittorrent 4.4.0 и новее (сборки lt20 на базе libtorrent 2.0). Как мы разбирали ранее, в ветке 2.0 алгоритмы проверки оптимизированы, а устаревший код совместимости со старыми узлами полностью вырезан на уровне ядра.

Если вы хотите автоматизировать развёртывание вашей портативной сборки, я могу помочь написать PowerShell-скрипт, который автоматически создаст правильную структуру папок и пропишет строку dht_enforce_node_id=true в qBittorrent.ini. Нужен ли такой инструмент?

Спойлер

Да, абсолютно верно. Включение опции dht_enforce_node_id в qBittorrent полностью заблокирует любое DHT-взаимодействие с клиентом Transmission любой версии.

Вот почему это происходит:

  1. Transmission не поддерживает BEP 42: Разработчики Transmission принципиально не стали внедрять этот стандарт безопасности. Их встроенный DHT-модуль генерирует Node ID случайным образом, без математической привязки к внешнему IP-адресу.
  2. Бескомпромиссная проверка: Когда в qBittorrent активен флаг dht_enforce_node_id, он берёт IP-адрес входящего от Transmission UDP-пакета, прогоняет его через алгоритм SHA-1 (как мы разбирали в коде ранее) и сверяет результат с тем Node ID, который прислал Transmission.
  3. Результат: Проверка гарантированно проваливается. qBittorrent видит несовпадение, считает этот узел «враждебным» или «грязным» и мгновенно сбрасывает (drop) пакет.

Повлияет ли это на скачивание файлов?

Важно разделять поиск участников (DHT) и прямую передачу данных.

  • По сети DHT ваш qBittorrent и чужой Transmission друг друга не найдут.
  • Однако, если они найдут друг друга через другие источники (обычные HTTP/HTTPS трекеры, PEX — обмен пирами, или Local Peer Discovery), то передача файлов между вашим qBittorrent и Transmission будет работать без проблем. Опция dht_enforce_node_id фильтрует только децентрализованную сеть DHT и никак не влияет на обычные TCP/UDP соединения для обмена частями файлов. [1]

Если вы хотите провести тест и наглядно увидеть, как qBittorrent отсекает «неправильные» узлы, я могу подсказать, как временно включить расширенное логирование DHT в qBittorrent, чтобы отслеживать отбрасываемые пакеты в реальном времени. Информативно ли будет посмотреть на такие логи?

Спойлер

Если вы имеете в виду популярный в СНГ торрент-клиент и медиакомбайн Zona, то включение опции dht_enforce_node_id в qBittorrent гарантированно заблокирует любое DHT-взаимодействие с ним.

Вот подробный технический разбор, почему Zona не пройдет проверку безопасности и как это устроено:

1. Какой движок использует Zona?

Клиент Zona написан на Java, а его торрент-составляющая под капотом использует старый форк библиотеки libtorrent-rasterbar версий 1.1.x / 1.2.x или кастомные Java-обертки над ней. [1]

2. Почему Zona провалит проверку dht_enforce_node_id?

Даже несмотря на то, что базовая библиотека теоретически умеет генерировать ID по стандарту BEP 42, в архитектуре Zona этот функционал нарушен: [2]

  • Случайные инфо-хэши и Node ID: Zona работает по принципу стриминга видео и медиа-каталога. Чтобы защитить приватность пользователей и обойти сетевые ограничения, клиент часто маскирует трафик, генерирует полностью случайные идентификаторы узлов при каждом перезапуске и подменяет заголовки. [2, 3]
  • Отсутствие жесткой привязки ID к IP: Zona никогда не настраивалась разработчиками на строгое соблюдение BEP 42 на отправку. Её Node ID для вашего qBittorrent будет выглядеть как математически некорректный («грязный») мусорный пакет. [4]

3. Результат фильтрации

Как только узел с клиентом Zona попытается отправить UDP-запрос в DHT-сеть вашему qBittorrent, ваш клиент: [5]

  1. Возьмет внешний IP-адрес Zona.
  2. Проверит, соответствует ли присланный им Node ID хэшу этого IP.
  3. Увидит несовпадение и сбросит (drop) этот пакет с технической ошибкой invalid node ID. [1, 3]

Повлияет ли это на скачивание фильмов?

Как и в случае с Transmission, это ограничение касается только распределенной сети DHT.
Поскольку Zona ищет раздачи в основном через свои собственные встроенные централизованные трекеры и свои сервера-источники (HTTP/HTTPS анонсы), вы все равно сможете обмениваться файлами напрямую (через обычные пир-соединения), если торрент-хэши файлов совпадут. Но обнаружить друг друга через DHT ваши клиенты больше не смогут. [1, 2, 3]

Спойлер

С клиентом MediaGet (в логах и процессах он часто отображается как mediaget2.exe) ситуация обстоит точно так же, как с клиентами Zona и Transmission. Включение параметра dht_enforce_node_id в qBittorrent полностью заблокирует любое DHT-взаимодействие с ним.

Вот технические причины, почему MediaGet гарантированно провалит криптографическую проверку BEP 42:

1. Какой движок использует MediaGet2?

Исторически MediaGet строился на базе старых версий C++ библиотеки libtorrent (в районе веток 1.1.x / 1.2.x). Однако разработчики этого плеера-клиента внесли глубокие изменения в сетевой код для реализации собственных функций:

  • Агрессивный поиск (Scraping): MediaGet оптимизирован для моментального предпросмотра и стриминга медиафайлов, из-за чего его DHT-модуль работает в режиме «шторма» — он спамит запросами сеть, часто подменяя или рандомизируя свои идентификаторы (Node ID), чтобы обходить ограничения провайдеров и собирать пиры как можно быстрее.
  • Игнорирование BEP 42: В настройках компиляции MediaGet алгоритм строгой привязки ID к внешнему IP-адресу либо полностью отключен, либо работает некорректно из-за постоянной модификации пакетов.

2. Что происходит при контакте с вашим qBittorrent?

Как только узел с MediaGet2 пытается отправить вашему клиенту стандартный DHT-запрос (например, ping или get_peers):

  1. Ваш qBittorrent (особенно на базе libtorrent 2.0 / lt20) перехватывает входящий UDP-пакет.
  2. Программа берет внешний IP-адрес MediaGet и вычисляет, каким должен быть его криптографический ID по формуле BEP 42.
  3. Обнаружив, что реальный Node ID в пакете MediaGet является случайным («грязным»), ваш клиент мгновенно сбрасывает пакет (drop) и фиксирует ошибку invalid node ID.

Общий итог по «комбайнам» (Zona, MediaGet)

Все подобные СНГ-медиаплееры ориентированы на кастомные централизованные базы данных и агрессивный сбор пиров. Сеть DHT для них вторична, и стандарты безопасности 2014–2020 годов (вроде BEP 42) в них либо сломаны, либо проигнорированы.

Поэтому ваш qBittorrent с флагом dht_enforce_node_id=true будет работать как идеальный фильтр, полностью отсекая MediaGet, Zona и Transmission от вашей таблицы маршрутизации DHT, оставляя в ней только «чистокровные» и современные торрент-клиенты (qBittorrent, uTorrent 3.x+, Deluge).

Удалось ли вам увидеть отброшенные пакеты во вкладке «Пиры» или «Предупреждения» после включения libtorrent\log_alerts=true на какой-нибудь активной раздаче?