Как тестировать сервера googlevideo?

Подождем ответа от автора запрета Zapret: обсуждение - #886 by TesterTi

Пейлоад должен быть в формате файла .bin
Прикрутить к конфигу его можно с помощью параметра --dpi-desync-fake-tls=<filename> где указать этот самый *.bin.
Например --dpi-desync-fake-tls=tls_clienthello_gosuslugi_ru.bin
Файл класть в ту же папку, где лежит winws.exe

Если хочется длинную строку, как в GDPI то просто в эту же команду вместо имени файла вставляем строку, добавив спереди 0x
--dpi-desync-fake-tls=0x160301FFFF01FFFFFF0303594F5552204144564552544953454D454E542048455245202D202431302F6D6F000000000009000000050003000000

Тут вопрос так понимаю, был именно про блокчек, как туда добавить, т.е. при поиске стратегий.

Блин, действительно. Почему-то блокчек прочел как запрет :roll_eyes: Там фейк есть, но из нескольких нулей
А вообще - в блокчеке и так есть куча фейков (целая папка blockcheck\zapret\files\fake) так что вряд ли туда что-то надо дополнительно прикручивать.
Но можно положить свой bin в эту папку и блокчек его подхватит при проверке, если я правильно понял строчку
pktws_curl_test_update_vary $1 $2 $3 $desync --dpi-desync-fake-syndata="$ZAPRET_BASE/files/fake/$s" $e && [ "$SCANLEVEL" = quick ] && return
в баше

А я так понимаю, что подхватит, только если самому вписать. Ну исходя из того, что bolvan написал. Но наберемся терпения и дождемся его уточнения)

К блокчеку - хз, автора спрашивать надо.

Я сам с таким никогда не сталкивался. Можете сказать что у вас за стратегия?

Может ли эта проблема быть следствием популяризовавшейся нынче --fake-gen 13 и выше? Возможно, с такой стратегией, тут не столько “маскировка” трафика, сколько заваливание ТСПУ потоком мусора, пока он не сглючит и не пропустит? Отсюда и нестабильность работы?

Но если у вас более “цивильная” стратегия, то хз чем это может быть вызвано.

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

Спойлер
::by Ori
@echo off
title Connection and Bandwidth Test

for /F "tokens=1,2 delims= " %%i in ('curl -V') do (if "%%i"=="curl" set version=%%j)
for /F "tokens=1,2 delims=." %%i in ("%version%") do (set MajorVersion=%%i && set MinorVersion=%%j)
if %MajorVersion% LSS 8 (goto OUTDATED)
if %MinorVersion% LSS 10 (goto OUTDATED)

set "connect_to_url=speedtest.selectel.ru"
set volume_to_transfer=10
set attempts=10

set /A time_to_transfer=%volume_to_transfer%/2

:USERINPUT
cls
echo.
set /P url="Input URL to test: "
if not defined url (goto USERINPUT)

set "url=%url:https://=%"
set "url=%url:http://=%"
for /F "tokens=1 delims=/" %%n in ("%url%") do set url=%%n
set "url=https://%url%"

cls

echo.
echo ^> Testing connectivity with %url%
echo.
curl -sSo NUL -m 2 -w "\nRemote IP: %%{remote_ip}\nRedirect URL: %%{redirect_url}\n\nHTTP version: %%{http_version}\n\nTime - DNS Lookup:\t%%{time_namelookup}\nTime - Connection:\t%%{time_connect}\nTime - Handshake:\t%%{time_appconnect}\n\nTime - Total:\t\t%%{time_total}\n\nBytes received in header: %%{size_header}\n\n" %url%
if %ERRORLEVEL%==0 (echo Test passed) else (echo Test failed)
echo.

echo ------------------------------------------
echo.
echo ^> Testing QUIC connectivity with %url%
echo.
curl -sSo NUL -m 2 --http3-only -w "\nRemote IP: %%{remote_ip}\nRedirect URL: %%{redirect_url}\n\nHTTP version: %%{http_version}\n\nTime - DNS Lookup:\t%%{time_namelookup}\nTime - Connection:\t%%{time_connect}\nTime - Handshake:\t%%{time_appconnect}\n\nTime - Total:\t\t%%{time_total}\n\nBytes received in header: %%{size_header}\n\n" %url%
if %ERRORLEVEL%==0 (echo Test passed) else (if %ERRORLEVEL%==95 (echo Test passed) else (echo Test failed))
echo.

echo ------------------------------------------
echo.
echo ^> Testing channel bandwidth using %connect_to_url% and SNI of %url%; volume to transfer: %volume_to_transfer%MB
echo.
set speed=0
for /F %%i in ('curl -ko NUL -m %time_to_transfer% --connect-to ::%connect_to_url% %url%/%volume_to_transfer%MB -w "%%{speed_download}\n\n"') do set speed=%%i
set /A speed=%speed%/1024
echo.
echo Average channel bandwidth estimated by curl: %speed%KB/s
set speed=
echo.

echo ------------------------------------------
echo.
echo ^> Testing connection stability with %url%, %attempts% attempts
echo.
set successes=0
set counter=%attempts%
:LOOP
for /F %%g in ('curl -so NUL -m 1 %url% -w "%%{response_code}\n"') do set code=%%g
echo Response code: %code%
if not %code%==000 (set /A successes=%successes%+1)
set /A counter=%counter%-1
if not %counter%==0 (goto LOOP)
echo.
echo Succesful connections: %successes% out of %attempts%
set successes=
set counter=
echo.

