gopacket解析DNS协议
通过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, ð, &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协议相关推荐
- 前端网络基础-应用层DNS协议
目录 初识域名 正向解析和反向解析 DNS解析 主机本地hosts文件实现DNS解析 浏览器缓存实现DNS解析 本地DNS服务器实现DNS解析 域名的组成 DNS迭代解析 DNS递归解析 DNS协议 ...
- 计算机网络——DNS协议
文章目录 DNS协议 DNS提供的服务 DNS简介 服务 DNS工作原理概述 DNS服务器分类 根DNS服务器 顶级域(TLD)DNS服务器 权威DNS服务器 本地DNS服务器 一趟DNS查询过程解析 ...
- 使用Wireshark进行DNS协议解析
" DNS协议格式解析及说明." DNS即域名系统(Domain Name System),是用来将域名与IP地址建立映射的协议,通过DNS协议,可以方便记忆. DNS可基于TCP ...
- 868-超详细 DNS 协议解析
0. 前言 为了保证网址的正常访问,域名解析协议(DNS)其实在背后做出了很多努力,本文将透彻讲解 DNS 协议的原理,了解我们每天都在接触的网址到底是怎么工作的. 1. 什么是 DNS 协议 在学习 ...
- 超详细的 DNS 协议解析
文章目录 0. 前言 1. 什么是 DNS 协议 2. 域名详解 3. 域名服务器详解 4. DNS 查询方式 5. 域名缓存 6. 完整域名解析过程 0. 前言 为了保证网址的正常访问,域名解析协议 ...
- 头歌 DNS协议分析 第4关 NS 类型的 DNS 解析报文分析
任务描述 相关知识 如何捕获 NS 类型的 DNS 报文 解析 DNS 请求报文 传输层协议使用 TCP 还是 UDP ? 解析 DNS 应答报文 操作要求 测试说明 任务描述 本关任务:分析 NS ...
- 万字长文爆肝 DNS 协议!
试想一个问题,我们人类可以有多少种识别自己的方式?可以通过身份证来识别,可以通过社保卡号来识别,也可以通过驾驶证来识别,尽管我们有多种识别方式,但在特定的环境下,某种识别方法可能比另一种方法更为适合. ...
- DIY一个DNS查询器:了解DNS协议
每当我们在浏览器上敲入任何一个域名访问某个网站的时候,我们都要使用Dns协议进行一次"域名:IP"的查询;作为命令行使用者,与dns有关用的最多的就是Nslookup 命令吧:作为 ...
- DNS协议详解及报文格式分析
https://blog.csdn.net/tianxuhong/article/details/74922454 目录 一. DNS协议理论知识 1.1. 域名结构 1.2. 域名服务器 1.3. ...
最新文章
- 零基础如何掌握web前端开发技能
- nagios 3.2安装详解(一)
- 动态规划立体匹配代码_411,动态规划和递归求不同路径 II
- 中国影视股,越补贴,越萎靡
- 福建三明市梅列区巧用“智慧梅列” 助推重大项目建设
- 在ROS中使用Neato XV-11 激光雷达
- TensorFlow tf.keras.layers.DenseFeatures
- 必须了解的程序员 8个职业发展方向
- 老版TP-Link路由器设置固定时间上网
- 系列篇|单目结构光三维成像系统的标定方法
- html显示doc内容,doc文件怎么打开?doc是什么文件?
- python getmenu不到菜单句柄_Python and Menu[编程点滴1]
- 量子计算机 量子不确定性_量子计算机将打破互联网,但前提是我们让它们
- 报表技术2(百万数据导入导出,POI操作word)
- DNA转换为C语言,DNA (C语言代码)
- 浅谈Session并且实现购物车
- 【零基础微信小程序入门开发一】小程序介绍及环境搭建
- 你还不知道 BTree,B-Tree,B+Tree 的区别吗?
- 30秒集结会议、能开“会中会” IMO班聊助力高效协同办公
- 计算机桌面体验,安装具有桌面体验的服务器