#!/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."