如何突破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字节限制。如果有什么疑问,可以随时联系我。
长按进行关注。
如何突破DNS报文的512字节限制的更多相关文章
- TCP协议承载的DNS报文,DNS报文首部前多出两个字节的DNS报文长度字段,是何意义?
一.TCP报文头部简介 ●源.目标端口号字段:占16比特.TCP协议通过使用"端口"来标识源端和目标端的应用进程.端口号可以使用0到65535之间的任何数字.在收到服务请求时,操作 ...
- DNS报文格式(RFC1035)
一.域名和资源记录的定义 1.Name space definitions 2.资源记录定义(RR definitions) 2.1 格式 后面分析报文的时候详细解释. ...
- DNS报文格式
原文链接地址:http://blog.chinaunix.net/uid-24875436-id-3088461.html DNS报文格式(借个图贴过来): 说明一下:并不是所有DNS报文都有 ...
- 分配粒度和内存页面大小(x86处理器平台的分配粒度是64K,内存页是4K,所以section都是0x1000对齐,硬盘扇区大小是512字节,所以PE文件默认文件对齐是0x200)
分配粒度和内存页面大小 x86处理器平台的分配粒度是64K,32位CPU的内存页面大小是4K,64位是8K,保留内存地址空间总是要和分配粒度对齐.一个分配粒度里包含16个内存页面. 这是个概念,具体不 ...
- 512字节纠错1位的ECC校验码生成演示
Flash型号: NandFlash型号:TC58NVG2S3ETA00 pagesize: 2KB oobsize : 64B blocksize : 128K 关于ECC可以参考:http:// ...
- 为什么 DNS 协议使用 UDP?只使用了 UDP 吗?
尽人事,听天命.博主东南大学硕士在读,携程 Java 后台开发暑期实习生,热爱健身和篮球,乐于分享技术相关的所见所得,关注公众号 @ 飞天小牛肉,第一时间获取文章更新,成长的路上我们一起进步 本文已收 ...
- DNS同时占用UDP和TCP端口53——传输数据超过512时候用tcp,DNS服务器可以配置仅支持UDP查询包
DNS同时占用UDP和TCP端口53是公认的,这种单个应用协议同时使用两种传输协议的情况在TCP/IP栈也算是个另类.但很少有人知道DNS分别在什么情况下使用这两种协议. 先简单介绍下TCP与UDP. ...
- DNS分别在什么情况下使用UDP和TCP
DNS同时占用UDP和TCP端口53是公认的,这种单个应用协议同时使用两种传输协议的情况在TCP/IP栈也算是个另类.但很少有人知道DNS分别在什么情况下使用这两种协议. 如果用wiresha ...
- 域名服务器--DNS
.域名 .DNS.DNS 端口号 .DNS服务器 .域名解析过程及原理 .动态域名解析(DDNS)服务的原理 域名 域名是与主机名称一一对应的一个名字.使得人们可以通过ip的名字来访问ip,域名就是为 ...
随机推荐
- PlayJava Day019
今日所学: /* 2019.08.19开始学习,此为补档. */ 1.this: ①this是成员方法的一个特殊的固有的本地变量,它表达了调用这个方法的那个对象. ②在成员方法内部直接调用自己(thi ...
- MySQL中if的写法
关键词:IF --if 判断,如果 device_num 的值为1,则赋值为100,反之为200 SELECT district, shop_name, IF ( device_num , , ) A ...
- TP5 查询mysql数据库时的find_in_set用法
$where['class_id'] = ['in', '$cid_all']; $where['id'] = ['in', $all_user_id];//或这样子 $where['title'] ...
- Django源码安装xadmin报错Apps aren't loaded yet.
环境:python2.7, django1.9 1.报错django.core.exceptions.AppRegistryNotReady:Apps aren't loaded yet.如下图所示: ...
- 【转载】Java中的多线程超详细的总结
引 如果对什么是线程.什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内. 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现.说这个 ...
- ubuntu 安装精简桌面; VNC; vncserver 配置
安装最简单的环境: apt-get install gnome-shell apt-get install gnome-panel apt-get install gnome-menus ...
- vue项目搭建及创建、目录结构、项目启动、全局配置
Vue项目环境搭建 """ node ~~ python:node是用c++编写用来运行js代码的 npm(cnpm) ~~ pip:npm是一个终端应用商城,可以换国内 ...
- CSharpGL(55)我是这样理解PBR的
CSharpGL(55)我是这样理解PBR的 简介 PBR(Physically Based Rendering),基于物理的渲染,据说是目前最先进的实时渲染方法.它比Blinn-Phong方法的真实 ...
- python实现圣诞树
先来个迷你的 *_* height = 5 stars = 1 for i in range(height): print((' ' * (height - i)) + ('*' * stars)) ...
- 《细说PHP》第四版 样章 第23章 自定义PHP接口规范 5
23.3 接口的安全控制规范 23.2节的示例实现了一个简单接口,但是这个接口此时是在“裸奔”的.因为这个接口所有人都可以请求,不仅我们的客户端可以正常访问数据,如果有人使用如fiddler.wir ...