# Free DNS Checker & Lookup Tool – Check All DNS Records

> Source: https://hostinginfos.com/dns-checker-tool/  
> Last updated: 2026-10-22

DNS Lookup Tool 

Check A, AAAA, CNAME, MX, TXT, NS, SOA and CAA records for any domain. Troubleshoot DNS, email delivery and hosting migrations in seconds.

   

## DNS Checker

 

Enter a domain or subdomain and pick a record type, or check them all at once.

      

   

## DNS Record Types Explained

 

A quick reference for the records this tool can look up.

  **A** Points a domain or subdomain to an IPv4 address. This is usually where your website is hosted. **AAAA** Same as an A record, but for IPv6 addresses. **CNAME** An alias that points one hostname to another, such as www to your root domain or a CDN. **MX** Tells the internet which mail servers receive email for your domain, and in what priority order. **TXT** Free-form text used for SPF, DKIM, DMARC and domain ownership verification. **NS** Lists the authoritative nameservers that hold the DNS zone for your domain. **SOA** Start of Authority. Holds zone details such as the primary nameserver, serial number and refresh timers. **CAA** Controls which certificate authorities are allowed to issue SSL certificates for your domain.    

## FAQs

 

Answers to the most common DNS lookup questions. Still stuck? [Contact us](https://hostinginfos.com/contact-us/).

  Is this DNS lookup tool free? 

Yes. The tool is completely free and needs no account or sign-up.

   What DNS records can I check? 

You can check A, AAAA, CNAME, MX, TXT, NS, SOA and CAA records. Choose “All Records” to query every type in one go.

   Can I look up subdomains too? 

Yes. You can enter a root domain like `example.com` or any subdomain like `blog.example.com`.

   Why are no records showing for my domain? 

The most common reasons are that the selected record type does not exist for that name, the domain was mistyped, or a recent DNS change has not propagated yet. Try “All Records” to see what does exist.

   Can this tool help me fix email problems? 

Yes. MX records show where your email is delivered, and TXT records hold your SPF policy. To check DMARC, look up the TXT record for `_dmarc.yourdomain.com`. For DKIM, look up TXT for `selector._domainkey.yourdomain.com`.

   Does this tool show live DNS data? 

It queries public DNS resolvers (Google Public DNS, with Cloudflare as a backup) at the moment you click the button. Resolvers can cache answers until the TTL expires, so results may briefly differ from what your authoritative nameserver holds.

   Why do DNS changes take time to show up? 

DNS answers are cached by resolvers around the world for the length of the record’s TTL. Until those caches expire, some users may still see the old values. This delay is commonly called DNS propagation.

   Can I use this after changing nameservers or hosting? 

Yes. After a migration, check the NS records to confirm your new nameservers are visible, and the A record to confirm your domain points to the new server’s IP address.

   What does TTL mean? 

TTL (Time To Live) is the number of seconds a resolver may cache a record before asking again. Lower TTLs make changes appear faster, while higher TTLs reduce lookup traffic.

   What is the difference between an A record and a CNAME? 

An A record maps a name directly to an IP address. A CNAME maps a name to another hostname, which then resolves to an IP address. A CNAME cannot normally coexist with other records on the same name.

    

## Related Resources

 

Learn more about hosting, domains and choosing the right provider.

  [Guide  
 What Is Web Hosting? A Complete 2026 Guide  
 A plain-English guide to hosting types, renewal prices, uptime and choosing a host.  
 Read the guide →](https://hostinginfos.com/blog/what-is-web-hosting-a-complete-guide/)  
 [Hosting Control Panel  
 Best Hosting Control Panel in 2026: 12 Options Ranked  
 12 panels compared on licence costs, performance and security, with a migration checklist.  
 Compare panels →](https://hostinginfos.com/blog/best-hosting-control-panel/)  
 [Hosting Providers  
 Best Managed Hosting Provider in 2026  
 Verified pricing, real renewal costs and overage rates, with the right pick for your budget.  
 See the top picks →](https://hostinginfos.com/blog/best-managed-hosting-provider/)  
 [Hosting Providers  
 Best VPS Hosting Providers in 2026  
 Verified pricing, renewal costs and honest pros and cons for every budget and skill level.  
 See the top picks →](https://hostinginfos.com/blog/best-vps-hosting-providers/)  
 [Hosting Providers  
 Best Cloud Hosting Providers in 2026  
 Cloudways, DigitalOcean, Vultr, Kinsta and more, with real pricing and honest drawbacks.  
 See the top picks →](https://hostinginfos.com/blog/best-cloud-hosting-providers/)  
 [Guide  
 Website Builder Glossary: 60+ Terms Explained  
 Plain-English explanations of web design, SEO, security and e-commerce jargon.  
 Read the glossary →](https://hostinginfos.com/blog/website-builder-glossary/)    

## Moving to a new host?

 

Read our independent hosting reviews and comparisons, with real pricing, renewal costs and honest drawbacks.

 

[Hosting Reviews](https://hostinginfos.com/blog/category/hosting-reviews/)  
 [Hosting Providers](https://hostinginfos.com/blog/category/hosting-providers/)

  

 

var root = document.getElementById('hi-dns'); if (!root || root.getAttribute('data-ready')) { return; } root.setAttribute('data-ready', '1');

 

var TYPE_IDS = { A: 1, AAAA: 28, CNAME: 5, MX: 15, TXT: 16, NS: 2, SOA: 6, CAA: 257 }; var ORDER = ['A', 'AAAA', 'CNAME', 'MX', 'TXT', 'NS', 'SOA', 'CAA']; var DESC = { A: 'Maps the name to an IPv4 address.', AAAA: 'Maps the name to an IPv6 address.', CNAME: 'Aliases the name to another hostname.', MX: 'Mail servers that receive email for this name.', TXT: 'Text records such as SPF, DKIM, DMARC and verification tokens.', NS: 'Authoritative nameservers for this zone.', SOA: 'Start of Authority: zone administration details.', CAA: 'Certificate authorities allowed to issue SSL certificates.' }; var COLUMNS = { A: ['Name', 'TTL', 'IP Address'], AAAA: ['Name', 'TTL', 'IPv6 Address'], CNAME: ['Name', 'TTL', 'Target'], MX: ['Name', 'TTL', 'Priority', 'Mail Server'], TXT: ['Name', 'TTL', 'Value'], NS: ['Name', 'TTL', 'Nameserver'], SOA: ['Name', 'TTL', 'Details'], CAA: ['Name', 'TTL', 'Flag', 'Tag', 'Value'] }; var RESOLVERS = [ { name: 'Google Public DNS', url: 'https://dns.google/resolve' }, { name: 'Cloudflare DNS', url: 'https://cloudflare-dns.com/dns-query' } ];

 

var form = root.querySelector('.hi-form'); var input = root.querySelector('#hi-domain'); var select = root.querySelector('#hi-type'); var btn = root.querySelector('.hi-btn'); var statusBox = root.querySelector('.hi-status'); var results = root.querySelector('.hi-results'); var tabsBox = root.querySelector('.hi-tabs'); var panel = root.querySelector('.hi-panel'); var meta = root.querySelector('.hi-meta');

 

var state = { domain: '', types: [], data: {}, filter: 'ALL' };

 

function el(tag, cls, text) { var n = document.createElement(tag); if (cls) { n.className = cls; } if (text !== undefined && text !== null) { n.textContent = text; } return n; } function strip(s) { return String(s || '').replace(/\.$/, ''); }

 

function fmtTTL(n) { n = Number(n); if (isNaN(n)) { return '-'; } var h = ''; if (n >= 86400 && n % 86400 === 0) { h = (n / 86400) + ' d'; } else if (n >= 3600 && n % 3600 === 0) { h = (n / 3600) + ' h'; } else if (n >= 60 && n % 60 === 0) { h = (n / 60) + ' min'; } return h ? n + ' (' + h + ')' : String(n); }

 

function normalize(v) { v = String(v || '').trim().toLowerCase(); v = v.replace(/^[a-z][a-z0-9+.\-]*:\/\//, ''); v = v.split(/[\/?#]/)[0]; v = v.replace(/^[^@]*@/, ''); v = v.replace(/:\d+$/, ''); v = v.replace(/\.+$/, ''); try { v = new URL('http://' + v).hostname; } catch (e) { /* keep as typed */ } return v; }

 

function validate(d) { if (!d) { return 'Please enter a domain name, for example example.com.'; } if (/^\d{1,3}(\.\d{1,3}){3}$/.test(d) || d.indexOf(':') !== -1) { return 'Please enter a domain name, not an IP address.'; } if (d.length > 253) { return 'That domain name is too long.'; } var labels = d.split('.'); if (labels.length < 2) { return 'Please enter a full domain name, for example example.com.'; } var ok = labels.every(function (l) { return /^[a-z0-9_]([a-z0-9_\-]{0,61}[a-z0-9_])?$/.test(l); }); if (!ok || /^\d+$/.test(labels[labels.length - 1])) { return 'That does not look like a valid domain name.'; } return ''; } function setStatus(msg, kind) { statusBox.textContent = msg || ''; statusBox.className = 'hi-status' + (msg && kind ? ' is-' + kind : ''); } function setLoading(on) { btn.disabled = on; btn.classList.toggle('is-loading', on); btn.firstChild.nodeValue = on ? 'Checking' : 'Check DNS'; } function doh(domain, typeId) { var i = 0; function attempt() { var r = RESOLVERS[i]; var url = r.url + '?name=' + encodeURIComponent(domain) + '&type=' + typeId; var ctrl = typeof AbortController !== 'undefined' ? new AbortController() : null; var timer = setTimeout(function () { if (ctrl) { ctrl.abort(); } }, 8000); return fetch(url, { headers: { 'accept': 'application/dns-json' }, signal: ctrl ? ctrl.signal : undefined }) .then(function (res) { clearTimeout(timer); if (!res.ok) { throw new Error('HTTP ' + res.status); } return res.json(); }) .then(function (json) { json.resolver = r.name; return json; }) .catch(function (err) { clearTimeout(timer); i++; if (i < RESOLVERS.length) { return attempt(); } throw err; }); } return attempt(); } function cell(text, copy) { return { t: String(text), copy: !!copy }; } function cleanTxt(d) { d = String(d || ''); d = d.replace(/^"/, '').replace(/"$/, '').replace(/"\s+"/g, ''); return d.replace(/\\"/g, '"'); } function parseCAA(d) { d = String(d || ''); var m = /^\\#\s+\d+\s+([0-9a-fA-F\s]+)$/.exec(d); if (m) { var hex = m[1].replace(/\s+/g, ''); var bytes = (hex.match(/../g) || []).map(function (h) { return parseInt(h, 16); }); var flag = bytes[0] || 0; var tl = bytes[1] || 0; var tag = String.fromCharCode.apply(null, bytes.slice(2, 2 + tl)); var val = String.fromCharCode.apply(null, bytes.slice(2 + tl)); return [String(flag), tag, val]; } m = /^(\d+)\s+(\S+)\s+(.*)$/.exec(d); if (m) { return [m[1], m[2], m[3].replace(/^"|"$/g, '')]; } return ['', '', d]; } function toRow(type, a) { var name = strip(a.name); var ttl = fmtTTL(a.TTL); var d = String(a.data || ''); var p; switch (type) { case 'A': case 'AAAA': return [cell(name), cell(ttl), cell(d, true)]; case 'CNAME': case 'NS': return [cell(name), cell(ttl), cell(strip(d), true)]; case 'MX': p = d.split(/\s+/); return [cell(name), cell(ttl), cell(p[0] || ''), cell(strip(p[1] || ''), true)]; case 'TXT': return [cell(name), cell(ttl), cell(cleanTxt(d), true)]; case 'SOA': p = d.split(/\s+/); var admin = strip(p[1] || '').replace('.', '@'); return [cell(name), cell(ttl), { dl: [ ['Primary NS', strip(p[0] || '')], ['Admin email', admin], ['Serial', p[2] || ''], ['Refresh', (p[3] || '') + ' s'], ['Retry', (p[4] || '') + ' s'], ['Expire', (p[5] || '') + ' s'], ['Minimum TTL', (p[6] || '') + ' s'] ] }]; case 'CAA': p = parseCAA(d); return [cell(name), cell(ttl), cell(p[0]), cell(p[1]), cell(p[2], true)]; } return [cell(name), cell(ttl), cell(d)]; } function buildTable(type, rows) { var wrap = el('div', 'hi-scroll'); var table = el('table', 'hi-table'); var thead = el('thead'); var trh = el('tr'); COLUMNS[type].forEach(function (h) { trh.appendChild(el('th', '', h)); }); thead.appendChild(trh); table.appendChild(thead); var tbody = el('tbody'); rows.forEach(function (row) { var tr = el('tr'); row.forEach(function (c, i) { var td = el('td'); td.setAttribute('data-label', COLUMNS[type][i]); if (c.dl) { var dl = el('dl', 'hi-dl'); c.dl.forEach(function (kv) { dl.appendChild(el('dt', '', kv[0])); dl.appendChild(el('dd', 'hi-mono', kv[1])); }); td.appendChild(dl); } else if (c.copy) { var box = el('div', 'hi-val'); box.appendChild(el('span', 'hi-mono', c.t)); var cb = el('button', 'hi-copy', 'Copy'); cb.type = 'button'; cb.setAttribute('data-copy', c.t); cb.setAttribute('aria-label', 'Copy value'); box.appendChild(cb); td.appendChild(box); } else { td.appendChild(el('span', '', c.t)); } tr.appendChild(td); }); tbody.appendChild(tr); }); table.appendChild(tbody); wrap.appendChild(table); return wrap; } function buildSection(type) { var r = state.data[type]; var sec = el('div', 'hi-section'); var h = el('h3', '', type + ' Records'); var count = r && r.rows ? r.rows.length : 0; h.appendChild(el('span', 'hi-badge' + (count ? '' : ' is-none'), count + (count === 1 ? ' record' : ' records'))); sec.appendChild(h); sec.appendChild(el('p', 'hi-desc', DESC[type])); if (!r || r.error) { sec.appendChild(el('p', 'hi-empty is-error', 'This lookup failed. Please try again in a moment.')); return sec; } if (count) { sec.appendChild(buildTable(type, r.rows)); } else if (r.rcode === 2) { sec.appendChild(el('p', 'hi-empty is-error', 'The resolver returned SERVFAIL. The domain\u2019s DNS may be misconfigured, or DNSSEC validation failed.')); } else { sec.appendChild(el('p', 'hi-empty', 'No ' + type + ' records found for ' + state.domain + '.')); } if (r.cnames && r.cnames.length && (type === 'A' || type === 'AAAA')) { var chain = r.cnames.map(function (c) { return strip(c.name) + ' \u2192 ' + strip(c.data); }).join(', '); sec.appendChild(el('p', 'hi-note', 'Alias (CNAME) chain followed: ' + chain)); } return sec; } function renderPanel() { panel.textContent = ''; var list = state.filter === 'ALL' ? state.types : [state.filter]; list.forEach(function (t) { panel.appendChild(buildSection(t)); }); } function renderTabs() { tabsBox.textContent = ''; if (state.types.length < 2) { tabsBox.hidden = true; return; } tabsBox.hidden = false; var total = 0; state.types.forEach(function (t) { var r = state.data[t]; total += r && r.rows ? r.rows.length : 0; }); var tabs = [{ key: 'ALL', label: 'All', n: total }].concat(state.types.map(function (t) { var r = state.data[t]; return { key: t, label: t, n: r && r.rows ? r.rows.length : 0 }; })); tabs.forEach(function (t) { var b = el('button', 'hi-tab' + (state.filter === t.key ? ' is-active' : '') + (t.n ? '' : ' is-empty')); b.type = 'button'; b.setAttribute('role', 'tab'); b.setAttribute('aria-selected', state.filter === t.key ? 'true' : 'false'); b.setAttribute('data-key', t.key); b.appendChild(document.createTextNode(t.label)); b.appendChild(el('span', 'hi-count', t.n)); tabsBox.appendChild(b); }); } function run(domain, typeSel) { var types = typeSel === 'ALL' ? ORDER.slice() : [typeSel]; var started = (window.performance && performance.now) ? performance.now() : Date.now(); setLoading(true); setStatus('Looking up DNS records for ' + domain + '\u2026', 'info'); results.hidden = true; Promise.all(types.map(function (t) { return doh(domain, TYPE_IDS[t]).then(function (json) { return { type: t, json: json }; }).catch(function (err) { return { type: t, error: err }; }); })).then(function (list) { var elapsed = ((window.performance && performance.now) ? performance.now() : Date.now()) - started; var failed = 0, nx = 0, resolvers = {}; state.domain = domain; state.types = types; state.data = {}; state.filter = typeSel === 'ALL' ? 'ALL' : typeSel; list.forEach(function (item) { if (item.error) { failed++; state.data[item.type] = { error: true }; return; } var j = item.json; var answers = j.Answer || []; var id = TYPE_IDS[item.type]; var rows = answers.filter(function (a) { return a.type === id; }); if (item.type === 'MX') { rows.sort(function (a, b) { return parseInt(String(a.data).split(/\s+/)[0], 10) - parseInt(String(b.data).split(/\s+/)[0], 10); }); } if (j.Status === 3) { nx++; } if (j.resolver) { resolvers[j.resolver] = true; } state.data[item.type] = { rcode: j.Status, rows: rows.map(function (a) { return toRow(item.type, a); }), cnames: answers.filter(function (a) { return a.type === 5; }) }; }); setLoading(false); if (failed === types.length) { setStatus('We could not reach the public DNS resolvers. Please check your connection and try again.', 'error'); return; } if (nx === types.length - failed && nx > 0) { setStatus('The domain ' + domain + ' does not exist (NXDOMAIN). Check the spelling or confirm the domain is registered.', 'error'); return; }

 

setStatus('', ''); renderTabs(); renderPanel();

 

var names = Object.keys(resolvers).join(' / ') || 'public DNS'; meta.textContent = 'Results for ' + domain + ' via ' + names + ' in ' + (elapsed / 1000).toFixed(2) + ' s \u00b7 ' + new Date().toLocaleString(); results.hidden = false; }); }

 

function submit() { var domain = normalize(input.value); var err = validate(domain); if (err) { results.hidden = true; setStatus(err, 'error'); input.focus(); return; } input.value = domain; run(domain, select.value); }

 

form.addEventListener('submit', function (e) { e.preventDefault(); submit(); });

 

tabsBox.addEventListener('click', function (e) { var b = e.target.closest ? e.target.closest('.hi-tab') : null; if (!b) { return; } state.filter = b.getAttribute('data-key'); renderTabs(); renderPanel(); });

 

panel.addEventListener('click', function (e) { var b = e.target.closest ? e.target.closest('.hi-copy') : null; if (!b) { return; } var text = b.getAttribute('data-copy') || ''; function done() { b.textContent = 'Copied'; b.classList.add('is-done'); setTimeout(function () { b.textContent = 'Copy'; b.classList.remove('is-done'); }, 1500); } if (navigator.clipboard && navigator.clipboard.writeText) { navigator.clipboard.writeText(text).then(done, function () {}); } else { var ta = document.createElement('textarea'); ta.value = text; ta.style.position = 'fixed'; ta.style.opacity = '0'; document.body.appendChild(ta); ta.select(); try { document.execCommand('copy'); done(); } catch (x) { /* ignore */ } document.body.removeChild(ta); } });

 

/* Preview convenience: pre-fill and run once so results are visible immediately */ input.value = 'example.com'; submit(); })();