echo ------------------------------------------
echo.
echo ^> Testing QUIC connection stability with %url%, %attempts% attempts
echo.
set successes=0
set counter=%attempts%
:LOOP_QUIC
for /F %%g in ('curl -so NUL --http3-only -m 1 %url% -w "%%{response_code}\n"') do set code=%%g
echo Response code: %code%
if not %code%==000 (set /A successes=%successes%+1)
set /A counter=%counter%-1
if not %counter%==0 (goto LOOP_QUIC)
echo.
echo Succesful connections: %successes% out of %attempts%
set successes=
set counter=
echo.

echo ------------------------------------------
echo.
echo ^> Testing connection stability with %url%, 10 attempts in parallel
echo.
curl -sSZm 3 --parallel-immediate --parallel-max 10 %url% %url% %url% %url% %url% %url% %url% %url% %url% %url% > NUL
echo.
if %ERRORLEVEL%==0 (echo Test passed) else (echo Test failed)
echo.

echo ------------------------------------------
echo.
echo ^> Testing QUIC connection stability with %url%, 10 attempts in parallel
echo.
curl -sSZm 3 --http3-only --parallel-immediate --parallel-max 10 %url% %url% %url% %url% %url% %url% %url% %url% %url% %url% > NUL
echo.
if %ERRORLEVEL%==0 (echo Test passed) else (if %ERRORLEVEL%==95 (echo Test passed) else (echo Test failed))
echo.

echo ------------------------------------------
echo.
set url=
choice /C YN /M "Another test?"
if %ERRORLEVEL%==1 (goto USERINPUT)

:EOF
set version=
set MajorVersion=
set MinorVersion=
set connect_to_url=
set volume_to_transfer=
set time_to_transfer=
set attempts=
exit /b

:OUTDATED
set version=
set MajorVersion=
set MinorVersion=
echo.
echo Curl outdated.
echo Obtain actual version at https://curl.se/
echo.
echo Press any button to exit...
pause>NUL
exit /b

Обновил скрипт еще раз, добавил тесты для quic + более очевидный вывод курла.
И ещё раз. Теперь ситуации когда соединение повисает после хэндшейка видны по кол-ву полученных байт.

Я тут, как мамкин ЛОХализатор, немного подсуетился ))
ConnTest.cmd (2,4 КБ)

И что-то виндовый (Windows 11) курл плохо подходит, надо кидать в папку со скачанным.

Блин, с виндоусовским я не пробовал, ща посмотрю в чем там проблема.

Не, виндоусовский это параша. Я даже не буду думать как это починить. Можно попробовать проверку версии прикрутить, но мне впадлу.

Testing QUIC connectivity with https://rr1---sn-ov8vuxaxjvh-v8cs.googlevideo.com

curl: option --http3-only: the installed libcurl version doesn't support this

Нас тут таких много наверно, кто под виндой сидит).
Как обновить встроенный в винду curl тоже не ясно
Нужно наверно отдельную тему создать для “нубских вопросов”)

Добавил проверку версии курла. В качестве минимума поставил 8.10.

Ух ты, круто!

Обновил curl, теперь заработало

> Testing QUIC connectivity with https://rr8---sn-ov8vuxaxjvh-v8ce.googlevideo.com

curl: (95) HTTP/3 stream 0 reset by server
Lookup time:    0.003132
Connect time:   0.003644
AppCon time:    0.003644
Redirect time:  0.000000
PreXfer time:   0.013022
StartXfer time: 0.014052

Total time:     0.014353

Теперь надо пэйлоад в конфиг дописать если я правильно понимаю
NFQWS_OPT_DESYNC="--dpi-desync=fake --dpi-desync-ttl=4 --dpi-desync-fake-tls=tls_clienthello_gosuslugi_ru.bin"
Эта рабочая конструкция? Путь до фейков нужно полностью прописывать или так оставить?

У вас на роутере запрет стоит что ли?

zapret на роутере, но блокчек использую из под винды

Ясно. Насколько понимаю, путь нужен полный, либо в той же папке лежать фейк.

Про фейк вам уже выше сказали, но лучше использовать фейк от гугла, а не от госуслуг.
Ещё у меня quic работает только с добавлением --dpi-desync-repeats, но у вас, видимо, и так ок.

Скрипт я там ещё немного обновил, btw. Вообще, надо туда, наверное, еще тестов квика напихать побольше, но потом уже.

А у меня quic так и продолжает отваливаться через какое-то время. Сначала всё идёт нормально, но в конечном итоге снова переходит на h/1.1, даже с вашим конфигом. Иногда просто само по себе слетает с h/3 до h/1.1, иногда после ошибки, иногда после перезагрузки страницы. Хотя видео конечно и так работают, а это самое главное.

1

Нашел более менее рабочий способ фильтровать неработающие сервера. Меняем в файле blockcheck.sh 2 секунды на 0.5
CURL_MAX_TIME=${CURL_MAX_TIME:-0.5}
И ставим количество тестов 5 или больше. Большинство неработающих стратегий отваливаются уже на тестировании. Плюс тестирование идет значительно быстрее.

Ну фиг знает. Попробуйте может свой собственный фейк записать, прям со своего браузера. Может лучше будет. Или наоброт мусорный мини-фейк использовать. У меня от такая хрень работала, 144 байта. С 2 повторами, или с 11.
quic_test_FF.bin (144 байта)

Я вот тут подумал, если ли способ вычислять ближайшие ggc сервера? То есть не через бровзер, а через какой-нибудь api, к примеру.