DPI Blockcheck - скрипт для подбора конфигураций zapret

На днях писал скрипт для проверки работы сайтов на python и подбора конфига для zapret.

Поддерживается zapret и GoodbyeDPI.
При первоначальной установке запускать python download_files.py, все бинарники для Windows скачаются из официальных репозиториев, затем запускать python blockcheck.py --tool=zapret или python blockcheck.py --tool=goodbyedpi (для теста нужно вручную отключать системную службу и VPN).
Список протестированных стратегий пишется в лог (по умолчанию используется simple пресет, в котором я выбрал заработавшие у меня стратегии).
Если стратегии заработали плохо, возможно, необходимо прогнать полный тест (python blockcheck.py --tool=zapret --strategies_set_name=full)
Для подбора конфига нужно парсить лог:
python parse_log.py -i log.txt -o dist
В папке dist появится конфиг вроде такого ниже (для zapret / win64)

Summary

set BIN=%~dp0bin
set STRAT=%~dp0strategies\

start “Zapret: multi” /min “%BIN%winws.exe” ^
–wf-tcp=80,443 --wf-udp=443,50000-50099 ^
–filter-tcp=443 --hostlist=“%STRAT%_dpidesync_disorder_dpidesyncfooling_badsum.txt” --dpi-desync=disorder --dpi-desync-fooling=badsum --new ^
–filter-tcp=443 --hostlist=“%STRAT%_dpidesync_disorder2_dpidesyncsplitseqovl_1_dpidesyncsplittls_sni.txt” --dpi-desync=disorder2 --dpi-desync-split-seqovl=1 --dpi-desync-split-tls=sni --new ^
–filter-tcp=443 --hostlist=“%STRAT%_dpidesync_fake,disorder_dpidesyncttl_1.txt” --dpi-desync=fake,disorder --dpi-desync-ttl=1 --new ^
–filter-tcp=443 --hostlist=“%STRAT%_dpidesync_fake,disorder_dpidesyncttl_12_dpidesyncfaketls_0x00000000.txt” --dpi-desync=fake,disorder --dpi-desync-ttl=12 --dpi-desync-fake-tls=0x00000000 --new ^
–filter-tcp=443 --hostlist=“%STRAT%_dpidesync_fake,disorder2_dpidesyncttl_4_dpidesyncfaketls_0x00000000.txt” --dpi-desync=fake,disorder2 --dpi-desync-ttl=4 --dpi-desync-fake-tls=0x00000000 --new ^
–filter-tcp=443 --hostlist=“%STRAT%_dpidesync_fake,split_dpidesyncfooling_badseq_dpidesyncfaketls_0x00000000.txt” --dpi-desync=fake,split --dpi-desync-fooling=badseq --dpi-desync-fake-tls=0x00000000 --new ^
–filter-tcp=443 --hostlist=“%STRAT%_dpidesync_split2_dpidesyncsplitseqovl_1_dpidesyncsplittls_sni.txt” --dpi-desync=split2 --dpi-desync-split-seqovl=1 --dpi-desync-split-tls=sni --new ^
–filter-udp=443 --hostlist=“%~dp0list-discord.txt” --dpi-desync=fake --dpi-desync-repeats=6 --dpi-desync-udplen-increment=10 --dpi-desync-udplen-pattern=0xDEADBEEF --dpi-desync-fake-quic=“%BIN%quic_initial_www_google_com.bin” --new ^
–filter-udp=50000-50099 --dpi-desync=fake --dpi-desync-any-protocol --dpi-desync-cutoff=d3 --dpi-desync-repeats=6 --dpi-desync-fake-quic=“%BIN%quic_initial_www_google_com.bin” --new ^
–filter-tcp=443 --hostlist=“%~dp0list-discord.txt” --dpi-desync=fake,split --dpi-desync-autottl=2 --dpi-desync-repeats=6 --dpi-desync-fooling=badseq --dpi-desync-fake-tls=“%BIN%tls_clienthello_www_google_com.bin” --new ^
–filter-udp=443 --hostlist=“%~dp0list-general.txt” --dpi-desync=fake --dpi-desync-repeats=6 --dpi-desync-udplen-increment=10 --dpi-desync-udplen-pattern=0xDEADBEEF --dpi-desync-fake-quic=“%BIN%quic_initial_www_google_com.bin” --new ^
–filter-tcp=80 --hostlist=“%~dp0list-general.txt” --dpi-desync=fake,split2 --dpi-desync-autottl=2 --dpi-desync-fooling=md5sig --new ^
–filter-tcp=443 --hostlist-auto=“%STRAT%hostlist-auto.txt” --hostlist=“%~dp0list-general.txt” --dpi-desync=fake,split --dpi-desync-autottl=2 --dpi-desync-repeats=6 --dpi-desync-fooling=badseq --dpi-desync-fake-tls=“%BIN%tls_clienthello_www_google_com.bin”

