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

А зачем? Всё равно же нельзя ютуб заставить тащить видео с какого-то конкретного сервера, даже если его адрес знаешь. В ytdlp тоже такого функционала нет.

Просто мысль.
Я там вчера ковырял старый скрипт блокчека от Валдика, пришел к выводу, что особого смысла в нем нет, там придется половину дописывать, по сути повторять блокчек запрета. В общем, еще один велосипед. Но было бы круто прикрутить к этому велосипеду чек ближайших к пользователю ggc, чтобы уже на основе их искать стратегию. Не все могут нажать f12 и посмотреть videoplayback, тем более найти в нем нужный адрес.

А у ютуба есть открытое api и документация по нему? Или у них закрытый код? Что-то мне подсказывает, что второе…

Там есть API, но оно для юзеринтерфейсов, типа как инвидоус. Большего там не получить.

Можно вытащить идентификатор кластера из https://redirector.googlevideo.com/report_mapping?di=no скриптом, потом найти айпишники rr1.идентификатор.googlevideo.com и тестить по айпи, подсовывая SNI googlevideo.com, чтобы коробка активизировалась. Но это даст только провайдерские кэши, а не все ближайшие.

Получится что-то типа curl https://googlevideo.com --connect-to ::айпишник

А в чем разница? :roll_eyes:

Вот это как раз то самое, что искал. Спасибо. Будем думать по поводу реализации. :upside_down_face:
По сути, нужны как раз провайдерские кеши, потому как труба в первую очередь ломится в них. Автоматизировать перебор дальше по сети нет смысла, их тысячи, там уже вручную.

Если курлить предложенным конфигом там ошибка SEC_E_WRONG_PRINCIPAL.
А вот на хухел реагирует, возвращает 301.
На ютуб вообще не курлится.

По сути любой ответ годен, кроме 403. А вот как чекать рабочее замедление? Наверное только так
curl -k -o NUL https://qwe.googlevideo.com/10MB --connect-to ::ip
И как-то смотреть на деградацию скорости. У меня, к примеру, по нулям сходу. Курл возвращает 35.
Собственно, вот и методика.

Это хороший метод, но не универсальный. К примеру, у меня за всеми новыми видео, которых еще нет в кеше у провайдера, гугл шлет на зарубежные ip (ну или наши, на 2 разных сайтах по этим ip были разные результаты). А их этим методом не вычислишь. Без них видео не играет. И для них нужны другие настройки, не как для ggc провайдера

Короче, переделал свой скрипт для курления, чтобы он автоматом тестил провайдерские сервера. Версия очень сырая + мне не нравится как он результаты выводит. Надо все переделать. Но работать вроде работает.

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

::Checking Curl version
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)

::Setting variables
set "connect_to_url=speedtest.selectel.ru"
set volume_to_transfer=10
set attempts=10

set /A time_to_transfer=%volume_to_transfer%/2

::Parsing claster codename
echo.
for /F "tokens=3 delims= " %%i in ('curl -sSm 2 "https://redirector.googlevideo.com/report_mapping?di=no"') do (set claster=%%i)
if not %ERRORLEVEL%==0 (echo Failed!)
echo ^> Claster codename: %claster%

::Testing loop
set ggcCounter=1
:GGCLOOP
::FAILLEVEL 0=allgreen;1=QUIC fail;2=total fail
set FAILLEVEL=0

::Forming URL
echo.
echo ------------------------------------------
echo.

set ggcURL=https://rr%ggcCounter%.%claster%.googlevideo.com
echo ^> Cache Server %ggcCounter%: %ggcURL%
set /A ggcCounter=%ggcCounter%+1

::Parsing IP address, not needed?
::for /F %%i in ('curl -sSkm 2 -o NUL -w "%%{remote_ip}" %ggcURL%') do (set ggcIP=%%i)
::echo ^> Cache Server IP: %ggcIP%

echo.
echo --------------------
echo.

