Created
March 27, 2017 21:58
-
-
Save jordicenzano/2d9e09e58023d6444cc07402980e2b59 to your computer and use it in GitHub Desktop.
Get the DNS propagation time
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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