fix(metablogizer): Fix DNS resolution parsing (127.0.0.1:53 bug)
KISS approach to DNS resolution: 1. Primary: Use Google DNS API (https://dns.google/resolve) - Most reliable, bypasses local resolver issues 2. Fallback: nslookup with tail -1 to skip DNS server line 3. Fallback: host command The bug was parsing nslookup output which includes DNS server address (127.0.0.1) before the actual resolved IP. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
e318ca2ba1
commit
95ff73f6e7
@ -780,16 +780,31 @@ method_get_settings() {
|
||||
json_dump
|
||||
}
|
||||
|
||||
# Helper: Check DNS resolution for a domain
|
||||
# Helper: Check DNS resolution for a domain (KISS approach)
|
||||
# Returns the resolved IP address, not the DNS server
|
||||
check_dns_resolution() {
|
||||
local domain="$1"
|
||||
local resolved_ip=""
|
||||
if command -v nslookup >/dev/null 2>&1; then
|
||||
resolved_ip=$(nslookup "$domain" 2>/dev/null | grep -A1 "Name:" | grep "Address" | head -1 | awk '{print $2}')
|
||||
[ -z "$resolved_ip" ] && resolved_ip=$(nslookup "$domain" 2>/dev/null | grep "Address" | tail -1 | awk '{print $2}' | grep -v "^$")
|
||||
elif command -v host >/dev/null 2>&1; then
|
||||
resolved_ip=$(host "$domain" 2>/dev/null | grep "has address" | head -1 | awk '{print $4}')
|
||||
|
||||
# Method 1: Use external DNS API (most reliable, avoids local resolver issues)
|
||||
resolved_ip=$(wget -qO- -T 3 "https://dns.google/resolve?name=${domain}&type=A" 2>/dev/null | \
|
||||
jsonfilter -e '@.Answer[0].data' 2>/dev/null)
|
||||
|
||||
# Method 2: Fallback to nslookup with careful parsing
|
||||
if [ -z "$resolved_ip" ] && command -v nslookup >/dev/null 2>&1; then
|
||||
# Get last Address line (skip DNS server which comes first)
|
||||
resolved_ip=$(nslookup "$domain" 2>/dev/null | \
|
||||
grep "Address" | tail -1 | \
|
||||
sed 's/.*: *//' | sed 's/#.*//' | \
|
||||
grep -v '^127\.')
|
||||
fi
|
||||
|
||||
# Method 3: Fallback to host command
|
||||
if [ -z "$resolved_ip" ] && command -v host >/dev/null 2>&1; then
|
||||
resolved_ip=$(host -t A "$domain" 2>/dev/null | \
|
||||
grep "has address" | head -1 | awk '{print $NF}')
|
||||
fi
|
||||
|
||||
echo "$resolved_ip"
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user