mirror of
				https://github.com/louislam/uptime-kuma.git
				synced 2025-11-04 05:36:13 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			145 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			145 lines
		
	
	
		
			4.5 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"
 | 
						|
                });
 | 
						|
            } 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
 | 
						|
});
 | 
						|
 | 
						|
function type(code) {
 | 
						|
    for (let name in Packet.TYPE) {
 | 
						|
        if (Packet.TYPE[name] === code) {
 | 
						|
            return name;
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |