admin管理员组文章数量:1567760
上一篇我已经解释了DNS请求报文怎么解析,不会的自己坐飞机(飞机入口)。这一篇主要从DNS服务器的角度来解释,如何自己创建响应报文返回给客户端。
就这个命题,可以罗列出DNS服务器在创建response
响应报文时需要解决的问题。
- dns数据报类型
Buffer
? - Node.js中Buffer如何创建?
- 正常情况我们操作的字符串和数字等是否可以转换为
Buffer
? Buffer
是否可以创建response
响应报文指定类型的参数值?response
响应报文与request
请求报文的异同?
说到这,你是不是已经察觉到。既然dns
请求和dns
响应都做了,那是不是自己动手写一个dns代理服务器也可以信手拈来呢。
答案是: Yes
。
那然我们继续完成这最后一步,response
响应报文的创建。
DNS响应报文格式
response
响应报文和request
请求报文格式相同。不同的地方是参数的值不同。
response参数详解
Header
报文头Question
查询的问题Answer
应答Authority
授权应答Additional
附加信息
DNS format
+--+--+--+--+--+--+--+
| Header |
+--+--+--+--+--+--+--+
| Question |
+--+--+--+--+--+--+--+
| Answer |
+--+--+--+--+--+--+--+
| Authority |
+--+--+--+--+--+--+--+
| Additional |
+--+--+--+--+--+--+--+
复制代码
Header报文头
属性说明:
- 客户端请求ID是为了保证收到DNS服务器返回报文时能正确知道是哪一个请求的响应报文。所以一个完整的DNS请求和响应,里面
request
和response
的ID
必须保持一致。 header.qr = 1
,表示响应报文header.ancount
,这个牵涉到应答记录条目,所以要根据应答字段Answer
计算。
var response = {};
var header = response.header = {};
header.id = request.header.id;//id相同,视为一个dns请求
header.qr = 1; //响应报文
header.opcode = 0;//标准查询
header.rd = 1;
header.ra = 0;
header.z = 0;
header.rcode = 0;//没有错误
header.qdcount = 1;
header.nscount = 0;
header.arcount = 0;
header.ancount = 1;//这里answer为一个,所以设置为1.如果有多个answer那么就要考虑多个answer
复制代码
Question 请求数据
将请求数据原样返回。
var question
版权声明:本文标题:DNS 响应报文详解 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/xitong/1726532157a1074271.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论