通过gopacket解析DNS请求协议。

读取单个数据包 ,IP层ID为19777。
读取19777数据包DNS协议的TransactionID

package mainimport ("fmt""time""github.com/google/gopacket/layers""github.com/google/gopacket""github.com/google/gopacket/pcap"
)func main() {start := time.Now()//some func or operationhandle, _ := pcap.OpenOffline("dns.pcap")defer handle.Close()packetSource := gopacket.NewPacketSource(handle,handle.LinkType(),)var length = 0for packet := range packetSource.Packets() {ipLayer := packet.Layer(layers.LayerTypeIPv4)if ipLayer != nil {ip, _ := ipLayer.(*layers.IPv4)dnsLayer := packet.Layer(layers.LayerTypeDNS)length = length + int(ip.Length) + 20if ip.Id == 19777 {dns, _ := dnsLayer.(*layers.DNS)fmt.Println(dns.ID)}}}fmt.Println("LEN:", length)cost := time.Since(start)fmt.Printf("cost=[%s]", cost)}


结果为8408

获取其他内容

package mainimport ("fmt""time""github.com/google/gopacket/layers""github.com/google/gopacket""github.com/google/gopacket/pcap"
)func main() {start := time.Now()//some func or operationhandle, _ := pcap.OpenOffline("dns.pcap")defer handle.Close()packetSource := gopacket.NewPacketSource(handle,handle.LinkType(),)var length = 0for packet := range packetSource.Packets() {ipLayer := packet.Layer(layers.LayerTypeIPv4)if ipLayer != nil {ip, _ := ipLayer.(*layers.IPv4)dnsLayer := packet.Layer(layers.LayerTypeDNS)length = length + int(ip.Length) + 20if ip.Id == 19777 || ip.Id == 65326 {dns, _ := dnsLayer.(*layers.DNS)fmt.Println("dnsID:", dns.ID)fmt.Println("answers:", dns.ANCount)fmt.Println("是否是回应包:", dns.QR) //false查询、true回应fmt.Println("Queries:", string(dns.Questions[0].Name))//Answersfor _, v := range dns.Answers {//fmt.Println("Answers:", v.String())fmt.Println("Answers:", v.String())fmt.Println("Answers-name:", v.Type)}fmt.Println("===========")}}}fmt.Println("LEN:", length)cost := time.Since(start)fmt.Printf("cost=[%s]", cost)}


另一种写法

package mainimport ("fmt""time""github.com/google/gopacket/layers""github.com/google/gopacket""github.com/google/gopacket/pcap"
)func main() {start := time.Now()//some func or operationhandle, _ := pcap.OpenOffline("dns.pcap")defer handle.Close()packetSource := gopacket.NewPacketSource(handle,handle.LinkType(),)var length = 0// 创建所有所需的变量var eth layers.Ethernetvar ip4 layers.IPv4var udp layers.UDPvar dns layers.DNSparser := gopacket.NewDecodingLayerParser(layers.LayerTypeEthernet, &eth, &ip4, &udp, &dns)decodedLayers := []gopacket.LayerType{}//   解析for packet := range packetSource.Packets() {parser.DecodeLayers(packet.Data(), &decodedLayers)if ip4.Id == 19777 || ip4.Id == 65326 {fmt.Println("dnsID:", dns.ID)fmt.Println("answers:", dns.ANCount)fmt.Println("是否是回应包:", dns.QR) //false查询、true回应fmt.Println("Queries:", string(dns.Questions[0].Name))//Answersfor _, v := range dns.Answers {//fmt.Println("Answers:", v.String())fmt.Println("Answers:", v.String())fmt.Println("Answers-name:", v.Type)}fmt.Println("===========")}}fmt.Println("LEN:", length)cost := time.Since(start)fmt.Printf("cost=[%s]", cost)}

gopacket解析DNS协议相关推荐

  1. 前端网络基础-应用层DNS协议

    目录 初识域名 正向解析和反向解析 DNS解析 主机本地hosts文件实现DNS解析 浏览器缓存实现DNS解析 本地DNS服务器实现DNS解析 域名的组成 DNS迭代解析 DNS递归解析 DNS协议 ...

  2. 计算机网络——DNS协议

    文章目录 DNS协议 DNS提供的服务 DNS简介 服务 DNS工作原理概述 DNS服务器分类 根DNS服务器 顶级域(TLD)DNS服务器 权威DNS服务器 本地DNS服务器 一趟DNS查询过程解析 ...

  3. 使用Wireshark进行DNS协议解析

    " DNS协议格式解析及说明." DNS即域名系统(Domain Name System),是用来将域名与IP地址建立映射的协议,通过DNS协议,可以方便记忆. DNS可基于TCP ...

  4. 868-超详细 DNS 协议解析

    0. 前言 为了保证网址的正常访问,域名解析协议(DNS)其实在背后做出了很多努力,本文将透彻讲解 DNS 协议的原理,了解我们每天都在接触的网址到底是怎么工作的. 1. 什么是 DNS 协议 在学习 ...

  5. 超详细的 DNS 协议解析

    文章目录 0. 前言 1. 什么是 DNS 协议 2. 域名详解 3. 域名服务器详解 4. DNS 查询方式 5. 域名缓存 6. 完整域名解析过程 0. 前言 为了保证网址的正常访问,域名解析协议 ...

  6. 头歌 DNS协议分析 第4关 NS 类型的 DNS 解析报文分析

    任务描述 相关知识 如何捕获 NS 类型的 DNS 报文 解析 DNS 请求报文 传输层协议使用 TCP 还是 UDP ? 解析 DNS 应答报文 操作要求 测试说明 任务描述 本关任务:分析 NS ...

  7. 万字长文爆肝 DNS 协议!

    试想一个问题,我们人类可以有多少种识别自己的方式?可以通过身份证来识别,可以通过社保卡号来识别,也可以通过驾驶证来识别,尽管我们有多种识别方式,但在特定的环境下,某种识别方法可能比另一种方法更为适合. ...

  8. DIY一个DNS查询器:了解DNS协议

    每当我们在浏览器上敲入任何一个域名访问某个网站的时候,我们都要使用Dns协议进行一次"域名:IP"的查询;作为命令行使用者,与dns有关用的最多的就是Nslookup 命令吧:作为 ...

  9. DNS协议详解及报文格式分析

    https://blog.csdn.net/tianxuhong/article/details/74922454 目录 一. DNS协议理论知识 1.1. 域名结构 1.2. 域名服务器 1.3. ...

最新文章

  1. 零基础如何掌握web前端开发技能
  2. nagios 3.2安装详解(一)
  3. 动态规划立体匹配代码_411,动态规划和递归求不同路径 II
  4. 中国影视股,越补贴,越萎靡
  5. 福建三明市梅列区巧用“智慧梅列” 助推重大项目建设
  6. 在ROS中使用Neato XV-11 激光雷达
  7. TensorFlow tf.keras.layers.DenseFeatures
  8. 必须了解的程序员 8个职业发展方向
  9. 老版TP-Link路由器设置固定时间上网
  10. 系列篇|单目结构光三维成像系统的标定方法
  11. html显示doc内容,doc文件怎么打开?doc是什么文件?
  12. python getmenu不到菜单句柄_Python and Menu[编程点滴1]
  13. 量子计算机 量子不确定性_量子计算机将打破互联网,但前提是我们让它们
  14. 报表技术2(百万数据导入导出,POI操作word)
  15. DNA转换为C语言,DNA (C语言代码)
  16. 浅谈Session并且实现购物车
  17. 【零基础微信小程序入门开发一】小程序介绍及环境搭建
  18. 你还不知道 BTree,B-Tree,B+Tree 的区别吗?
  19. 30秒集结会议、能开“会中会” IMO班聊助力高效协同办公
  20. 计算机桌面体验,安装具有桌面体验的服务器

热门文章

  1. 老薛主机磁盘空间满了怎么办
  2. 游戏动漫业的崛起,3D建模师年薪30W,真的还是假的?
  3. oracle 中exits 和in的的使用
  4. 机器学习算法(一)SVM
  5. 安装ENDNOTE后在Word里面找不到怎么办?
  6. scrollTop方法无效问题
  7. cesium实现下雨下雪特效
  8. containsKey
  9. css 背景色透明且渐变且不影响文字颜色
  10. BootLoader基础详解