Skip to content

Instantly share code, notes, and snippets.

@agneevX
Last active May 16, 2024 16:42
Show Gist options
  • Save agneevX/04e1dd6714c9b2bbd2aefbb98d04ec6f to your computer and use it in GitHub Desktop.
Save agneevX/04e1dd6714c9b2bbd2aefbb98d04ec6f to your computer and use it in GitHub Desktop.
Script to test against DNS servers
#!/bin/bash
UDP_SERVERS=(
"9.9.9.9"
"9.9.9.11"
)
TLS_SERVERS=(
"p0.freedns.controld.com"
)
DOH_SERVERS=(
"8.8.8.8"
"8.8.4.4"
"doh.opendns.com"
"1.1.1.1"
"1.0.0.1"
"dns.adguard.com"
"dns.nextdns.io"
"ipv4-vultr-bom-1.edge.nextdns.io"
"ipv4-vultr-blr-1.edge.nextdns.io"
"ipv4-do-blr-1.edge.nextdns.io"
"ipv4-anexia-maa-1.edge.nextdns.io"
"wikimedia-dns.org"
)
if [ $# -lt 1 ]; then
echo "Usage: $0 <domain or IP>"
exit 1
fi
color_ping() {
PING_RESULT=$(ping -c 1 -w 2 "$1" | awk -F'/' 'END { printf "%.0f", $5 }')
if [[ $PING_RESULT -lt 30 ]]; then
echo -e "\033[32m${PING_RESULT}ms\033[0m"
elif [[ $PING_RESULT -lt 60 ]]; then
echo -e "\033[33m${PING_RESULT}ms\033[0m"
elif [[ $PING_RESULT -lt 100 ]]; then
echo -e "\033[38;5;208m${PING_RESULT}ms\033[0m"
elif [[ $PING_RESULT -lt 600 ]]; then
echo -e "\033[31m${PING_RESULT}ms\033[0m"
else
echo "${PING_RESULT}ms"
fi
}
kdig +short "$1"
echo "--------------------"
for SERVER in "${UDP_SERVERS[@]}"; do
if [[ "$SERVER" =~ .*:.* ]]; then
SERVER_IP=$(echo "$SERVER" | cut -d: -f1)
SERVER_PORT=$(echo "$SERVER" | cut -d: -f2)
else
SERVER_IP="$SERVER"
SERVER_PORT="53"
fi
IP_ADDRESSES=($(dig +short "@$SERVER_IP" -p "$SERVER_PORT" "$1" | awk '!/\.$/'))
for IP in "${IP_ADDRESSES[@]}"; do
SERVER_PING_RESULT=$(color_ping "$SERVER_IP")
IP_PING_RESULT=$(color_ping "$IP")
if [ "$IP" == "${IP_ADDRESSES[0]}" ]; then
if [ "$SERVER_PORT" == "53" ]; then
echo -e "UDP server \033[1m$SERVER_IP\033[0m (RTT: $SERVER_PING_RESULT)"
else
echo -e "UDP server \033[1m$SERVER_IP:$SERVER_PORT\033[0m (RTT: $SERVER_PING_RESULT)"
fi
fi
echo " $IP ($IP_PING_RESULT)"
done
done
echo "----------------------------------"
for SERVER in "${DOH_SERVERS[@]}"; do
IP_ADDRESSES=($(kdig +short +https "@$SERVER" "$1" | awk '!/\.$/'))
for IP in "${IP_ADDRESSES[@]}"; do
SERVER_PING_RESULT=$(color_ping "$SERVER")
IP_PING_RESULT=$(color_ping "$IP")
if [ "$IP" == "${IP_ADDRESSES[0]}" ]; then
echo -e "DoH server \033[1m$SERVER\033[0m (RTT: $SERVER_PING_RESULT)"
fi
echo " $IP ($IP_PING_RESULT)"
done
done
echo "----------------------------------"
for SERVER in "${TLS_SERVERS[@]}"; do
IP_ADDRESSES=($(kdig +short +tls "@$SERVER" "$1" | awk '!/\.$/'))
for IP in "${IP_ADDRESSES[@]}"; do
SERVER_PING_RESULT=$(color_ping "$SERVER")
IP_PING_RESULT=$(color_ping "$IP")
if [ "$IP" == "${IP_ADDRESSES[0]}" ]; then
echo -e "TLS server \033[1m$SERVER\033[0m (RTT: $SERVER_PING_RESULT)"
fi
echo " $IP ($IP_PING_RESULT)"
done
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment