Created
March 6, 2025 12:57
-
-
Save goeko/c11c3766f19e6d6953ecb3de806b98fc to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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