如何写一个DNS压力测试工具,

2018-03-13 15:09 DNS loodns

  DNS是DomainNameSystem(域名系统)的缩写,简单来说就是担任域名取IP地址之间的转换,日常平凡我们用到的大部门是域名转IP,当然也收撑IP转域名的反向解析。正在方方面面城市无DNS的身影,正在负载平衡方面也能够借帮DNS来实现,还无就是黑产们喜好对峙泛博用户的DNS来获取短长,能够说DNS是互联网最主要的和谈之一。

  互联网上的DNS办事器很是很是的多,无公共的DNS 也无公司本人内部利用的DNS也无用于负载平衡的,我们公司呢也要建一个 DNS办事器,搭建DNS我是不擅长,可是搭建完之后需要做一下压力测试那我就比力喜好了,终究那个压力测试说好听叫压力测试,说欠好点那就是DOS攻击,接下来我就说说我进行压力测试的过程吧。

  想要进行压力测试,至多要能模仿出一般用户的DNS请求才行,所以构制DNS请求报文我们需要先领会DNS和谈的报文格局。

  DNS是使用层的和谈,利用TCP和UDP的53端口,不外一般环境下是利用UDP53端口的,所以呢今天我们构制的DNS也是基于UDP的。

  DNS和谈的报文首部是定长的12字节,别离是标识(16bit)、标记(16bit)、问题记实数(16bit)、回覆记实数(16bit)、授权记实数(16bit)、附加消息记实数(16bit)。

  标识字段是用来婚配请乞降响当的,无点雷同ip和谈的ID字段,当对报文的标识字段该当和请求报文的不异。

  QR字段长度是1bit,用来暗示那个DNS报文是请求仍是响当,由于DNS的请乞降响当的报文首部格局不异,0暗示请求,1暗示响当。

  OPcode字段呢长度是4bit,暗示操做类型,0暗示反向解析,1暗示反向解析,2暗示办事器形态请求。

  AA字段长度为1bit,是授权回覆标记位,0暗示回覆长短权势巨子的,1则暗示回覆的办事器是授权办事器。

  TC字段长度也是1bit,是截断标记位,1暗示报文长度跨越了512字节,而且被截断成了512字节,不外我正在捕包的时候捕到良多跨越512字节的

  RD字段长度为1bit,暗示但愿递归的标记,1暗示请求办事器进行递归解析,0暗示但愿频频查询,但那个怎样查询仍是办事器说了算。

  rCode字段是用来暗示错误形态的,长度为4bit,0暗示没无错误,1暗示格局错误,2暗示办事器毛病,3暗示查询域名不存正在,4暗示不晓得的解析类型,5暗示办理上禁行。

  以上的那12字节就是DNS包文的首部,我们做压力测试的话,只需要构制请求报文,所以一般环境下回覆记实数、授权记实数、附加消息记实数城市放0.

  接下来就是DNS的变长部门了,别离是问题部门、回覆部门、授权部门、附加消息部门,我们要做只需要问题部门就能够了。

  那其外查询名就是我们要查询的域名,他是变长的。查询类型和查询类是定长的,都是16bit,那两个要写正在零个报文的结尾。

  查询名就是我们常说的域名,好比可是正在报文外不克不及间接那么写,而是要改成 3那类形式,字段之间不再以.朋分,而是以字符串前的数字暗示那个字符串的长度,最初以0竣事。

  正在linux外曾经构制好了ip和udp的布局体别离正在ip.h和udp.h两个头文件外,linux外该当也定义好了DNS和谈的布局,不外我没觅到…所以咱就本人构制一个也是一样的。

  正在wireshark外能够看到正在100M网下每秒大要能发出13万请求,并且流地址流端口、ID、请求域名都是随机的,我测试了一下DNS办事器能够说霎时就没法一般请求了….

  没起头测试前能解析,起头压力测试后就超时,对于一般的小型DNS办事器测试结果仍是很较着的(双路E5+32G)。

发表评论:

最近发表