#!/usr/bin/env bash
# DNS 与连通性检查
#
# 只读脚本，不需要 root。看用的哪个解析器、域名解不解析得出来、
# 几个公共地址通不通、出口 IP 是什么。
# 用法：bash dns-check.sh [域名]

set -u

DOMAIN="$1"

echo '====== DNS 与连通性 ======'

echo '--- 解析器 ---'
if [ -r /etc/resolv.conf ]; then
    grep -E '^(nameserver|search|options)' /etc/resolv.conf | sed 's/^/  /'
else
    echo '  (没有 /etc/resolv.conf)'
fi

if [ -n "$DOMAIN" ]; then
    echo ''
    echo "--- 解析 $DOMAIN ---"
    if command -v dig >/dev/null 2>&1; then
        HIT=$(dig +short "$DOMAIN" 2>/dev/null || true)
        if [ -z "$HIT" ]; then
            echo '  [!] 解不出来'
        else
            printf '%s\n' "$HIT" | sed 's/^/  /'
        fi
    elif command -v getent >/dev/null 2>&1; then
        getent hosts "$DOMAIN" | sed 's/^/  /' || echo '  [!] 解不出来'
    else
        echo '  [!] 没有 dig 也没有 getent'
    fi
fi

echo ''
echo '--- 连通性（ping 两个公共 DNS）---'
if command -v ping >/dev/null 2>&1; then
    for host in 223.5.5.5 1.1.1.1; do
        if ping -c 1 -W 2 "$host" >/dev/null 2>&1; then
            echo "  [√] $host 通"
        else
            echo "  [!] $host 不通"
        fi
    done
else
    echo '  [!] 没有 ping'
fi

echo ''
echo '--- 出口 ---'
echo "  公网 IP：$(curl -fsSL --max-time 5 https://api.ipify.org 2>/dev/null || echo '(取不到)')"