Скрипт выбирает несколько стратегий, чтобы заработало как можно большее число сайтов (используются первые заработавшие, по хорошему, нужно делать приоритет одних над другими). Список стратегий брал из топика GoodCheck - блокчек-скрипт для GoodbyeDPI, Zapret, ByeDPI. Отдельная благодарность GitHub - Flowseal/zapret-discord-youtube (фикс youtube и discord взят оттуда).

А есть ли какие-то отличия от гудчека? Доступность сайта проверяется curl-ом?

Нет, через модуль requests, в детали не вникал, использует ли python http3 в таком случае или нет, но заработало и так.

Только разве что генерация конфигов на основе лога, ибо мне надоело вручную подбирать их (а тут еще выяснилось, что некоторые сайты перестают работать на одних стратегиях но работают на других).
Пока тестирую насколько вообще долго проработают сгенеренные таким образом конфиги (на моей выборке заработало 43/57 доменов, остальные работают только с wssize 1:6, который, как я понял, не поддерживает фильтрацию по доменам).

Интересно. А есть гайд, как запустить ваш скрипт на windows?

Пардоньте, этот модуль нужно ставить вручную, я почему-то всегда думал, что он входил в стандартную поставку python и даже в readme ничего не написал:
Ставить его так:
python -m pip install requests

Но сейчас это уже не нужно - оказалось, что requests не подходит для задач, где нужно тестировать много сайтов по много раз, я перешел на aiohttp, он должен быть в стандартной поставке python 3.x.

В остальном - скрипт просто запускать с коммандной строки в режиме админа (python blockcheck.py --tool=zapret), python должен быть в переменной окружения path.

Спасибо, попробую

Прикольная штука. На выходе получился рабочий cmd.
Но вот ютуб он мне не разблокировал. Хотя справедливости ради, то та же история и с preset_russia.cmd и с конфигом от KDS из YTDisBystro. Хотя без проблем работает spoofdpi.
И gdpi на очень простых настройках, даже без фейков) Думаю, это проблема списка статегий. В них не все случаи учтены. Из пожеланий - если возможно , то вызывать parse_log.py из основного скрипта и в конце писать путь к готовому cmd.

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

Наверно стоило в simple пресет выбрать другие настройки. Но я не знаю, какие сейчас работают, например, с youtube, сам перешел на zapret, когда не смог завести youtube c goodbyedpi.

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

Я пытаюсь разобраться, но это не так просто. Вот к примеру, дома и на работе один и тот же провайдер, но одни и те же конфиги работают хуже дома, видимо настройки на тех коробках другие. Если я правильно понял, подвох может быть в --dpi-desync-ttl и --dpi-desync-autottl?

На разных провайдерах разные настройки это нормально.
Но вот если для разных сайтов на одном провайдере разные настройки, то их как правило можно обьединить, поняв суть различий и найдя общий рабочий вариант.
Сколько ни настраивал где-либо, всегда можно было найти общую стратегию. И поэтому не надо было до недавних порт никаких --new
Они были сделаны только после того, как некоторые ресурсы стали блочить действительно особым образом.
Что вообще может отличаться для этих сотен тысяч блоченных доменов ? Думаете их будут каждый под микроскопом разглядывать и блочить ? Сомнительно.
Различаться могут трейсы. То есть пути, по которым идут пакеты. На них может стоять разный DPI.
Вариативность путей сильно зависит от провайдера. Как ASки подключены.
Бывает балансировка. Случайный выбор путей. Но так или иначе, вариантов путей не может быть много. Обычно они хорошо светятся по блокчеку. От балансировки помогает несколько попыток. И это именно та причина, почему я оставляю это средство как исследовалку, а не генератор китайских заклинаний, волшебно что-то открывающих.
Увидел общую картину, понял что работает, понял как это пробивать, написал общий вариант.

Если же бездумно копировать что-то одно и делать хостлист на каждый домен, можно в этом утонуть. И для каждого нового опять будете мучаться полчаса, прогоняя чекер

Спасибо за разъяснение, видимо придется глубже копнуть, чтобы самому научиться делать общий вариант для списка сайтов.