但请耐心等待我.我不需要ndns或JavaScript的帮助.我需要有关DNS资源记录的帮助.
我已经可以发送资源记录了.我只需要知道如何为权威DNS服务器发送正确的.
我正在使用ndns编写DNS服务器.Ndns应该为我做低级别的通信,但我仍然需要了解DNS的基础知识.除此示例外,未记录Ndns.它是在JavaScript中,但无论如何都应该很容易阅读.收到请求后,它会向响应添加资源记录并发送响应
function handleDnsRequest(request, response) {
response.addRR(
ndns.ns_s.ar, // Section AR
'node.js', // Name
ndns.ns_t.txt, // Type TXT
ndns.ns_c.in, // Class IN
1991, // TTL
'http://nodejs.org/' // Value
);
response.send();
}
Run Code Online (Sandbox Code Playgroud)
因此,无论请求是什么,此处理程序都会添加如下响应记录
这在Windows nslookup上提供了此输出
C:\>nslookup - 127.0.0.1
node.js text =
"http://nodejs.org/"
Default Server: UnKnown
Address: 127.0.0.1
> google.com
Server: UnKnown
Address: 127.0.0.1
Name: google.com
>
Run Code Online (Sandbox Code Playgroud)
我该如何发送正确答案?我想首先为所有A记录发送一个固定的IP地址,无论如何,并拒绝其他大多数其他不支持或诸如此类的东西.
在典型的nslookup登录中,请求记录什么是DNS服务器的典型资源记录列表?
我想首先为所有A记录发送一个固定的IP地址,无论如何,并拒绝其他大多数其他不支持或诸如此类的东西.
啊哈,现在我们到了某个地方.
您需要在答案部分返回一个RR,该RR 具有与(第一个)问题中相同的"所有者名称",并带有相应的字段.
试试这个:
function listener (req, res)
{
res.addRR(
ndns.ns_s.an, // answer section
req.question[0].name, // name
ndns.ns_t.a, // type
ndns.ns_c.in, // class
3600, // TTL
'127.0.0.1' // RDATA
);
res.header.aa = 1; // authoritative answer
res.header.ra = 0; // recursion not available
res.send ();
}
Run Code Online (Sandbox Code Playgroud)
这仅处理默认响应,并不检查入站查询是否针对A记录.
要拒绝其他查询,您需要检查:
req.question.length == 1
req.question[0].type == ndns.ns_t.a
req.question[0].class == ndns.ns_c.in
Run Code Online (Sandbox Code Playgroud)
然后设置res.header.rcode为非零值.
一个真正的权威服务器也会在权限部分发送DNS服务器名称,但是你应该能够在这里没有这样做.