summaryrefslogtreecommitdiffstats
path: root/extra/simple-dns-server.js
diff options
context:
space:
mode:
Diffstat (limited to 'extra/simple-dns-server.js')
-rw-r--r--extra/simple-dns-server.js149
1 files changed, 149 insertions, 0 deletions
diff --git a/extra/simple-dns-server.js b/extra/simple-dns-server.js
new file mode 100644
index 0000000..38bf74f
--- /dev/null
+++ b/extra/simple-dns-server.js
@@ -0,0 +1,149 @@
+/*
+ * Simple DNS Server
+ * For testing DNS monitoring type, dev only
+ */
+const dns2 = require("dns2");
+
+const { Packet } = dns2;
+
+const server = dns2.createServer({
+ udp: true
+});
+
+server.on("request", (request, send, rinfo) => {
+ for (let question of request.questions) {
+ console.log(question.name, type(question.type), question.class);
+
+ const response = Packet.createResponseFromRequest(request);
+
+ if (question.name === "existing.com") {
+
+ if (question.type === Packet.TYPE.A) {
+ response.answers.push({
+ name: question.name,
+ type: question.type,
+ class: question.class,
+ ttl: 300,
+ address: "1.2.3.4"
+ });
+ } else if (question.type === Packet.TYPE.AAAA) {
+ response.answers.push({
+ name: question.name,
+ type: question.type,
+ class: question.class,
+ ttl: 300,
+ address: "fe80::::1234:5678:abcd:ef00",
+ });
+ } else if (question.type === Packet.TYPE.CNAME) {
+ response.answers.push({
+ name: question.name,
+ type: question.type,
+ class: question.class,
+ ttl: 300,
+ domain: "cname1.existing.com",
+ });
+ } else if (question.type === Packet.TYPE.MX) {
+ response.answers.push({
+ name: question.name,
+ type: question.type,
+ class: question.class,
+ ttl: 300,
+ exchange: "mx1.existing.com",
+ priority: 5
+ });
+ } else if (question.type === Packet.TYPE.NS) {
+ response.answers.push({
+ name: question.name,
+ type: question.type,
+ class: question.class,
+ ttl: 300,
+ ns: "ns1.existing.com",
+ });
+ } else if (question.type === Packet.TYPE.SOA) {
+ response.answers.push({
+ name: question.name,
+ type: question.type,
+ class: question.class,
+ ttl: 300,
+ primary: "existing.com",
+ admin: "admin@existing.com",
+ serial: 2021082701,
+ refresh: 300,
+ retry: 3,
+ expiration: 10,
+ minimum: 10,
+ });
+ } else if (question.type === Packet.TYPE.SRV) {
+ response.answers.push({
+ name: question.name,
+ type: question.type,
+ class: question.class,
+ ttl: 300,
+ priority: 5,
+ weight: 5,
+ port: 8080,
+ target: "srv1.existing.com",
+ });
+ } else if (question.type === Packet.TYPE.TXT) {
+ response.answers.push({
+ name: question.name,
+ type: question.type,
+ class: question.class,
+ ttl: 300,
+ data: "#v=spf1 include:_spf.existing.com ~all",
+ });
+ } else if (question.type === Packet.TYPE.CAA) {
+ response.answers.push({
+ name: question.name,
+ type: question.type,
+ class: question.class,
+ ttl: 300,
+ flags: 0,
+ tag: "issue",
+ value: "ca.existing.com",
+ });
+ }
+
+ }
+
+ if (question.name === "4.3.2.1.in-addr.arpa") {
+ if (question.type === Packet.TYPE.PTR) {
+ response.answers.push({
+ name: question.name,
+ type: question.type,
+ class: question.class,
+ ttl: 300,
+ domain: "ptr1.existing.com",
+ });
+ }
+ }
+
+ send(response);
+ }
+});
+
+server.on("listening", () => {
+ console.log("Listening");
+ console.log(server.addresses());
+});
+
+server.on("close", () => {
+ console.log("server closed");
+});
+
+server.listen({
+ udp: 5300
+});
+
+/**
+ * Get human readable request type from request code
+ * @param {number} code Request code to translate
+ * @returns {string|void} Human readable request type
+ */
+function type(code) {
+ for (let name in Packet.TYPE) {
+ if (Packet.TYPE[name] === code) {
+ return name;
+ }
+ }
+}