Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const dgram = require('dgram');
- const server = dgram.createSocket('udp4');
- const dns_suite = require('dns-suite');
- let used = [];
- server.on('error', (err) => {
- server.close();
- throw err;
- });
- server.on('message', async (msg, rinfo) => {
- // console.log(rinfo);
- // console.log(dns_suite.DNSPacket.parse(msg));
- const client = dgram.createSocket('udp4');
- client.on('error', err => { throw err });
- client.on('message', (cmsg, crinfo) => {
- let message_to_forward = cmsg;
- let deserialized_cmsg = dns_suite.DNSPacket.parse(cmsg);
- if (deserialized_cmsg.answer &&
- deserialized_cmsg.answer.find(ans => ['A', 'AAAA'].includes(ans.typeName) && ans.name.split('.').length <= 3) &&
- !used.includes(rinfo.address)) {
- console.log(deserialized_cmsg.answer)
- deserialized_cmsg.answer = deserialized_cmsg.answer.map(answr => answr.address ? new Object({ name: answr.name, className: answr.className, typeName: 'A', address: '192.168.31.146', ttl: 10, labels: answr.labels, ttl: 0 }) : answr);
- const buff = dns_suite.DNSPacket.write(deserialized_cmsg);
- console.log(dns_suite.DNSPacket.parse(buff).answer)
- message_to_forward = buff;
- used.push(rinfo.address);
- }
- server.send(message_to_forward, rinfo.port, rinfo.address, (err, bytes) => { });
- client.close();
- });
- client.send(msg, 53, '1.1.1.1', (err, bytes) => { if (err) throw err });
- // const deserialized_msg = dns_suite.DNSPacket.parse(msg);
- // if (!['A', 'AAAA'].includes(deserialized_msg.question[0].typeName)) return;
- // console.log(deserialized_msg.question[0].name);
- // const address = await dns.promises.resolve(deserialized_msg.question[0].name, deserialized_msg.question[0].typeName);
- // const res_obj = {
- // header: deserialized_msg.header,
- // question: deserialized_msg.question,
- // answer: [{
- // name: deserialized_msg.question[0].name,
- // type: deserialized_msg.question[0].type,
- // typeName: deserialized_msg.question[0].typeName,
- // class: 1,
- // className: "IN",
- // ttl: deserialized_msg.question[0].ttl ? deserialized_msg.question[0].ttl : deserialized_msg.question[0].typeName === "A" ? 291 : 59,
- // address: address[0]
- // }]
- // }
- // res_obj.header.ra = true,
- // res_obj.header.ancount = res_obj.answer.length
- // const serialized_msg = dns_suite.DNSPacket.pack(res_obj);
- // server.send(new Uint8Array(serialized_msg), 53, rinfo.address, (err, bytes) => {});
- // console.log(res_obj);
- // console.log(deserialized_msg);
- });
- server.on('listening', () => {
- console.log(`Listening on ${server.address().address}:${server.address().port}`)
- });
- server.bind(53, '192.168.31.146');
- // dns.promises.lookup('google.com').then(res => console.log(res)).catch(console.error);
- // console.log(dns.getServers())
- // dns.promises.lookupService('172.217.20.174', 443).then(console.log).catch(console.error)
- function clear_used() {
- used = [];
- console.log('clear');
- }
- setInterval(clear_used, 10000)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement