Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save goeko/c11c3766f19e6d6953ecb3de806b98fc to your computer and use it in GitHub Desktop.
Save goeko/c11c3766f19e6d6953ecb3de806b98fc to your computer and use it in GitHub Desktop.
# Zsh oder Bash: source ~/.digx
function digx() {
################################################
# 1) Hilfefunktion
################################################
show_help() {
echo "digx - DNS-Abfrage (kompakte Ausgabe, kein Debug)"
echo
echo "Verwendung:"
echo " digx <DOMAIN> [RECORDTYPE ...]"
echo
echo "Beschreibung:"
echo " Ruft für die angegebene Domain alle (oder ausgewählte) DNS-Record-Typen ab."
echo " - Nutzt 'dig +short' für eine kompakte Ausgabe."
echo " - Fällt zurück auf gefiltertes nslookup, falls dig kein Ergebnis liefert."
echo " - Zeigt 'NO RECORD FOUND FOR TYPE <TYP>' bei keinem Eintrag."
echo " - Gibt exakt das aus, was auch in die Datei geschrieben wird."
echo
echo "Optionen:"
echo " -h, --help Zeigt diese Hilfe."
echo
echo "Beispiele:"
echo " digx example.com (alle Standard-Typen)"
echo " digx example.com A MX (nur A und MX)"
echo " digx example.com NS CNAME"
echo " digx --help"
}
################################################
# 2) Parameter prüfen (Hilfe?)
################################################
if [ -z "$1" ] || [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
show_help
return 0
fi
################################################
# 3) Domain und Record-Typen ermitteln
################################################
local domain="$1"
shift
# Standard-Record-Typen (falls keine angegeben sind)
local DEFAULT_RECORD_TYPES=(
"A" "AAAA" "CNAME" "MX" "NS" "SOA" "TXT" "SRV"
"PTR" "CAA" "DS" "DNSKEY" "RRSIG" "NSEC"
"NSEC3" "TLSA" "URI"
)
# Wenn keine weiteren Argumente => nutze Standardliste
local RECORD_TYPES=()
if [ $# -eq 0 ]; then
RECORD_TYPES=("${DEFAULT_RECORD_TYPES[@]}")
else
RECORD_TYPES=("$@")
fi
################################################
# 4) Ausgabe in einer Variablen sammeln
################################################
local FULL_OUTPUT=""
FULL_OUTPUT+="==> Hole DNS-Einträge für '$domain' ...\n\n"
# Schleife über alle gewünschten Record-Typen
for rtype in "${RECORD_TYPES[@]}"; do
# 1) dig +short
local result
result="$(dig +short "$domain" "$rtype" 2>/dev/null)"
# 2) Falls leer => Fallback: nslookup (gefiltert)
if [ -z "$result" ]; then
local fallback
fallback="$(nslookup -type="$rtype" "$domain" 2>/dev/null | \
grep -vE "Server:|Address:|Non-authoritative|Authoritative|origin =|mail addr =|serial =|refresh =|retry =|expire =|minimum|can't find|No answer|^\\*\\*|SERVFAIL|^$")"
if [ -n "$fallback" ]; then
result="$fallback"
fi
fi
# 3) Prüfen, ob nur trivial "domain" übrigbleibt -> dann = kein Eintrag
# (z.B. "grafix-house.de" oder "grafix-house.de.")
if [ -n "$result" ]; then
# Trailing Dot entfernen, falls vorhanden
local stripped
stripped="$(echo "$result" | sed 's/\.$//')"
# Wie viele Zeilen?
local lines_count
lines_count="$(echo "$stripped" | wc -l | tr -d ' ')"
# Wenn nur 1 Zeile und diese == domain => kein Eintrag
if [ "$lines_count" -eq 1 ] && [ "$stripped" = "$domain" ]; then
result=""
fi
fi
# 4) In FULL_OUTPUT schreiben
FULL_OUTPUT+="----- $rtype -----\n"
if [ -z "$result" ]; then
FULL_OUTPUT+="NO RECORD FOUND FOR TYPE $rtype\n\n"
else
FULL_OUTPUT+="$result\n\n"
fi
done
################################################
# 5) Gesamtausgabe 1x auf der Konsole anzeigen
################################################
printf "%b" "$FULL_OUTPUT"
################################################
# 6) Fragen: soll in Datei geschrieben werden?
################################################
echo -n "Soll die Ausgabe in einer Textdatei gespeichert werden? (y/n): "
read choice
if [ "$choice" = "y" ] || [ "$choice" = "Y" ]; then
local timestamp
timestamp="$(date +"%Y-%m-%d_%H-%M-%S")"
local filename="${timestamp}_${domain}_dns.txt"
printf "%b" "$FULL_OUTPUT" > "$filename"
echo "Datei '$filename' wurde erstellt."
fi
}
# Optionaler Alias:
alias digx=digx
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment