Advertisement
Guest User

Untitled

a guest
Feb 26th, 2020
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.18 KB | None | 0 0
  1. const dgram = require('dgram');
  2. const server = dgram.createSocket('udp4');
  3. const dns_suite = require('dns-suite');
  4. let used = [];
  5. server.on('error', (err) => {
  6. server.close();
  7. throw err;
  8. });
  9. server.on('message', async (msg, rinfo) => {
  10. // console.log(rinfo);
  11. // console.log(dns_suite.DNSPacket.parse(msg));
  12. const client = dgram.createSocket('udp4');
  13. client.on('error', err => { throw err });
  14. client.on('message', (cmsg, crinfo) => {
  15. let message_to_forward = cmsg;
  16. let deserialized_cmsg = dns_suite.DNSPacket.parse(cmsg);
  17. if (deserialized_cmsg.answer &&
  18. deserialized_cmsg.answer.find(ans => ['A', 'AAAA'].includes(ans.typeName) && ans.name.split('.').length <= 3) &&
  19. !used.includes(rinfo.address)) {
  20. console.log(deserialized_cmsg.answer)
  21. 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);
  22.  
  23. const buff = dns_suite.DNSPacket.write(deserialized_cmsg);
  24. console.log(dns_suite.DNSPacket.parse(buff).answer)
  25. message_to_forward = buff;
  26. used.push(rinfo.address);
  27. }
  28. server.send(message_to_forward, rinfo.port, rinfo.address, (err, bytes) => { });
  29. client.close();
  30. });
  31. client.send(msg, 53, '1.1.1.1', (err, bytes) => { if (err) throw err });
  32. // const deserialized_msg = dns_suite.DNSPacket.parse(msg);
  33. // if (!['A', 'AAAA'].includes(deserialized_msg.question[0].typeName)) return;
  34. // console.log(deserialized_msg.question[0].name);
  35. // const address = await dns.promises.resolve(deserialized_msg.question[0].name, deserialized_msg.question[0].typeName);
  36. // const res_obj = {
  37. // header: deserialized_msg.header,
  38. // question: deserialized_msg.question,
  39. // answer: [{
  40. // name: deserialized_msg.question[0].name,
  41. // type: deserialized_msg.question[0].type,
  42. // typeName: deserialized_msg.question[0].typeName,
  43. // class: 1,
  44. // className: "IN",
  45. // ttl: deserialized_msg.question[0].ttl ? deserialized_msg.question[0].ttl : deserialized_msg.question[0].typeName === "A" ? 291 : 59,
  46. // address: address[0]
  47. // }]
  48. // }
  49. // res_obj.header.ra = true,
  50. // res_obj.header.ancount = res_obj.answer.length
  51. // const serialized_msg = dns_suite.DNSPacket.pack(res_obj);
  52. // server.send(new Uint8Array(serialized_msg), 53, rinfo.address, (err, bytes) => {});
  53. // console.log(res_obj);
  54. // console.log(deserialized_msg);
  55. });
  56. server.on('listening', () => {
  57. console.log(`Listening on ${server.address().address}:${server.address().port}`)
  58. });
  59. server.bind(53, '192.168.31.146');
  60.  
  61. // dns.promises.lookup('google.com').then(res => console.log(res)).catch(console.error);
  62. // console.log(dns.getServers())
  63.  
  64. // dns.promises.lookupService('172.217.20.174', 443).then(console.log).catch(console.error)
  65. function clear_used() {
  66. used = [];
  67. console.log('clear');
  68. }
  69. setInterval(clear_used, 10000)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement