Skip to content

Instantly share code, notes, and snippets.

@JaosnHsieh
Forked from vikrum/firedns.js
Created May 27, 2018 11:40
Show Gist options
  • Save JaosnHsieh/542e1dda81a0f80bee7ca9f396ec5fed to your computer and use it in GitHub Desktop.
Save JaosnHsieh/542e1dda81a0f80bee7ca9f396ec5fed to your computer and use it in GitHub Desktop.
A custom DNS server in NodeJS that saves off queries to Firebase so they can be retrieved later. Accompanying blog post: http://5f5.org/ruminations/dns-debugging-over-http.html
var crypto = require('crypto');
var dns = require('native-dns');
var rest = require('restler');
var server = dns.createServer();
server.on('request', function (request, response) {
var domain = request.question[0].name;
if(domain == 'webutils.flourishworks.com') {
// Don't log this because it can't be uniquely identified and subsequently retrieved
response.answer.push(dns.CNAME( { name: domain, data: 'ghs.googlehosted.com.', ttl: 30 }));
response.send();
}
else {
var sha256 = crypto.createHash('sha256').update(domain).digest("hex");
rest.postJson('http://firedns.firebaseio.com/'+sha256+'/.json',
{ poweredBy: 'Firebase',
timestamp: new Date().getTime(),
header: request.header,
question: request.question,
address: request.address}
).on('complete', function() {
response.answer.push(dns.CNAME( { name: domain, data: 'ghs.googlehosted.com.', ttl: 30 }));
response.send();
});
}
});
server.on('error', function (err, buff, req, res) { console.log(err.stack); });
server.serve(53);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment