使用 SampleDNSTool 快速构建 DNS 服务器

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 使用 SampleDNSTool 快速构建 DNS 服务器

SampleDNSTool 是DNS协议golang实现,目前已经实现简单的A/CNAME记录


地址: gitee.com/pdudo/Sampl…


作为运维小白,自己学习DNS相关协议很久了,总觉得差了点什么,后面自己想写一个简单的DNS服务器出来,所以编写了该工具,写个博客记录一下,因为 SampleDNSTool 支持CNAME了。




利用 SampleDNSTool 构建请求报文


仅需要调用GenerateHeadersGenerateQuestion便可以构建相应报文

构建 【查询 www.baidu.comA记录 报文】

package main
import (
  "fmt"
  "time"
  "gitee.com/pdudo/SampleDNSTool"
)
func main() {
  // 定义DnsInfo信息
  var dnsInfo SampleDNSTool.DNSInfo
  // 构建请求报文: 请求头 和 请求 报文
  // heade部分
  dnsInfo.Header.ID = uint16(time.Now().Unix())
  // Qcount: 报文中携带的 问题条蜜
  dnsInfo.Header.QCOUNT = 1
  // question部分
  // 定义查询的 QNAME
  dnsInfo.QueryInfo.QNAMEString = "www.baidu.com"
  // 定义 QType 和 QClass
  dnsInfo.QueryInfo.QTYPE = 1
  dnsInfo.QueryInfo.QCLASS = 1
  // 分别生成 Header 和 question 报文
  header := dnsInfo.GenerateHeaders()
  requests := dnsInfo.GenerateQuestion()
  // 组装报文
  var requestBuf []byte
  requestBuf = append(requestBuf, header...)
  requestBuf = append(requestBuf,requests...)
  fmt.Println("请求报文: " , requestBuf)
}




利用SampleDNSTool获取响应报文


将【1】中报文请求发送至 DNS 服务器,获取其 响应报文信息

package main
import (
  "fmt"
  "log"
  "net"
  "strconv"
  "time"
  "gitee.com/pdudo/SampleDNSTool"
)
func main() {
  // 定义DnsInfo信息
  var dnsInfo SampleDNSTool.DNSInfo
  // 构建请求报文: 请求头 和 请求 报文
  // heade部分
  dnsInfo.Header.ID = uint16(time.Now().Unix())
  // Qcount: 报文中携带的 问题条蜜
  dnsInfo.Header.QCOUNT = 1
  // question部分
  // 定义查询的 QNAME
  dnsInfo.QueryInfo.QNAMEString = "www.baidu.com"
  // 定义 QType 和 QClass
  dnsInfo.QueryInfo.QTYPE = 1
  dnsInfo.QueryInfo.QCLASS = 1
  // 分别生成 Header 和 question 报文
  header := dnsInfo.GenerateHeaders()
  requests := dnsInfo.GenerateQuestion()
  // 组装报文
  var requestBuf []byte
  requestBuf = append(requestBuf, header...)
  requestBuf = append(requestBuf,requests...)
  fmt.Printf("查询域名: %s \t" , dnsInfo.QueryInfo.QNAMEString)
  switch dnsInfo.QueryInfo.QTYPE {
  case 1:
    fmt.Printf("查询类型: A记录 \n\n")
  }
  // 发送上诉报文
  udpConn , err := net.DialUDP("udp",nil,&net.UDPAddr{
    IP: net.IP{114,114,114,114},
    Port: 53,
  })
  if err != nil {
    log.Panic("net dial udp error " , err)
  }
  // 发送报文
  udpConn.Write(requestBuf)
  // 等待DNS服务器回应
  buf := make([]byte,1024)
  n, err := udpConn.Read(buf)
  if err != nil {
    log.Println("udp conn read error " , err)
  }
  // 解析响应报文
  answer := dnsInfo.GetAnswerInfo(buf[:n])
  // 打印解析后报文值
  fmt.Println("查询结果: ")
  for _,v := range answer {
    fmt.Printf("请求域名: %s \t" , v.NAME)
    switch v.TYPE {
    case 1:
      fmt.Printf("请求类型: A记录 \t" )
    case 5:
      fmt.Printf("请求类型: CNAME记录 \t")
    }
    switch v.TYPE {
    case 1:
      var ipString string
      for i:=0;i<len(v.RDATA)-1;i++ {
        ipString += strconv.Itoa(int(uint8(v.RDATA[i]))) + "."
      }
      ipString += strconv.Itoa(int(uint8(v.RDATA[len(v.RDATA)-1])))
      fmt.Printf("结果值: %s \t" , ipString)
    case 5:
      fmt.Printf("结果值: %s \t" , v.RDATAString)
    }
    fmt.Println()
  }
}




执行结果


查询域名: www.baidu.com         查询类型: A记录
查询结果:
请求域名: www.baidu.com         请求类型: CNAME记录     结果值: www.a.shifen.com.
请求域名: www.a.shifen.com      请求类型: A记录         结果值: 14.215.177.39
请求域名: www.a.shifen.com      请求类型: A记录         结果值: 14.215.177.38

怎么样,通过上述2个例子,是不是发现,构建DNS协议怎么会如此得心应手呢,可以尝试一下利用该工具半个小时编写一个返回A记录的DNS服务器吧


代码放在了gitee: gitee.com/pdudo/Sampl…


溜了! 溜了!




相关文章
|
17天前
|
机器学习/深度学习 人工智能 弹性计算
阿里云GPU服务器全解析_GPU价格收费标准_GPU优势和使用说明
阿里云GPU云服务器提供强大的GPU算力,适用于深度学习、科学计算、图形可视化和视频处理等场景。作为亚太领先的云服务商,阿里云GPU云服务器具备高灵活性、易用性、容灾备份、安全性和成本效益,支持多种实例规格,满足不同业务需求。
|
1月前
|
关系型数据库 API 数据库
后端开发的艺术:从零到一构建高效服务器
在数字化时代,后端开发是支撑现代互联网应用的基石。本文旨在探讨后端开发的核心概念、关键技术以及如何构建一个高效的服务器。我们将从基础的编程语言选择开始,逐步深入到数据库设计、API开发和性能优化等关键领域。通过实际案例分析,我们将揭示后端开发的复杂性和挑战性,同时提供实用的解决方案和最佳实践。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和启发。
|
1月前
|
存储 弹性计算 NoSQL
"从入门到实践,全方位解析云服务器ECS的秘密——手把手教你轻松驾驭阿里云的强大计算力!"
【10月更文挑战第23天】云服务器ECS(Elastic Compute Service)是阿里云提供的基础云计算服务,允许用户在云端租用和管理虚拟服务器。ECS具有弹性伸缩、按需付费、简单易用等特点,适用于网站托管、数据库部署、大数据分析等多种场景。本文介绍ECS的基本概念、使用场景及快速上手指南。
73 3
|
2月前
|
监控 网络协议 安全
DNS服务器故障不容小觑,从应急视角谈DNS架构
DNS服务器故障不容小觑,从应急视角谈DNS架构
58 4
|
2月前
|
监控 安全 Java
构建高效后端服务:微服务架构深度解析与最佳实践###
【10月更文挑战第19天】 在数字化转型加速的今天,企业对后端服务的响应速度、可扩展性和灵活性提出了更高要求。本文探讨了微服务架构作为解决方案,通过分析传统单体架构面临的挑战,深入剖析微服务的核心优势、关键组件及设计原则。我们将从实际案例入手,揭示成功实施微服务的策略与常见陷阱,为开发者和企业提供可操作的指导建议。本文目的是帮助读者理解如何利用微服务架构提升后端服务的整体效能,实现业务快速迭代与创新。 ###
65 2
|
2月前
|
存储 固态存储 安全
阿里云服务器X86计算架构解析与X86计算架构云服务器收费价格参考
阿里云服务器架构分为X86计算、Arm计算、高性能计算等多种架构,其中X86计算是用户选择最多的一种架构,本文将深入探讨阿里云X86计算架构的云服务器,包括其技术特性、适用场景、性能优势以及最新价格情况。
|
1月前
|
存储 运维 监控
运维技术深度解析:构建高效、稳定的运维体系
【10月更文挑战第22天】运维技术深度解析:构建高效、稳定的运维体系
166 0
|
1月前
|
人工智能 运维 监控
运维技术深度解析:构建高效、稳定的IT基础设施
【10月更文挑战第22天】运维技术深度解析:构建高效、稳定的IT基础设施
60 0
|
1月前
|
机器学习/深度学习 边缘计算 运维
运维技术深度解析:构建高效、稳定的IT基础设施
【10月更文挑战第22天】运维技术深度解析:构建高效、稳定的IT基础设施
52 0
|
2月前
|
人工智能 关系型数据库 双11
2024年阿里双十一活动解析:助力大家优惠上云!云服务器79元1年起
2024年阿里云双十一活动已启动,提供云服务器79元1年起等特惠,涵盖云数据库、对象存储、无影云电脑等140余款产品免费试用,企业用户还可申请百万补贴金及5亿算力补贴,助力优惠上云。

相关产品

  • 云解析DNS