ето странно, ну ладно возможно так дефолтная настройка работает, лишь бы в about:networking#dns trr было true
А в запрете как-то можно указать редирект на нужного поставщика ДНС, на подобии такого в GDPI?
–dns-addr 77.88.8.8 --dns-port 1253 --dnsv6-addr 2a02:6b8::feed:0ff --dnsv6-port 1253
Чтобы не все запросы через них пускать, если вдруг медленными будут.
Честно говоря не знаю, надо смотреть в ридми. Если что у меня твиттер работает со всеми картинками с doh https://dns.cloudflare.com/dns-query и preset_russia.cmd . Довольно шустро. Причем это же более универсально, чем ip к каждому адресу подбирать. Тут и рутрекер без обхода открывается, и нельзяграмм и многое др
Альтернативные айпишники от гугл.днс можно еще через командную строку искать. Тут пишем какой-нибудь рандомный айпи:
curl "https://dns.google/resolve?name=x.com&type=A&edns_client_subnet=150.150.100.100"
В зависимости от скормленного айпи ответ может быть разным.
В теории можно написать скрипт. Пингуем гугл другой страны (например, google.nl). Берем айпи. Подставляем его в ссылку выше. Парсим ответ. Возможно, получаем альтернативный айпи для искомого сайта (если он есть).
Может быть позже напишу.
Написал.
Скрипт для поиска альтернативных айпи для любого сайта. Использует гугловский днс, отправляя запрос с кастомным сабнетом. Сабнет получается из списка заранее прописанных айпишников, либо пингуя заранее прописанные домены. Список доменов надо подправить, чтобы там были сайты из разных стран.
Принимает переменные среды: verbose (с любым значением) для наглядного отображения работы; и proxy в стандартном формате (типа proxy=socks5://127.0.0.1:9150
).
Прокси добавил, т.к. боюсь, что сотню днс запросов за 10 секунд днс гугла может понять неправильно.
Скрипт текстом:
Спойлер
::by Ori
@echo off
chcp 65001
title IP finder
cls
::Setting up proxy or taking it from env if needed
rem set "proxy=socks5h://127.0.0.1:8086"
if defined proxy (
set "proxy= --proxy %proxy%"
)
::Enabling verbose mode or taking it from env; any value is accepted
if not defined verbose (
set verbose=
)
SetLocal EnableDelayedExpansion
::Lists of random domains from all around
rem set "domainsList=google.us google.nl google.pl"
rem set "ipList=50.50.50.50 100.100.100.100 150.150.150.150"
::Forming IP list artificially
for /L %%i in (10,10,250) do (
for /L %%j in (10,20,250) do (
set "ipList=!ipList!%%i.%%j.128.128 "
)
)
set "ipList=!ipList:~0,-1!"
::Converting lists into arrays
set domainsArrayLength=-1
for %%i in (%domainsList%) do (
set /A domainsArrayLength+=1
set domainsArray[!domainsArrayLength!]=%%i
)
set domainsEndsHere=!domainsArrayLength!
for %%i in (%ipList%) do (
set /A domainsArrayLength+=1
set domainsArray[!domainsArrayLength!]=%%i
)
:INPUTURL
cls
if defined verbose (echo Using in verbose mode)
if defined proxy (echo Using with proxy)
echo.
::User input
set /P site="Input URL to check: "
if "%site%"=="" (goto INPUTURL)
echo.
if not defined verbose (
echo It may take some time...
echo.
)
::Main routine
set successes=-1
for /L %%i in (0,1,%domainsArrayLength%) do (
::Pinging site to find an IP for subnet and parsing result
title Progress: %%i out of %domainsArrayLength%
set "subnetIP="
if %%i LEQ !domainsEndsHere! (
for /F "tokens=1,3" %%j in ('ping -n 1 -w 2000 !domainsArray[%%i]!') do (
if "%%j"=="Reply" (
set "subnetIP=%%k"
set subnetIP=!subnetIP:~0,-1!
)
)
) else (
set "subnetIP=!domainsArray[%%i]!"
)
if defined subnetIP (
::Resolving DNS of a user-defined site while using custom subnet
if defined verbose (echo Resolving DNS with subnet !subnetIP! ^(!domainsArray[%%i]!^))
set response=
for /F "tokens=4* delims=[]" %%j in ('curl!proxy! -skm 1 "https://dns.google/resolve?name=%site%&type=A&edns_client_subnet=!subnetIP!"') do (set response=%%j)
::Some other DNS resolvers? This one kinda slow, but gives additional results
for /F "tokens=4* delims=[]" %%j in ('curl!proxy! -skm 1 "https://doh.li/dns-query?name=%site%&type=A&edns_client_subnet=!subnetIP!"') do (set response=!response!,DOHLI,%%j)
if "!successes!"=="-1" (
for /F "tokens=4* delims=[]" %%j in ('curl!proxy! -skm 1 -H "accept: application/dns-json" "https://1.1.1.1/dns-query?name=%site%&type=A"') do (set response=!response!,CLOUDFLARE,%%j)
for /F "tokens=4* delims=[]" %%j in ('curl!proxy! -skm 1 -H "accept: application/dns-json" "https://dns.nextdns.io/dns-query?name=%site%&type=A"') do (set response=!response!,NEXTDNS,%%j)
for /F "tokens=4* delims=[]" %%j in ('curl!proxy! -skm 1 -H "accept: application/dns-json" "https://dns.adguard-dns.com/resolve?name=%site%&type=A"') do (set response=!response!,ADGUARD,%%j)
)
if defined response (
if defined verbose (echo Response from DNS: !response!)
set response=!response:{= !
set response=!response:}= !
) else (
if defined verbose (echo No response from DNS)
)
::Parsing response
for %%j in (!response!) do (
rem echo %%j
for /F "tokens=1,2 delims=:" %%k in ("%%j") do (
if %%k=="data" (
::Checking if valid IP
set "ipCandidate=%%~l"
set "ipCandidate=!ipCandidate:~-1!"
set valid=
for /L %%v in (0,1,9) do (
if "!ipCandidate!"=="%%v" (set valid=1)
)
if defined valid (
::Checking for duplicates and adding new ones in the list
if defined verbose (echo IP found: %%~l Checking for duplicates...)
set duplicates=
for /L %%z in (0,1,!successes!) do (
if "%%~l"=="!successesArray[%%z]!" (
if defined verbose (echo Duplicate found^^!)
set duplicates=1
)
)
if not defined duplicates (
if defined verbose (echo Adding to list...)
set /A successes+=1
set successesArray[!successes!]=%%~l
)
)
)
)
)
) else (
if defined verbose (echo Can't ping !domainsArray[%%i]! for subnet, skipping...)
)
if defined verbose (echo.)
)
title Completed^^!
::Showcasing result
echo List of IP found:
for /L %%i in (0,1,%successes%) do (
echo !successesArray[%%i]!
)
EndLocal
echo.
echo That's all. Press any button to exit...
pause>NUL
title %comspec%
exit /b
Файлом:
IPfinder.cmd (4,3 КБ)
update: искусственная генерация айпи листа для запросов
update: прикрутил днс от клаудфлейр в добавку к гугло.днс
update: добавил ещё несколько днс. Скорость упала, но кол-во результатов выросло. Пытался прикрутить quad9, т.к. тоже есть поддержка edns, но он вообще отказывается работать через курл.
Респект
Извини, а это нормально out of 324? Что то много и ждать очень долго, у первой версии было 77. Чувствую себя ддосером))
Круть! А можно утащить идею с doh?) А то у меня совсем простенький батник IPChecker.bat (1,7 КБ) , который ищет системный ip через пинг. Потом проверяет курлом - заблокирован или нет? Если да - ищет рабочий ip через nslookup. И снова проверяет его курлом. Идея нагло стырена из блокчека bolvan-а)
Я хз, откровенно говоря
Думаешь, стоит уменьшить?
Новая версия, кста.
Спойлер
::by Ori
@echo off
chcp 65001
title IP finder
cls
::Setting up proxy or taking it from env if needed
rem set "proxy=socks5h://127.0.0.1:8086"
if defined proxy (
set "proxy= --proxy %proxy%"
)
::Enabling verbose mode or taking it from env; any value is accepted
if not defined verbose (
set verbose=
)
SetLocal EnableDelayedExpansion
::Lists of random domains from all around
rem set "domainsList=google.us google.nl google.pl"
rem set "ipList=50.50.50.50 100.100.100.100 150.150.150.150"
::Forming IP list artificially
for /L %%i in (10,10,250) do (
for /L %%j in (10,20,250) do (
set "ipList=!ipList!%%i.%%j.128.128 "
)
)
set "ipList=!ipList:~0,-1!"
::Converting lists into arrays
set domainsArrayLength=-1
for %%i in (%domainsList%) do (
set /A domainsArrayLength+=1
set domainsArray[!domainsArrayLength!]=%%i
)
set domainsEndsHere=!domainsArrayLength!
for %%i in (%ipList%) do (
set /A domainsArrayLength+=1
set domainsArray[!domainsArrayLength!]=%%i
)
:INPUTURL
cls
if defined verbose (echo Using in verbose mode)
if defined proxy (echo Using with proxy)
echo.
::User input
set /P website="Input URL to check: "
if "%website%"=="" (goto INPUTURL)
echo.
::Parsing user input
set "website=!website:https://=!"
set "website=!website:http://=!"
for /F "tokens=1 delims=/" %%i in ("!website!") do (set "website=%%i")
if not defined verbose (
echo It may take some time...
echo.
)
::Main routine
set successes=-1
for /L %%i in (0,1,%domainsArrayLength%) do (
::Pinging website to find an IP for subnet and parsing result
title Progress: %%i out of %domainsArrayLength%
set "subnetIP="
if %%i LEQ !domainsEndsHere! (
for /F "tokens=1,3" %%j in ('ping -n 1 -w 2000 !domainsArray[%%i]!') do (
if "%%j"=="Reply" (
set "subnetIP=%%k"
set subnetIP=!subnetIP:~0,-1!
)
)
) else (
set "subnetIP=!domainsArray[%%i]!"
)
if defined subnetIP (
::Resolving DNS of a user-defined website while using custom subnet
if defined verbose (echo Resolving DNS with subnet !subnetIP! ^(!domainsArray[%%i]!^))
set response=
for /F "tokens=4* delims=[]" %%j in ('curl!proxy! -skm 1 "https://dns.google/resolve?name=%website%&type=A&edns_client_subnet=!subnetIP!"') do (set response=%%j)
::Some other DNS resolvers? This one kinda slow, but gives additional results
for /F "tokens=4* delims=[]" %%j in ('curl!proxy! -skm 1 "https://doh.li/dns-query?name=%website%&type=A&edns_client_subnet=!subnetIP!"') do (set response=!response!,DOHLI,%%j)
if "!successes!"=="-1" (
for /F "tokens=4* delims=[]" %%j in ('curl!proxy! -skm 1 -H "accept: application/dns-json" "https://1.1.1.1/dns-query?name=%website%&type=A"') do (set response=!response!,CLOUDFLARE,%%j)
for /F "tokens=4* delims=[]" %%j in ('curl!proxy! -skm 1 -H "accept: application/dns-json" "https://dns.nextdns.io/dns-query?name=%website%&type=A"') do (set response=!response!,NEXTDNS,%%j)
for /F "tokens=4* delims=[]" %%j in ('curl!proxy! -skm 1 -H "accept: application/dns-json" "https://dns.adguard-dns.com/resolve?name=%website%&type=A"') do (set response=!response!,ADGUARD,%%j)
)
if defined response (
if defined verbose (echo Response from DNS: !response!)
set response=!response:{= !
set response=!response:}= !
) else (
if defined verbose (echo No response from DNS)
)
::Parsing response
for %%j in (!response!) do (
rem echo %%j
for /F "tokens=1,2 delims=:" %%k in ("%%j") do (
if %%k=="data" (
::Checking if valid IP
set "ipCandidate=%%~l"
set "ipCandidate=!ipCandidate:~-1!"
set valid=
for /L %%v in (0,1,9) do (
if "!ipCandidate!"=="%%v" (set valid=1)
)
if defined valid (
::Checking for duplicates and adding new ones in the list
if defined verbose (echo IP found: %%~l Checking for duplicates...)
set duplicates=
for /L %%z in (0,1,!successes!) do (
if "%%~l"=="!successesArray[%%z]!" (
if defined verbose (echo Duplicate found^^!)
set duplicates=1
)
)
if not defined duplicates (
if defined verbose (echo Adding to list...)
set /A successes+=1
set successesArray[!successes!]=%%~l
)
)
)
)
)
) else (
if defined verbose (echo Can't ping !domainsArray[%%i]! for subnet, skipping...)
)
if defined verbose (echo.)
)
title Completed^^!
::Showcasing result
echo List of IP found:
for /L %%i in (0,1,%successes%) do (
echo !successesArray[%%i]!
)
echo.
choice /C 12 /M "That's all. Press 1 to exit or press 2 to save IP list to a file"
if %ERRORLEVEL%==2 (
PUSHD "%~dp0"
echo !website!> "!website:.=_!.txt"
echo.>> "!website:.=_!.txt"
for /L %%i in (0,1,%successes%) do (
echo !successesArray[%%i]!>> "!website:.=_!.txt"
)
echo.
echo Saved to "%~dp0!website:.=_!.txt"
POPD
echo.
echo Press any button to exit...
pause>NUL
)
echo.
EndLocal
title %comspec%
exit /b
Файлом:
IPfinder.cmd (4,9 КБ)
А можно утащить идею с doh?)
@TesterTi утаскивай
Update: 3 часа ночи, переписал скрипт (снова).
- Теперь запросы идут параллельно,
чтобы было эффективнее ддоситьчтобы было быстрее. Кол-во потоков можно настраивать. - Добавил вывод листа в файл.
- Добавил несколько “защит от дураков”, чтобы сложнее было сломать скрипт (фильтр протокола, проверка соединения, поддержка кастрированного виндоусовского курла).
- Добавил extra verbose режим для еще лучшего отображения процесса работы.
- И режим emulate, чтобы не ддосить резолверы понапрасну в процессе тестов.
- Выкинул режим с доменами, т.к. не вижу нужды.
Скрипт текстом:
Спойлер
::by Ori
@echo off
chcp 65001
title IP finder
cls
SetLocal EnableDelayedExpansion
::===================================================================================
::Setting up proxy, empty/undefied for no-proxy
rem set "proxy=socks5h://127.0.0.1:8086"
::Verbose mode; empty/undefied for quiet, 2 for extra verbose, any other value for standart verbose
set verbose=
::Emulation mode, without making actual requests; empty/undefied to turn off
set emulate=
::Number of threads, should be >0
set threads=20
::Curl parameters
set params=-s -k -m 2 -H "accept: application/dns-json"
::===================================================================================
::===================================================================================
::Setting up parameter for curl
if defined verbose (
set "params=!params! -S"
)
if defined proxy (
set "params=!params! --proxy !proxy!"
)
if !threads! GTR 1 (
set "params=!params! -Z --parallel-immediate --parallel-max !threads!"
)
::Setting up resolvers
set "requestGoogleDNS=https://dns.google/resolve?name=website&type=A&edns_client_subnet="
set "requestDohLi=https://doh.li/dns-query?name=website&type=A&edns_client_subnet="
set "requestCloudflare=https://1.1.1.1/dns-query?name=website&type=A"
set "requestNextDNS=https://dns.nextdns.io/dns-query?name=website&type=A"
set "requestAdguardDNS=https://dns.adguard-dns.com/resolve?name=website&type=A"
::Forming IP array artificially
set ipArrayLength=0
for /L %%i in (10,10,250) do (
for /L %%j in (10,20,250) do (
set /A ipArrayLength+=1
set "ipArray[!ipArrayLength!]=%%i.%%j.0.0/16"
)
)
::===================================================================================
::===================================================================================
::Checking if connected to web, skipping in emulate mode
if not defined emulate (
ping -n 1 -w 2000 "w3.org">NUL
if not "!ERRORLEVEL!"=="0" (
echo.
echo Can't connect to web, exiting...
pause>NUL
goto EOF
)
)
:INPUTURL
cls
::Showcaing some stuff
if defined verbose (
if "!verbose!"=="2" (
echo Using in extra verbose mode
) else (
echo Using in verbose mode
)
)
if defined emulate (echo Using in emulation mode)
if defined proxy (echo Using with proxy)
if "!verbose!"=="2" (echo Parameters for curl: !params!)
if "!verbose!"=="2" (echo IP addresses for subnet: !ipArrayLength!)
echo.
::User input
set /P website="Input URL to check: "
if "!website!"=="" (goto INPUTURL)
echo.
::Parsing user input
set "website=!website:https://=!"
set "website=!website:http://=!"
for /F "tokens=1 delims=/" %%i in ("!website!") do (set "website=%%i")
if not defined verbose (
echo It may take some time...
echo.
)
::===================================================================================
::===================================================================================
::Main part
set successes=-1
set response=
::One-time request for resolvers without subnet
if not defined emulate (
::Here additional resolvers can be added
for /F "tokens=4* delims=[]" %%j in ('curl !params! "!requestCloudflare:website=%website%!"') do (set response=!response!CLOUDFLARE:%%j)
for /F "tokens=4* delims=[]" %%j in ('curl !params! "!requestNextDNS:website=%website%!"') do (set response=!response!NEXTDNS:%%j)
for /F "tokens=4* delims=[]" %%j in ('curl !params! "!requestAdguardDNS:website=%website%!"') do (set response=!response!ADGUARD:%%j)
) else (
set response=!response!EMULATED:{"data":"0.0.0.0"}
)
::Loop for DNS with subnets
for /L %%i in (1,!threads!,!ipArrayLength!) do (
title IP finder - Progress: %%i out of !ipArrayLength!
::Forming curl input for concurrent requests
set requestParallelGoogleDNS=
set requestParallelDohLi=
set /A "num=%%i+!threads!-1"
if "!verbose!"=="2" (
echo Processing elements %%i-!num!
echo.
)
for /L %%j in (%%i,1,!num!) do (
if %%j LEQ !ipArrayLength! (
::Here additional resolvers can be added
set requestParallelGoogleDNS=!requestParallelGoogleDNS! "!requestGoogleDNS:website=%website%!!ipArray[%%j]!"
set requestParallelDohLi=!requestParallelDohLi! "!requestDohLi:website=%website%!!ipArray[%%j]!"
)
)
if "!verbose!"=="2" (
echo Complete request for GoogleDNS: !params!!requestParallelGoogleDNS!
echo.
echo Complete request for Doh.Li: !params!!requestParallelDohLi!
echo.
)
::Making request
if not defined emulate (
::Here additional resolvers can be added
for /F "tokens=4* delims=[]" %%j in ('curl !params!!requestParallelGoogleDNS!') do (set response=!response!GOOGLEDNS:%%j)
::This one kinda slow, but gives some more results
for /F "tokens=4* delims=[]" %%j in ('curl !params!!requestParallelDohLi!') do (set response=!response!DOH.LI:%%j)
)
::Parsing response
if defined response (
if defined verbose (echo Response from DNS: !response!)
set response=!response:{= !
set response=!response:}= !
for %%j in (!response!) do (
if "!verbose!"=="2" (echo %%j)
for /F "tokens=1,2 delims=:" %%k in ("%%j") do (
if %%k=="data" (
::Checking if valid IP
set "ipCandidate=%%~l"
set "ipCandidate=!ipCandidate:~-1!"
set valid=
for /L %%v in (0,1,9) do (
if "!ipCandidate!"=="%%v" (set valid=1)
)
if defined valid (
::Checking for duplicates and adding new ones to the list
if defined verbose (echo IP found: %%~l Checking for duplicates...)
set duplicates=
for /L %%z in (0,1,!successes!) do (
if "%%~l"=="!successesArray[%%z]!" (
if defined verbose (echo Duplicate found^^!)
set duplicates=1
)
)
if not defined duplicates (
if defined verbose (echo Adding to list...)
set /A successes+=1
set successesArray[!successes!]=%%~l
)
)
)
)
)
set response=
) else (
if defined verbose (echo No response from DNS)
)
if defined verbose (echo -------------)
)
title IP finder - Completed^^!
::===================================================================================
::===================================================================================
::Showcasing result
echo List of IP found:
echo.
for /L %%i in (0,1,!successes!) do (
echo !successesArray[%%i]!
)
echo.
echo Press 1 to exit
echo Press 2 to save IP list to a file
choice /C 12
echo.
::Saving to file if asked
if !ERRORLEVEL!==2 (
PUSHD "%~dp0"
echo !website!> "!website:.=_!.txt"
echo.>> "!website:.=_!.txt"
for /L %%i in (0,1,!successes!) do (
echo !successesArray[%%i]!>> "!website:.=_!.txt"
)
echo Saved to "%~dp0!website:.=_!.txt"
POPD
echo.
echo Press any button to exit...
pause>NUL
)
::===================================================================================
:EOF
EndLocal
title %comspec%
exit /b
Файлом:
IPfinder.cmd (6,8 КБ)
Вот это уже быстро и красиво) Спасибо за труды
А какова задача, цель данного скрипта? Это некий аналог блокчека?
Нет. Это скрипт для поиска альтернативных айпишников для любого сайта (если они есть). Использует механизм ecs, позволяющий получить айпишник в конкретной подсети.
А то есть потом ip в хост надо добавить, или что потом делать с ip адресами?
Ну да. В основном польза только в случае айпи-блокировок. Ну или вон как у некоторых сломался tls v1.2, на том же твиттере. Можно попробовать поискать аналоги с tls v1.3 таким образом.
Все понял. То есть ваш скрипт поможет найти не заблокированный ip шник.
Типа того. Хм, возможно стоит прикрутить автоматическую проверку найденных айпи на работоспособность
Должно быть достаточно просто.
Было бы интересно вашей утилитой проверить ggc которые выдают ns binding aborted. Наверное она поможет в этом деле.
Не, у ggc вроде всегда только один айпи. Там толку нет альтернативы искать. Это скорее для всяких крупных заблоченных сайтов, типа инстаграмма.