但请耐心等待。我不需要 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();
}
因此,无论请求是什么,此处理程序都会添加响应记录,如下所示
- AR部分(附加记录)
- 名称"节点.js"
- 键入 TXT(文本字符串)
- 类 (互联网)
- TTL 1991 (~33 分钟)
- 值(文本字符串)
这在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
>
如何发送正确的回复?我想首先为所有 A 记录发送一个固定的 IP 地址,无论如何,并拒绝大多数其他所有内容为不受支持或其他什么。
在典型的 nslookup 登录中,请求一条记录 DNS 服务器中的典型资源记录列表是什么?
我想从发送固定的开始 所有 A 记录的 IP 地址,无论 什么并否认大多数其他一切 作为不支持或其他什么。
啊哈,现在我们到了某个地方。
您需要在答案部分中返回与(第一个)问题中具有相同"所有者名称"的 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 ();
}
这仅处理默认响应,并且不会检查入站查询是否针对 A 记录。
要拒绝其他查询,您需要检查:
req.question.length == 1
req.question[0].type == ndns.ns_t.a
req.question[0].class == ndns.ns_c.in
然后将res.header.rcode
设置为非零值。
真正的权威服务器也会在权限部分发送 DNS 服务器名称,但您应该能够在此处不这样做。