From 61b6c377948920e1a1fbcfb876d8864287646440 Mon Sep 17 00:00:00 2001 From: Jiri 'Ghormoon' Novak Date: Sun, 21 Sep 2025 23:19:25 +0200 Subject: [PATCH] Basic support for name mode queries --- njs.d/dns/dns.js | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/njs.d/dns/dns.js b/njs.d/dns/dns.js index 1367987..984cbbd 100644 --- a/njs.d/dns/dns.js +++ b/njs.d/dns/dns.js @@ -58,6 +58,8 @@ function process_doh_request(s, decode, scrub) { const lines = dataString.split("\r\n"); var bytes; var packet; + var name; + var type; if(lines[0].startsWith("GET")) { var line = lines[0]; var path = line.split(" ")[1] @@ -68,6 +70,12 @@ function process_doh_request(s, decode, scrub) { bytes = Buffer.from(param.slice(4), "base64url"); return true; } + if (param.startsWith("name=")) { + name = param.split("=")[1]; + } + if (param.startsWith("type=")) { + type = param.split("=")[1]; + } return false; }); } @@ -100,10 +108,23 @@ function process_doh_request(s, decode, scrub) { s.send( bytes, {flush: true} ); } } else { - if ( ! scrub) { - debug(s, "process_doh_request: DNS Req: " + line.toString() ); - s.send(""); - data = ""; + if ( ! name ) { + return; //both dns and name are undefined + } + if ( ! type ) { + type = "A"; + } + debug(s, "process_doh_request: DNS Req: " + line.toString() ); + var packet = { id: 0, flags: 1, codes: 0, min_ttl: 2147483647, qd: 1, question: [], answers:[], authority: [], additional: [] }; + packet.question = {name: name, class: dns.dns_class.IN, type: dns.dns_type[type]} + var encoded = dns.encode_packet(packet); + debug(s, "process_doh_request: DNS encoded: " + encoded.toString('base64') ); + if (scrub) { + domain_scrub(s, encoded, packet); + s.done(); + } else { + s.send(to_bytes(encoded.length)); + s.send(encoded, {flush: true} ); } } });