如何突破DNS报文的512字节限制
—
DNS的512字节限制
根据协议标准,DNS协议同时占用UDP和TCP的53端口,这是为什么呢?
翻阅DNS资料,可以发现,DNS协议默认按UDP传输,为优化传输性能,DNS协议有一个512字节的限制,当数据长度超过了512字节时,DNS协议会改用TCP进行传输。
DNS协议从UDP切换到TCP的过程如下:
1、客户端向服务器发起UDP DNS请求;
2、如果服务器发现DNS响应数据超过512字节,则返回UDP DNS响应中
—
EDNS0
EDNS0:即Extension Mechanisms for DNS (EDNS(0)),详细情况可参考RFC 6891这份文档。
EDNS0是随着网络的发展,在DNS消息格式和它支持的消息内容已不足以满足一些DNS服务器的需求的情况下被提出的,它用于传递包大小,扩展了DNS协议。
EDNS0是在遵循已有的DNS消息格式的基础上增加一些字段,来支持更多的DNS请求业务。当然,具备
—
DNS超过512字节时常规交互
在进行示例之前,我们首先要找到能够产生超过512字节DNS报文的域名及DNS服务器。这是由于大部分的DNS响应都不会很长,而同时,不同的DNS服务器缓存的DNS数据是有差异的。
经过搜集,我们选取了微软的DNS服务器之一:208.84.2.53,同时,选取了进行示例的域名:outlook.com。
常规的DNS请求,不会设置OPT RR的CLASS值,因此会默认在DNS报文大于512字节时,换用TCP传输。
常规DNS交互的实力,选择使用windows自带的nslookup服务进行,命令如下:
nslookup -qt=ANY outlook.com 208.84.2.53
使用Wireshark抓包可看到报文如下:
可以看到,DNS在UDP传输之后自动进行了TCP DNS请求,响应体长度达到1010字节。
自动进行的关键是UDP的DNS响应报文里给truncated进行了置位:
因此,我们只需要找到
—
DNS突破UDP 512字节限制
对于超过512字节的DNS UDP报文,就不是那么容易获得的。一个简单的办法是,到骨干网络上去抓包,抓取DNS服务器之间的DNS同步报文。当然,对很多分析DNS协议的朋友,这不现实。
这里,将介绍一种在PC上产生超过512字节的UDP DNS报文的办法。
使用的仍然是前一节的DNS域名和服务器。
这里,需要找到
—
总结
只要找到合适的方法,就能很方便地突破DNS协议的UDP 512字节限制。如果有什么疑问,可以随时联系我。
长按进行关注。
最新文章
- Linux下python升级至2.7
- hbase读写流程
- [MODX] 3. Placeholder +
- Android从入门到精通pdf+书源代码
- google API的.NET库
- Sereja ans Anagrams
- Php Laravel框架 多表关系处理 之 Eloquent一对多关系处理
- XML编程与应用-读取XML
- extjs最普通的grid
- 【NO.6】HTTP请求-配置-POST请求-GET请求
- Go 语言结构体
- Windows 7无声音的解决方案
- Django Cache缓存系统学习--数据库缓存
- Mac下安装最新版本的Graphviz
- uvm_pre_do
- JavaScript与正则表达式
- Android 友盟SDK 终极解决报错:SocialSDK_QQZone_2.jar contains native libraries that
- Java8使用@sun.misc.Contended避免伪共享(False Sharing)
- MySQL主从介绍 准备工作 配置主 配置从 测试主从同步
- NOI2002银河英雄传说——带权并查集