Praktische Online-Tools für Entwickler: JSON & XML formatiert anzeigen, REST-APIs testen, Daten prüfen und alles direkt im Browser nutzen – ohne Speicherung.
DNS Checker
DNS-Einträge einer Domain live prüfen: A, MX, TXT, CNAME & Co. gegen Google DNS oder Cloudflare, plus SPF-, DMARC- und DKIM-Check. Kostenlos, ohne Login.
';
div.querySelector(".copy").addEventListener("click", function(){ copy(raw); });
return div;
}
function renderGroup(typeName,records){
var g = document.createElement("div");
g.className = "sd-dns-group";
var head = document.createElement("div");
head.className = "sd-dns-group-head";
head.innerHTML =
''+typeName+''+
''+(TYPE_DESC[typeName]||"")+''+
''+records.length+(records.length===1?" Eintrag":" Einträge")+'';
g.appendChild(head);
records.forEach(function(rec){ g.appendChild(recordRow(typeName,rec)); });
return g;
}
function statusLine(name,typeLabel,res,ms){
var code = RCODE[res.Status]||("RCODE "+res.Status);
var cls = res.Status===0?"ok":(res.Status===3?"warn":"err");
var el = document.createElement("div");
el.className = "sd-dns-status";
el.innerHTML =
''+esc(name)+''+
''+code+''+
''+esc(typeLabel)+''+
''+Math.round(ms)+' ms · '+(state.resolver==="google"?"Google DNS":"Cloudflare")+'';
return el;
}
function showLoading(label){ results.innerHTML = '
Frage '+esc(label)+' ab …
'; }
function showError(msg){ results.innerHTML = '
'+esc(msg)+'Prüf die Domain oder wechsle den Resolver.
'; }
function lookupType(type){
var name = cleanDomain(domainInput.value);
if(!name){ domainInput.focus(); return; }
showLoading(name+" · "+type);
var t0 = performance.now();
query(name,type).then(function(res){
var ms = performance.now()-t0;
results.innerHTML = "";
results.appendChild(statusLine(name,type,res,ms));
var answers = (res.Answer||[]).filter(function(a){ return TYPE_NAMES[a.type]===type; });
if(!answers.length && res.Authority) answers = res.Authority.filter(function(a){ return TYPE_NAMES[a.type]===type; });
if(answers.length){ results.appendChild(renderGroup(type,answers)); }
else{
var e = document.createElement("div"); e.className="sd-dns-empty";
e.textContent = "Keine "+type+"-Einträge gefunden."; results.appendChild(e);
}
}).catch(function(err){ showError("Abfrage fehlgeschlagen: "+err.message); });
}
function lookupAll(){
var name = cleanDomain(domainInput.value);
if(!name){ domainInput.focus(); return; }
showLoading(name+" · alle gängigen Typen");
var t0 = performance.now();
Promise.all(ALL_TYPES.map(function(t){
return query(name,t).then(function(r){ return {type:t,res:r}; }).catch(function(){ return {type:t,res:null}; });
})).then(function(all){
var ms = performance.now()-t0;
results.innerHTML = "";
var anyErr = all.every(function(x){ return !x.res; });
var head = document.createElement("div"); head.className="sd-dns-status";
head.innerHTML =
''+esc(name)+''+
''+(anyErr?"FEHLER":"OK")+''+
'alle Typen'+
''+Math.round(ms)+' ms · '+(state.resolver==="google"?"Google DNS":"Cloudflare")+'';
results.appendChild(head);
var found = 0;
all.forEach(function(x){
if(!x.res) return;
var recs = (x.res.Answer||[]).filter(function(a){ return TYPE_NAMES[a.type]===x.type; });
if(recs.length){ results.appendChild(renderGroup(x.type,recs)); found++; }
});
if(!found){
var e = document.createElement("div"); e.className="sd-dns-empty";
e.textContent = anyErr ? "Keine Antwort vom Resolver — Domain prüfen oder Resolver wechseln." : "Keine Einträge gefunden. Existiert die Domain?";
results.appendChild(e);
}
});
}
function mailLookup(kind){
var name = cleanDomain(domainInput.value);
if(!name){ domainInput.focus(); return; }
var target = name, label = "";
if(kind==="spf"){ target = name; label = "SPF (TXT @ "+name+")"; }
if(kind==="dmarc"){ target = "_dmarc."+name; label = "DMARC (TXT @ _dmarc."+name+")"; }
if(kind==="dkim"){
var sel = ((q("#sddns-selector").value||"default").trim());
target = sel+"._domainkey."+name; label = "DKIM (TXT @ "+target+")";
}
showLoading(label);
var t0 = performance.now();
query(target,"TXT").then(function(res){
var ms = performance.now()-t0;
results.innerHTML = "";
results.appendChild(statusLine(target,label,res,ms));
var recs = (res.Answer||[]).filter(function(a){ return TYPE_NAMES[a.type]==="TXT"; });
if(recs.length){ results.appendChild(renderGroup("TXT",recs)); }
else{
var e = document.createElement("div"); e.className="sd-dns-empty";
e.textContent = kind==="dkim"
? "Kein DKIM-Key unter diesem Selektor. Häufige Selektoren: default, google, k1, s1, selector1, dkim, mail."
: "Kein "+kind.toUpperCase()+"-Record gefunden.";
results.appendChild(e);
}
}).catch(function(err){ showError("Abfrage fehlgeschlagen: "+err.message); });
}
var toast = q("#sddns-toast"), toastTimer;
function copy(text){
(navigator.clipboard ? navigator.clipboard.writeText(text) : Promise.reject())
.then(function(){ showToast("Kopiert"); })
.catch(function(){
var ta = document.createElement("textarea"); ta.value = text;
document.body.appendChild(ta); ta.select();
try{ document.execCommand("copy"); showToast("Kopiert"); }catch(e){}
document.body.removeChild(ta);
});
}
function showToast(msg){
toast.textContent = msg; toast.classList.add("show");
clearTimeout(toastTimer);
toastTimer = setTimeout(function(){ toast.classList.remove("show"); }, 1400);
}
q("#sddns-chips").addEventListener("click", function(e){ var b=e.target.closest(".sd-dns-chip"); if(b) lookupType(b.dataset.type); });
q("#sddns-all").addEventListener("click", lookupAll);
q("#sddns-maildoc").addEventListener("click", function(e){ var b=e.target.closest("button[data-mail]"); if(b) mailLookup(b.dataset.mail); });
domainInput.addEventListener("keydown", function(e){ if(e.key==="Enter") lookupAll(); });
})();
DNS Checker
Mit dem DNS Checker fragst du die DNS-Einträge einer beliebigen Domain in Echtzeit ab und bekommst sie übersichtlich nach Typ gruppiert aufgelistet — mit TTL und Kopier-Funktion pro Eintrag. Die Abfrage läuft direkt in deinem Browser über DNS-over-HTTPS gegen Google DNS oder Cloudflare (oben rechts umschaltbar). Kein Backend, keine Speicherung, keine Anmeldung.
Domain oder Hostname eingeben
Gib eine Domain ein (servit.dev) und klick auf „Alle Einträge“, um die gängigen Record-Typen auf einen Schlag zu sehen: A, AAAA, CNAME, MX, TXT, NS, SOA und CAA. Einzelne Typen prüfst du über die Buttons darunter. Du kannst auch vollständige Hostnamen eingeben — etwa www.servit.dev oder mail.servit.dev —, um gezielt einen CNAME oder Subdomain-Einträge zu testen. Das ist sogar notwendig, denn ein CNAME liegt technisch nie auf der Hauptdomain, sondern immer auf einer Subdomain.
Mail-Doctor für die Zustellbarkeit
Der integrierte Mail-Check prüft mit einem Klick die drei Einträge, an denen die meiste Mail-Zustellung hängt: SPF (welche Server für die Domain senden dürfen), DMARC (unter _dmarc.deine-domain) und DKIM (unter dem angegebenen Selektor, z. B. default). Erkannte SPF-, DMARC- und DKIM-Einträge werden farblich markiert, damit du sie im TXT-Wust sofort findest.
Was der Checker kann — und was DNS grundsätzlich nicht
„Alle Einträge“ deckt alles ab, was ohne Zusatzwissen an der Domain abfragbar ist. Eine vollständige Auflistung sämtlicher existierender Records ist technisch aber nicht möglich: DNS lässt sich nicht auslesen wie ein Verzeichnis. Einträge, die an einem bestimmten Label hängen (etwa ein DKIM-Selektor oder ein SRV-Service), findet man nur, wenn man den Namen kennt — deshalb der separate Selektor beim DKIM-Check.