Skip to content

Instantly share code, notes, and snippets.

@jaames
Last active June 25, 2020 11:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jaames/f3c1d66b40349af6cab89c113dd0e7fd to your computer and use it in GitHub Desktop.
Save jaames/f3c1d66b40349af6cab89c113dd0e7fd to your computer and use it in GitHub Desktop.
Crappy NodeJS DNS logger for debugging (plus response overrides!)
const dnsServer = require('dnsd');
const { Resolver } = require('dns').promises;
const overrides = [
{ name: 'game-prod.indreams.me', type: 'A', addresses: [`52.213.80.7`, `54.194.121.14`, `34.251.37.65`] }
];
const resolver = new Resolver();
resolver.setServers(['1.1.1.1']);
const server = dnsServer.createServer(function(req, res) {
let logLines = [];
const { connection, type, id } = req;
const question = req.question[0];
logLines.push('-------------------------------');
logLines.push('connection:');
logLines.push(` type: ${ connection.type }, remote addr: ${ connection.remoteAddress }, remote port: ${ connection.remotePort }`);
logLines.push('question:');
logLines.push(` name: ${ question.name }, type: ${ question.type }, class: ${ question.class }`);
function doResponse(name, type, addresses) {
addresses.forEach(address => {
res.answer.push({
name: name,
type: type,
data: address,
ttl: 60
});
});
res.end();
}
const override = overrides.find(override => (override.type === question.type) && (override.name === question.name));
if (override) {
const addresses = override.addresses;
logLines.push('answer (override):');
logLines.push(` ${ addresses.join(', ') }`);
doResponse(question.name, question.type, addresses);
console.log(logLines.join('\n'));
logLines = [];
}
else {
resolver.resolve(question.name, question.type).then((addresses) => {
logLines.push('answer (passthrough):');
logLines.push(` ${ addresses.join(', ') }`);
doResponse(question.name, question.type, addresses);
console.log(logLines.join('\n'));
logLines = [];
});
}
});
server.listen(53, '0.0.0.0');
console.log('DNS running');
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment