← 戻る
DNS と疎通を確認
利用中のリゾルバ、ドメインの名前解決、公共 DNS への疎通、出口 IP を確認します。読み取り専用。
一般ユーザーで実行可読み取り専用
ワンライン実行
curl -fsSL https://www.moiu.cn/scripts/dns-check.sh | bashソース
#!/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 '(取不到)')"
