CLI-инструмент для тестирования DPI-блокировок: домены, TLS, TCP 16-20KB, DNS

Сейчас экспериментирую с другим алгоритмом проверки (отправка 64кб данных а не получение) и использование IP вместо доменов.

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

Версия 2.0 почти готова, надеюсь выпущу на выходных.

Будет новый алгоритм детекта tcp16 блокировок путем отправки GET запроса с 64кб header на IP разных AS. (Спасибо @0ka за идею).

Также разные фиксы, улучшение производительности и UI

Также постепенно буду превращать инструмент в мультитул:

  • Автоматический подбор белых SNI для каждой AS
  • Активация триггерной блокировки как отдельный пункт меню
  • (Возможно) проверка динамических блокировок
  • Проверка QUIC блокировок/доступности и ECH

Не знаю, войдет ли что-то из этого в след релиз.

К слову, сейчас еще ищу домен у которого один IPv4, при ресолве которого провайдеры выдают фейковый NXDOMAIN путем перехвата запроса к 8.8.8.8

Например как с youtube.com

результаты теста dpi_detector_v1_3 - на мобильном мегафоне в сибири(г. Абакан) без обходов. всё что не в белых списках - замедляется до 32kb\sec включая любой впн. может кому пригодится.

[/wrap]

Кросс-платформенный однострочник на питоне для теста сайтов или IP на TCP16-20 блокировку с возможность указать свой SNI:

python3 -c "import base64;exec(base64.b64decode('aW1wb3J0IHNvY2tldCBhcyBzLHNzbDtoPWlucHV0KCdUYXJnZXQ6Jyk7bj1pbnB1dCgnU05JOicpO3o9c3NsLmNyZWF0ZV9kZWZhdWx0X2NvbnRleHQoKTt6LmNoZWNrX2hvc3RuYW1lPTA7ei52ZXJpZnlfbW9kZT0wO3c9ei53cmFwX3NvY2tldChzLmNyZWF0ZV9jb25uZWN0aW9uKChoLDQ0MyksNSksc2VydmVyX2hvc3RuYW1lPW4pO3E9ZiJIRUFEIC8gSFRUUC8xLjFcclxuSG9zdDoge259XHJcbkNvbm5lY3Rpb246IGtlZXAtYWxpdmVcclxuWC1QOiB7J1gnKjQwMDB9XHJcblxyXG4iLmVuY29kZSgpO2k9MAp0cnk6CiBmb3IgaSBpbiByYW5nZSgxLDExKToKICB3LnNlbmRhbGwocSk7cj13LnJlY3YoNDA5NikKICBpZiBub3QgcjpicmVhawogIHByaW50KGYnXHIge2kqNH1LJyxlbmQ9JycsZmx1c2g9MSkKIHByaW50KCdcbicscls6MzBdKQpleGNlcHQgRXhjZXB0aW9uIGFzIGU6cHJpbnQoZidcbkRyb3AgYXQge2kqNH1LOicsdHlwZShlKS5fX25hbWVfXyk=').decode())"

Вывод:

Target:95.100.133.105
SNI:media.miele.com
 16K
Drop at 20K: TimeoutError

Что закодировано в base64:

import socket as s,ssl;h=input('Target:');n=input('SNI:');z=ssl.create_default_context();z.check_hostname=0;z.verify_mode=0;w=z.wrap_socket(s.create_connection((h,443),5),server_hostname=n);q=f"HEAD / HTTP/1.1\r\nHost: {n}\r\nConnection: keep-alive\r\nX-P: {'X'*4000}\r\n\r\n".encode();i=0
try:
 for i in range(1,11):
  w.sendall(q);r=w.recv(4096)
  if not r:break
  print(f'\r {i*4}K',end='',flush=1)
 print('\n',r[:30])
except Exception as e:print(f'\nDrop at {i*4}K:',type(e).__name__)

Релизнул dpi-detector v2.0.1

  • Новый тест «Подбор белых SNI для заблокированных ASN»
  • Новый алгоритм для TCP 16-20KB теста и количество целей увеличено до 87
  • Понижена версия python до 3.8 - теперь запускается на win7/8
  • Добавлен отдельный .exe билд для win7/8
  • Улучшена скорость всех проверок
  • И всякое другое. Подробнее в описании релиза

Не очень понятно, что происходит при выборе 4-го пункта. Экран начинает “плясать”, переписывая строки.
В файл, если выбран пункт с сохранением файла результатов, сваливается несколько мегабайт таблиц со сбитой рамкой. Как в этом ориентироваться? Смотреть самую последнюю таблицу с результатом? Выполняется тестирование довольно долго, нет никакой индикации, сколько ждать и т.д.

Там реалтайм обновление таблицы сделал, но видимо не у всех оно нормально отображается, да и и с логами проблема. Переделаю под какой-то другой формат.

Может, стоит сделать вывод в csv и отдельно короткий отчет с результатом?

Релизнул dpi-detector v2.1.0

  • Улучшена скорость DNS проверки, добавлены новые домены возвращающие фейк NXDOMAIN
  • Добавлены новые эндпоинты в TCP16 проверку. Теперь там 22 CDN/хостингов на 43 AS
  • Улучшена классификация ошибок
  • Улучение визуала и итоговой таблицы
    Подробнее в описании релиза

Отдельное вам спасибо за win7! Но на моей 7-ке почему-то ни в какую не работает 4-ый пункт. Просто бесконечно обновляется таблица, в файл ничего не пишется (он даже не создается). ЧЯДНТ?

Известно, будет исправлено в будущих релизах. Хотя насчет создания файла не уверен)
Он должен создаваться после завершения работы, а из-за пары AS очень долго перебираются SNI, т.к. для них подходящих нет. Наверно поэтому и не сохраняет в файл - выход раньше времени.

Аа, понятно, ок)

Учитывая на какие сайты он стучит это немного подстава была…:wink: А при загрузке внешнего config.py. выдает ошибку…Может взять более нейтральное по дефолту или предупреждать?

согласен, в зефире такая же проблема и автор отказался убирать

Поддержу @0ka @max_wtf

Не пользуйтесь левыми exe. Ставьте сами python, пакеты из pip и редактируйте .py конфиги как в линуксе.

Я тестировал на entware, не всё что нужно нашёл.

Временно убрана ссылка из 16кб блокировка
На win пока что можно использовать батник 16kbCheckV2.zip - добавлен подбор sni

C какими сайтами проблема?