mirror of
				https://github.com/louislam/uptime-kuma.git
				synced 2025-10-31 19:39:20 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			150 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			150 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /*
 | |
|  * 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} Human readable request type
 | |
|  */
 | |
| function type(code) {
 | |
|     for (let name in Packet.TYPE) {
 | |
|         if (Packet.TYPE[name] === code) {
 | |
|             return name;
 | |
|         }
 | |
|     }
 | |
| }
 |