72 lines
1.8 KiB
Bash
Executable File
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
|