@nerdytechy/dns-info
Version:
Easily fetch all DNS records on a domain with a single high-speed function.
58 lines (54 loc) • 1.77 kB
JavaScript
var dns = require("native-dns");
var Promise = require("bluebird");
var _ = require("lodash");
const defaults = {
server: {
address: "8.8.8.8",
port: 53,
type: "udp",
},
timeout: 2000,
};
module.exports = function fetchDnsInfo(param) {
var config = parseConfig(param, defaults);
var allTypes = Object.keys(dns.consts.NAME_TO_QTYPE).map(function (type) {
return new Promise(function (resolve, reject) {
dns.Request({
question: dns.Question({
name: config.domain,
type: type,
}),
server: config.server,
timeout: config.timeout,
})
.on("timeout", function () {
reject("Request timed out whilst fetching DNS information.");
})
.on("message", function (err, res) {
resolve(err || res);
})
.send();
});
});
return Promise.reduce(
allTypes,
function (result, response) {
if (response.answer.length) {
var questionType = dns.consts.QTYPE_TO_NAME[response.question[0].type];
var data = response.answer.map(function (entry) {
return _(entry).omit("type", "name", "class").value();
});
result.records.push({ type: questionType, data: data });
}
return result;
},
{ domain: config.domain, records: [] }
);
};
function parseConfig(param, defaults) {
if (typeof param === "string") {
return _.assign({}, defaults, { domain: param });
} else {
return _.assign({}, defaults, param);
}
}