echo ^> Testing connectivity...
echo.
curl -sSko NUL -m 2 -w "DNS_T: %%{time_namelookup} µs  - Connection_T: %%{time_connect} µs  - Handshake_T: %%{time_appconnect} µs  - Total_T: %%{time_total} µs  - Header: %%{size_header} bytes\n\n" %ggcURL%
if not %ERRORLEVEL%==0 (set FAILLEVEL=2)
if %FAILLEVEL%==2 ((echo Test failed) && (goto END))
echo Test passed

echo.
echo --------------------
echo.

echo ^> Testing QUIC connectivity...
echo.
curl -sSko NUL -m 2 --http3-only -w "DNS_T:%%{time_namelookup} µs - Connection_T: %%{time_connect} µs - Handshake_T: %%{time_appconnect} µs - Total_T: %%{time_total} µs - Header: %%{size_header} bytes\n\n" %ggcURL%
if %ERRORLEVEL%==0 (echo Test passed) else (if %ERRORLEVEL%==95 (echo Test passed) else ((set FAILLEVEL=1) && (echo Test failed)))

echo.
echo --------------------
echo.

echo ^> Testing channel bandwidth using %connect_to_url%, %volume_to_transfer%MB
echo.
set speed=0
for /F %%i in ('curl -sko NUL -m %time_to_transfer% --connect-to ::%connect_to_url% %ggcURL%/%volume_to_transfer%MB -w "%%{speed_download}"') do set speed=%%i
set /A speed=%speed%/1024
echo Average channel bandwidth estimated by curl: %speed%KB/s
set speed=

echo.
echo --------------------
echo.

echo ^> Testing connection stability, %attempts% attempts
echo.
set successes=0
set counter=%attempts%
:LOOP
for /F %%g in ('curl -sko NUL -m 1 %ggcURL% -w "%%{response_code}"') 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 Succesful connections: %successes% out of %attempts%
set successes=
set counter=

if %FAILLEVEL%==1 (goto SKIPQUIC)

echo.
echo --------------------
echo.

echo ^> Testing QUIC connection stability, %attempts% attempts
echo.
set successes=0
set counter=%attempts%
:LOOP_QUIC
for /F %%g in ('curl -sko NUL --http3-only -m 1 %ggcURL% -w "%%{response_code}"') 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 Succesful connections: %successes% out of %attempts%
set successes=
set counter=

:SKIPQUIC1

echo.
echo --------------------
echo.

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

if %FAILLEVEL%==1 (goto END)

echo.
echo --------------------
echo.

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

:END

echo.
echo --------------------
echo.

pause

goto GGCLOOP

: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

Скрипт надежный как швейцарские часы :upside_down_face:
image
Чисто для шарящих. Простой юзер пройдет мимо. :+1:

Не ну а че, в виндоусовской версии даже http3 нет.

Ну вот и я о том же.

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

Да вообще скрипт не отлажен.
image

Ну я и говорю сырой.

Сейчас выяснил интересную штуку. Если парсить блокчеком адрес rr1.имяпула.googlevideo.com, то методов обхода не будет. А вот если rr1.кодированнаябелиберда.googlevideo.com, тогда стратегия найдется. В общем, эти домены походу настроены на разные протоколы, пока не проверял.
Так что способ с получением зоны всё же не работает.
Когда-то давно я встречал где-то объяснение, как декодировать пул, а вот где - уже не помню.

ЗЫ. Вспомнил. И нашел.
Алгоритм моноалфавитной перестановки.

0123456789abcdefghijklmnopqrstuvwxyz - берем позицию
uzpkfa50vqlgb61wrmhc72xsnid83ytoje94 - берем значение на позиции из верхней строки

В обе стороны работает. Поэтому после получения из репорт-маппинга нужно преобразовать строку. То бишь у нас ссылки вида rr1.—sn-пул.googlevideo.com

Подробно у французов.

Ничего себе, круть!

У кого-нибудь получилось с помощью dpi вернуть работоспособность ютубу полностью, т.е. чтобы работал как обычно без малейших подтормазиваний при загрузке видео и перемотке? Напишите с какими настройками если такое получилось.

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