Утилита dpi-ch: "всесторонний" dpi чекер общего назначения

Друзья, на связи hyperion_cs, автор web-чекера tcp 16-20, кой многим здесь известен.

Представляю вашему вниманию dpi-ch — “всесторонний” чекер общего назначения, который является попыткой собрать воедино всё что возможно по этой теме в виде кроссплатформенной tui/cli утилиты. Написано на golang и избавлено от проблем песочницы веб-браузеров. Доступны готовые сборки для Windows / macOS / Linux и скоро планируется для Android; либо сборка из исходников — код, естественно, открыт.

Есть, среди прочего, такой функционал:

  • Who am I?” — информация о вашем интернет-соединении; aka whoami checker;

  • Am I under the CIDR whitelist?” — проверка, ограничивает ли цензор соединения tcp/udp по ip-подсетям в формате “белого списка”; aka cidrwhitelist checker;

  • Comprehensive checks (включая проверку работоспособности и ограничений методом tcp 16-20); aka webhost checker:

    • Popular Web Services: проверка популярных веб-сервисов, таких как YouTube, Instagram, Discord, Telegram и другие;

    • Infrastructure Providers: проверка инфраструктурных провайдеров, таких как Cloudflare, Akamai, Hetzner, DigitalOcean и другие. Отличительной чертой чекера является автоматический подбор серверов для проверки.

  • DNS checker: проверяет, осуществляет ли цензор spoofing ответов от dns и/или hijacking dns серверов, блокируется ли DoH и т. д.; aka dns checker;

  • Современный tui (aka cli) с параллельными воркерами и неблокируемым ui;

  • Автоматическое обновление утилиты из релизов с github;

  • Экстремально гибкая настройка конфигурации, особенно для webhost checker.

* На самом деле, утилита была релизнута ещё в марте этого года, но на этом форуме публикуется впервые. В этом треде (или посредством issues) также готов ответить на ваши вопросы и предложения по улучшению работы/функционала;
** По своей задумке похоже на Runnin4ik/dpi-detector, который также является хорошим чекером. Так вышло, что разработка велась одновременно.

Ссылка на документацию утилиты dpi-ch (там же тезисно описаны запланированные фичи):

технически возможно делать проверку на определённом интерфейсе? По аналогии например с curl где можно задать проверку через имя интерфейса

curl --interface warp checkip.amazonaws.com

Да, есть техническая возможность вручную указать имя сетевого интерфейса или его ip для сетевых операций, и в целом это не очень сложно реализуется, хоть и с некоторыми нюасами. Только надо понять в разрезе чего возникает такая потребность: сразу на весь dpi-ch, или в разрезе какого-то конкретного (или всех по отдельности) подчекера, напр., webhost checker?

В первой итерации могу добавить такую опцию сразу на весь dpi-ch, путем указания имени/ip интерфейса в конфиге. Подойдет?

конечно

Запрошенная вами функциональность реализована в dpi-ch v0.5.0 (см. описание тамошнего PR или документацию, чтобы понять как использовать). Доступно указание как имени интерфейса, так и его ip адреса.

На MacOS работает отлично.

Почему она показывает красным почти все? То есть это с запретом и стратой которая пробивает блоки 16-20 етц, на чекере в вебе - зеленое все, ну кроме вултра, на аналогичном чекере вот так.

Проверил у себя некоторые узлы, которые вам попались. Без обхода:


С обходом (не zapret, через VPN):

Таким образом, аккуратно могу предположить, что почему-то ваша стратегия в zapret не повлияла существенно на сетевую работу dpi-ch. Возможно, это связано с тем, как чекер управляет SNI в разделе “Infrastructure Providers”, в связи с этим вопросы:

  1. Какие у вас результаты во вкладке “Popular Web Services” с zapret и без?
  2. Попробуйте в config.yaml на тест добавить что-то вроде (создав этот файл, если его нет, рядом с бинарником dpi-ch):
    checkers:
      webhost:
        infra:
        - name: DigitalOcean
          filter: subnet("206.189.236.249/32")
          sni: sistema.lavanderia60minutos.com.br
    
    Повлияет ли это на результаты теста во вкладке “Infrastructure Providers” (опять же, с zapret и без)?
  3. Можете ли в лс прислать свою стратегию для zapret? Попробую у себя потестировать.

Нравится отсутствие зависимостей от питонов, размер бы ещё раз в 10 поменьше и ipk на Owrt.

В целом, о сборке под OpenWrt можно подумать, если будет спрос. Сам сторонник маленького размера утилит и минимального кол-ва зависимостей, но в данном случае, даже если сильно постараться, будет сложно ужать больше чем до ~10mb, если считать вместе со вспомогательными файлами — всё-таки на борту довольно мощный локальный ip intelligence (автоматически обновляемый geoip, asn/isp данные и т.д.), который, в т.ч., позволяет выдать информацию о вашей сети даже в условиях “белых списков” по cidr, а также непосредственно участвует в механизме подбора узлов для тестирования.