From 22c76f3e4b8397f1106773d4c37b94e1eb785a6b Mon Sep 17 00:00:00 2001 From: DaTekShaman Date: Sun, 1 Mar 2026 14:08:27 +0300 Subject: [PATCH] Add DNSSEC interception test script --- scripts/dnssec-tesst.sh | 86 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 scripts/dnssec-tesst.sh diff --git a/scripts/dnssec-tesst.sh b/scripts/dnssec-tesst.sh new file mode 100644 index 0000000..971da8f --- /dev/null +++ b/scripts/dnssec-tesst.sh @@ -0,0 +1,86 @@ +#!/bin/bash + +# Целевой DNS-сервер для тестирования +RESOLVER="127.0.0.1" + +# Тестовая выборка доменов (20 штук + 2 эталонных) +DOMAINS=( + # --- Эталонные домены для проверки DNSSEC --- + "sigok.verteiltesysteme.net" # Должен быть NOERROR + "sigfail.verteiltesysteme.net" # Должен быть SERVFAIL (Broken DNSSEC) + "dnssec-failed.org" # Должен быть SERVFAIL (Broken DNSSEC) + + # --- Телеметрия и трекеры (часто блочат дешевые хостеры) --- + "fe3cr.delivery.mp.microsoft.com" + "telemetry.microsoft.com" + "tracking.miui.com" + "app-measurement.com" + "google-analytics.com" + "doubleclick.net" + + # --- Торренты и пиратство (копирайт фильтры) --- + "rutracker.org" + "thepiratebay.org" + "1337x.to" + "yts.mx" + + # --- Контент для взрослых (Child-protection фильтры) --- + "hui.com" + "pornhub.com" + "xvideos.com" + + # --- Политика и соцсети (Государственные DPI / РКН) --- + "twitter.com" + "facebook.com" + "instagram.com" + "bbc.com" + "meduza.io" +) + +echo -e "Starting DPI & DNSSEC interception test on resolver $RESOLVER..." +echo -e "Date: $(date -u +'%Y-%m-%d %H:%M:%S UTC')" +echo "--------------------------------------------------------------------------------" +printf "%-35s | %-20s | %-20s\n" "DOMAIN" "STATUS" "RESOLVED IP (FIRST)" +echo "--------------------------------------------------------------------------------" + +for domain in "${DOMAINS[@]}"; do + # Запрашиваем A-запись с таймаутом в 2 секунды + output=$(dig @"$RESOLVER" "$domain" A +time=2 +tries=1) + + # Парсим статус ответа (NOERROR, SERVFAIL, NXDOMAIN и т.д.) + status=$(echo "$output" | grep -oP 'status: \K[A-Z]+') + + # Вытаскиваем первый попавшийся IP-адрес из секции ANSWER + ip=$(echo "$output" | grep -v '^;' | grep -w 'A' | awk '{print $5}' | head -n 1) + + if [ -z "$status" ]; then + status="TIMEOUT" + fi + + if [ -z "$ip" ]; then + ip="NONE" + fi + + # Цветовая индикация и логика + if [ "$status" == "NOERROR" ]; then + if [[ "$ip" == "0.0.0.0" || "$ip" == "127.0.0.1" ]]; then + color_status="\e[31m$status (FAKE IP)\e[0m" + else + color_status="\e[32m$status\e[0m" + fi + elif [ "$status" == "SERVFAIL" ]; then + # SERVFAIL ожидаем только для этих двух доменов + if [[ "$domain" == "sigfail.verteiltesysteme.net" || "$domain" == "dnssec-failed.org" ]]; then + color_status="\e[32m$status (EXPECTED)\e[0m" + else + color_status="\e[31m$status (INTERCEPTED)\e[0m" + fi + else + color_status="\e[33m$status\e[0m" + fi + + printf "%-35s | %-30b | %-20s\n" "$domain" "$color_status" "$ip" +done + +echo "--------------------------------------------------------------------------------" +echo "Test completed." \ No newline at end of file