但请耐心等待我。我不需要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();
}
因此,无论请求是什么,此处理程序都会添加如下响应记录
在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服务器的典型资源记录列表是什么?
答案 0 :(得分:5)
啊,啊哈,现在我们到了某个地方。我想先发送一个固定的 所有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服务器名称,但是你应该可以在这里不用这样做。