Bash:
#!/bin/bash
DNS_SERVERS=("8.8.8.8" "1.1.1.1" "9.9.9.9" "208.67.222.222" "209.244.0.3" "77.88.8.8" "94.140.14.14")
DOMAIN="pubg.com"
for dns in "${DNS_SERVERS[@]}"; do
echo "Testing DNS server $dns..."
dig "$DOMAIN" @"$dns" | grep "Query time"
done
#Google Public DNS 8.8.8.8, 8.8.4.4
#Cloudflare DNS 1.1.1.1, 1.0.0.1
#OpenDNS 208.67.222.222, 208.67.220.220
#Quad9 9.9.9.9, 149.112.112.112
#AdGuard DNS 94.140.14.14, 94.140.15.15
#Yandex DNS 77.88.8.8, 77.88.8.1
#CleanBrowsing 185.228.168.168, 185.228.169.168
#Level3 DNS 209.244.0.3, 209.244.0.4
#Comodo Secure DNS 8.26.56.26, 8.20.247.20
#Hurricane Electric DNS 74.82.42.42
#Control D 76.76.2.0, 76.76.10.0
#CIRA Canadian Shield 149.112.121.10, 149.112.122.10
#DNS.WATCH 84.200.69.80, 84.200.70.40
#UncensoredDNS 91.239.100.100, 89.233.43.71
#OpenNIC 138.197.140.189, 137.220.55.93
#Freenom World 80.80.80.80, 80.80.81.81
#Dyn 216.146.35.35, 216.146.36.36
#Mullvad DNS 194.242.2.2, 194.242.2.3
#Rostelecom 213.59.0.146, 213.59.0.147
#SkyDNS (бесплатный тариф) 193.58.251.251
#Alternate DNS 76.76.19.19, 76.223.122.150
#Neustar DNS 156.154.70.1, 156.154.71.1
#Oracle Dyn 216.146.35.35, 216.146.36.36
#Verisign 64.6.64.6, 64.6.65.6
#Comodo Family Shield 8.26.56.26, 8.20.247.20
#Yandex Secure (безопасный) 77.88.8.88, 77.88.8.2
#Yandex Family (семейный) 77.88.8.7, 77.88.8.3
#AdGuard Family 94.140.14.15, 94.140.15.16
#CleanBrowsing Family 185.228.168.10, 185.228.169.11
#Cloudflare Malware 1.1.1.2, 1.0.0.2
#Cloudflare Adult 1.1.1.3, 1.0.0.3
#Quad9 Secure 9.9.9.11, 149.112.112.11
#CIRA Private 149.112.121.20, 149.112.122.20
#CIRA Protected 149.112.121.30, 149.112.122.30
#CIRA Family 149.112.121.40, 149.112.122.40
#DNS0 193.110.81.0, 185.233.106.187
#LibreDNS 88.198.92.222
#dnswarden 159.69.119.33, 5.9.106.199
#BlissDNS 173.255.201.254
#HaGeZi DNS (Германия) 188.34.161.210, 159.69.155.94, 95.217.163.17
#FreeDNS 37.235.1.174, 37.235.1.177
#Fourth Estate 45.77.165.194, 45.32.36.36
#Verisign 64.6.64.6, 64.6.65.6
#Level3 Communications 4.2.2.1, 4.2.2.2, 4.2.2.3, 4.2.2.4, 4.2.2.5, 4.2.2.6
#Bi.Zone Secure DNS (Россия) 81.177.135.215
#byfly 194.158.204.238, 82.209.195.12
#DOMRU 109.195.160.1, 5.3.3.3
Bash:
#!/bin/bash
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Домен для тестирования
DOMAIN="pubg.com"
# Количество попыток на DNS-сервер
QUERY_COUNT=3
# Массив DNS-серверов (только IP, без комментариев)
DNS_SERVERS=(
"8.8.8.8"
"8.8.4.4"
"1.1.1.1"
"1.0.0.1"
"208.67.222.222"
"208.67.220.220"
"9.9.9.9"
"149.112.112.112"
"94.140.14.14"
"94.140.15.15"
"77.88.8.8"
"77.88.8.1"
"185.228.168.168"
"185.228.169.168"
"209.244.0.3"
"209.244.0.4"
"8.26.56.26"
"8.20.247.20"
"74.82.42.42"
"76.76.2.0"
"76.76.10.0"
"149.112.121.10"
"149.112.122.10"
"84.200.69.80"
"84.200.70.40"
"91.239.100.100"
"89.233.43.71"
"138.197.140.189"
"137.220.55.93"
"80.80.80.80"
"80.80.81.81"
"216.146.35.35"
"216.146.36.36"
"194.242.2.2"
"194.242.2.3"
"213.59.0.146"
"213.59.0.147"
"193.58.251.251"
"76.76.19.19"
"76.223.122.150"
"156.154.70.1"
"156.154.71.1"
"77.88.8.88"
"77.88.8.2"
"77.88.8.7"
"77.88.8.3"
"94.140.14.15"
"94.140.15.16"
"185.228.168.10"
"185.228.169.11"
"1.1.1.2"
"1.0.0.2"
"1.1.1.3"
"1.0.0.3"
"9.9.9.11"
"149.112.112.11"
"149.112.121.20"
"149.112.122.20"
"149.112.121.30"
"149.112.122.30"
"149.112.121.40"
"149.112.122.40"
"193.110.81.0"
"185.233.106.187"
"88.198.92.222"
"159.69.119.33"
"5.9.106.199"
"173.255.201.254"
"188.34.161.210"
"159.69.155.94"
"95.217.163.17"
"37.235.1.174"
"37.235.1.177"
"45.77.165.194"
"45.32.36.36"
"64.6.64.6"
"64.6.65.6"
"4.2.2.1"
"4.2.2.2"
"4.2.2.3"
"4.2.2.4"
"4.2.2.5"
"4.2.2.6"
"81.177.135.215"
"194.158.204.238"
"82.209.195.12"
"109.195.160.1"
"5.3.3.3"
)
if ! command -v dig &> /dev/null; then
echo -e "${RED}Ошибка: dig не установлен. Установите dnsutils (Debian/Ubuntu) или bind-tools (CentOS/RHEL)${NC}"
exit 1
fi
TEMP_FILE=$(mktemp)
echo -e "${YELLOW}========================================${NC}"
echo -e "${YELLOW}Тестирование DNS-серверов${NC}"
echo -e "${YELLOW}Домен: $DOMAIN${NC}"
echo -e "${YELLOW}Количество попыток на сервер: $QUERY_COUNT${NC}"
echo -e "${YELLOW}Всего серверов: ${#DNS_SERVERS[@]}${NC}"
echo -e "${YELLOW}========================================${NC}\n"
test_dns() {
local dns=$1
local total_time=0
local successful=0
for i in $(seq 1 $QUERY_COUNT); do
local query_time=$(dig "$DOMAIN" @"$dns" +timeout=2 +tries=1 2>/dev/null | grep -i "Query time" | awk '{print $4}')
if [[ -n "$query_time" && "$query_time" =~ ^[0-9]+$ ]]; then
total_time=$((total_time + query_time))
successful=$((successful + 1))
fi
done
if [[ $successful -gt 0 ]]; then
local avg_time=$((total_time / successful))
echo "$avg_time|$dns|$successful"
else
echo "9999|$dns|0"
fi
}
total=${#DNS_SERVERS[@]}
current=0
for dns in "${DNS_SERVERS[@]}"; do
current=$((current + 1))
printf "\r${YELLOW}[%3d/%3d]${NC} Тестирую %-16s..." $current $total "$dns"
result=$(test_dns "$dns")
echo "$result" >> "$TEMP_FILE"
done
echo -e "\n"
echo -e "${GREEN}========== РЕЗУЛЬТАТЫ (по возрастанию времени ответа) ==========${NC}"
echo -e "${YELLOW}Время(мс) | DNS-сервер | Успешных запросов${NC}"
echo -e "${YELLOW}----------|-------------------|------------------${NC}"
sort -n "$TEMP_FILE" | while IFS='|' read -r time dns success; do
if [[ $time -eq 9999 ]]; then
echo -e "${RED} TIMEOUT | ${dns} | $success/3${NC}"
else
if [[ $time -lt 20 ]]; then
printf "${GREEN}%8d | %-17s | %d/3${NC}\n" "$time" "$dns" "$success"
elif [[ $time -lt 50 ]]; then
printf "${YELLOW}%8d | %-17s | %d/3${NC}\n" "$time" "$dns" "$success"
else
printf "${RED}%8d | %-17s | %d/3${NC}\n" "$time" "$dns" "$success"
fi
fi
done
echo -e "\n${GREEN}========== ТОП-10 БЫСТРЫХ DNS ==========${NC}"
sort -n "$TEMP_FILE" | head -10 | while IFS='|' read -r time dns success; do
if [[ $time -ne 9999 ]]; then
printf "${GREEN}%3d мс | %s${NC}\n" "$time" "$dns"
fi
done
total_servers=${#DNS_SERVERS[@]}
responsive=$(grep -v "^9999" "$TEMP_FILE" | wc -l)
unresponsive=$((total_servers - responsive))
echo -e "\n${YELLOW}========== СТАТИСТИКА ==========${NC}"
echo -e "Всего DNS-серверов: $total_servers"
echo -e "${GREEN}Отвечают: $responsive${NC}"
echo -e "${RED}Не отвечают: $unresponsive${NC}"
rm -f "$TEMP_FILE"