Skip to content

Instantly share code, notes, and snippets.

@jordicenzano
Created March 27, 2017 21:58
Show Gist options
  • Save jordicenzano/2d9e09e58023d6444cc07402980e2b59 to your computer and use it in GitHub Desktop.
Save jordicenzano/2d9e09e58023d6444cc07402980e2b59 to your computer and use it in GitHub Desktop.
Get the DNS propagation time
#!/usr/bin/env node
const dns = require('dns');
const options = {
ttl: true
};
if (process.argv.length < 4) {
console.error("Usage dns-propagation-time-check.js domain ip_target");
return 1;
}
var domain = process.argv[2];
var ip_target = process.argv[3];
var start_time = (new Date).getTime();
function resolveDns(domain, ip_target, callback) {
dns.resolve4(domain, options, function (err, addresses) {
var str_addr = [];
var found = false;
if (err) {
console.warn("ERROR: " + JSON.stringify(err));
}
else {
for (var i = 0; i < addresses.length; i++) {
var addr = addresses[i];
str_addr.push(addr.address + "(" + addr.ttl + ")");
if (checkIp(addr.address, ip_target))
found = true;
}
console.log('Time: %s, addresses(ttl): %s, family: IPv4', new Date().toISOString(), str_addr.join(", "));
}
if (found)
return callback("",(new Date).getTime());
else
setTimeout(resolveDns, 1000, domain, ip_target, callback);
});
}
function checkIp(ip1, ip2) {
var ret = false;
var a = ip1.split(".");
var b = ip2.split(".");
if ( (a.length == b.length) && (a.length == 4) && (parseInt(a[0]) == parseInt(b[0])) && (parseInt(a[1]) == parseInt(b[1])) && (parseInt(a[2]) == parseInt(b[2])) && (parseInt(a[3]) == parseInt(b[3])) )
ret = true;
return ret;
}
resolveDns(domain, ip_target, function(err, end_time) {
if (err)
console.error("ERROR! " + JSON.stringify(err));
console.log("Propagation time: " + (end_time - start_time) / 1000.0)
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment