Public
Edited
Mar 15, 2023
1 star
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
doh_nameserver_url = `https://1.1.1.1/dns-query`;
Insert cell
resolver = {
const { DohResolver } = await require('https://cdn.jsdelivr.net/npm/dohjs@latest/dist/doh.min.js');
return new DohResolver(doh_nameserver_url);
}
Insert cell
queryDnsRecords = async (domainName, recordType = 'A') => {

/* guard against missing inputs */
if (!domainName) throw Error(`No DNS domain name provided: "${domainName}"`);
if (!recordType) throw Error(`No DNS record type provided: "${recordType}"`);

/* run query, catch timeouts/errors */
let res;
try {
res = await resolver.query(domainName, recordType, 'GET', 'Accept: application/dns-message', 1000);
} catch (err) {
return err;
}

/* trap DNS error response codes */
if (res.rcode !== 'NOERROR') {
switch (res.rcode) {
case 'NXDOMAIN':
throw Error("NXDOMAIN: DNS query failed because the domain name queried does not exist");
break;
case 'SERVFAIL':
throw Error("SERVFAIL: DNS query failed because the answer cannot be given");
break;
case 'REFUSED':
throw Error("REFUSED: DNS query failed because the server refused to anser due to policy");
break;
default:
throw Error("DNS query returned an unknown response code");
}
}
return res.answers;
}
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more