Created
March 6, 2025 12:57
Revisions
-
goeko created this gist
Mar 6, 2025 .There are no files selected for viewing
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 charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,130 @@ # 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