2024-05-19 23:49:45 +02:00

72 lines
1.8 KiB
Bash
Executable File

#! /bin/sh
DNSLOOKUP_VERSION=1.10.1
case "$(uname -ms)" in
Darwin\ x86_64) DNSLOOKUP_ARCH=darwin-amd64 ;;
Linux\ x86_64) DNSLOOKUP_ARCH=linux-amd64 ;;
*)
echo "Unsupported platform" >&2
exit 2
;;
esac
RESOLVERS_LIST="v3/public-resolvers.md"
ERROR_LOG=".error-log"
: >"$ERROR_LOG"
if [ ! -x "${DNSLOOKUP_ARCH}/dnslookup" ]; then
curl -sL https://github.com/ameshkov/dnslookup/releases/download/v${DNSLOOKUP_VERSION}/dnslookup-${DNSLOOKUP_ARCH}-v${DNSLOOKUP_VERSION}.tar.gz | tar xzpf - || exit 1
fi
PATH="$(pwd)/${DNSLOOKUP_ARCH}:$PATH"
try_resolver() {
ERROR_LOG_TMP=".errors"
resolver_name="$1"
stamp="$2"
if dnslookup one.net "$stamp" >/dev/null 2>&1; then
echo "pass: ${resolver_name}"
elif dnslookup one.net "$stamp" >/dev/null 2>&1; then
echo "pass: ${resolver_name} (1 retry)"
elif dnslookup one.net "$stamp" >/dev/null 2>&1; then
echo "pass: ${resolver_name} (2 retries)"
elif dnslookup one.net "$stamp" >/dev/null 2>"$ERROR_LOG_TMP"; then
echo "pass: ${resolver_name} (3 retries)"
else
if grep -Eq "(no route|unreachable)" "$ERROR_LOG_TMP"; then
echo "ipv6: ${resolver_name}"
else
(
echo "* FAILED: ${resolver_name}"
echo "$stamp"
cat "$ERROR_LOG_TMP"
echo
) >>"$ERROR_LOG"
return 1
fi
fi
}
resolver_name=""
while read -r line; do
case "$line" in
\#\#\ *)
resolver_name=$(echo "$line" | sed 's/^## *//')
continue
;;
sdns:*)
try_resolver "$resolver_name" "$line"
;;
esac
done <"$RESOLVERS_LIST"
if [ -s "$ERROR_LOG" ]; then
exec 1>&2
echo
echo "** FAILURES **"
echo
cat "$ERROR_LOG"
exit 0
fi