指纹识别之dns

https://ephen.me/2017/dns-tcp/
https://c.biancheng.net/view/6457.html
https://www.jianshu.com/p/b483300378af
https://www.cnblogs.com/549294286/p/5172448.html

wireshark数据包分析

Packet Details Pane(数据包详细信息), 在数据包列表中选择指定数据包,在数据包详细信息中会显示数据包的所有详细信息内容。数据包详细信息面板是最重要的,用来查看协议中的每一个字段。各行信息分别为
(1)Frame: 物理层的数据帧概况
(2)Ethernet II: 数据链路层以太网帧头部信息
(3)Internet Protocol Version 4: 互联网层IP包头部信息
(4)User Datagram Protocol: 传输层的数据段头部信息,此处是UDP
(5)Domain Name System : 应用层的信息,此处是DNS协议

请求包
在这里插入图片描述
响应包
在这里插入图片描述

DNS数据包格式

在这里插入图片描述
事务 ID、标志、问题计数、回答资源记录数、权威名称服务器计数、附加资源记录数这 6 个字段是DNS的报文首部,共 12 个字节。

整个 DNS 格式主要分为 3 部分内容,即基础结构部分、问题部分、资源记录部分。

事务 ID:DNS 报文的 ID 标识。对于请求报文和其对应的应答报文,该字段的值是相同的。通过它可以区分 DNS 应答报文是对哪个请求进行响应的。
标志:DNS 报文中的标志字段。
问题计数:DNS 查询请求的数目。
回答资源记录数:DNS 响应的数目。
权威名称服务器计数:权威名称服务器的数目。
附加资源记录数:额外的记录数目(权威名称服务器对应 IP 地址的数目)

标志字段又分为若干个字段
在这里插入图片描述
标志字段中每个字段的含义如下:
QR(Response):查询请求/响应的标志信息。查询请求时,值为 0;响应时,值为 1。
Opcode:操作码。其中,0 表示标准查询;1 表示反向查询;2 表示服务器状态请求。
AA(Authoritative):授权应答,该字段在响应报文中有效。值为 1 时,表示名称服务器是权威服务器;值为 0 时,表示不是权威服务器。
TC(Truncated):表示是否被截断。值为 1 时,表示响应已超过 512 字节并已被截断,只返回前 512 个字节。
RD(Recursion Desired):期望递归。该字段能在一个查询中设置,并在响应中返回。该标志告诉名称服务器必须处理这个查询,这种方式被称为一个递归查询。如果该位为 0,且被请求的名称服务器没有一个授权回答,它将返回一个能解答该查询的其他名称服务器列表。这种方式被称为迭代查询。
RA(Recursion Available):可用递归。该字段只出现在响应报文中。当值为 1 时,表示服务器支持递归查询。
Z:保留字段,在所有的请求和应答报文中,它的值必须为 0。
rcode(Reply code):返回码字段,表示响应的差错状态。当值为 0 时,表示没有错误;当值为 1 时,表示报文格式错误(Format error),服务器不能理解请求的报文;当值为 2 时,表示域名服务器失败(Server failure),因为服务器的原因导致没办法处理这个请求;当值为 3 时,表示名字错误(Name Error),只有对授权域名解析服务器有意义,指出解析的域名不存在;当值为 4 时,表示查询类型不支持(Not Implemented),即域名服务器不支持查询类型;当值为 5 时,表示拒绝(Refused),一般是服务器由于设置的策略拒绝给出应答,如服务器不希望对某些请求者给出应答。

在这里插入图片描述
在请求中 Questions 的值不可能为 0;Answer RRs,Authority RRs,Additional RRs 的值都为 0,因为在请求中还没有响应的查询结果信息。这些信息在响应包中会有相应的值。

在这里插入图片描述
Answer RRs,Authority RRs,Additional RRs 都有了相应的值(不一定全为 0)

问题部分
问题部分指的是报文格式中查询问题区域(Queries)部分。该部分是用来显示 DNS 查询请求的问题,通常只有一个问题。该部分包含正在进行的查询信息,包含查询名(被查询主机名字)、查询类型、查询类。
在这里插入图片描述
查询名:一般为要查询的域名,有时也会是 IP 地址,用于反向查询。
查询类型:DNS 查询请求的资源类型。通常查询类型为 A 类型,表示由域名获取对应的 IP 地址。
查询类:地址类型,通常为互联网地址,值为 1。

https://www.jianshu.com/p/b483300378af
DNS资源记录:A记录/AAAA记录、CNAME、MX、NS、TXT、SPF

【domain】 IN A 【IP地址】
【domain】 IN AAAA 【IP地址】
【別名】 IN CNAME 【原名】

jd.com,jd360.com,jingdong.com虽然是不同名字的域名,但是可以指向同一个原名jd.com。可以让企业的对外展示更加灵活。

【domain】 IN MX 【优先度】 【邮件服务器】

邮件路由记录

【domain】 IN NS 【DNS服务器】

指定域名解析服务器

【domain】 IN TXT 【任意字符串】

一般指某个主机名或域名的说明,或者联系方式,或者标注提醒等等。

【domain】 IN TXT 【送信侧邮件服务器确认规则】

SPF记录是TXT记录的一个运用。后面的备注需要按照指定的格式才能有效。

基于TCP的域名解析

https://ephen.me/2017/dns-tcp/

DNS 是同时占用 UDP 和 TCP 的 53 端口传输数据的,这种单个应用协议同时使用两种传输协议的情况,在 TCP/IP 栈中也算是个异类。
当我们在使用 tcpdump 、 WireShark 等抓包工具分析时,会发现几乎所有的 DNS 应用都是在使用 UDP 传输。
DNS在什么情况下才会用到 TCP 呢?

由于UDP是按照数据包来传输的,整个包最大只能 512 字节。一般正常情况下,用来 DNS 查询是绰绰有余的。但当解析配置过于复杂,或者记录值过长(如: TXT 、 RRSIG 记录)使得 UDP 无法承载的情况下,就有必要转换 TCP 查询。

由于基于 TCP 的域名解析非常少见,大多数域名厂商是不支持的, CloudXNS 也不例外。然而同域名同主机同线路的同类型解析将会封装到一个 UDP 包传输,如果内容过多(超过 512 字节),该数据包可能会承载不下。

这也是为什么 CloudXNS 中即使 A 、 TXT 、 MX 等类型记录尽管不与自身互斥,我们仍然会对同域名下同一主机同一线路限制解析记录条数的原因。

指纹识别代码

来自fingerprintx


package dnsimport ("bytes""crypto/rand""net""time""github.com/praetorian-inc/fingerprintx/pkg/plugins"utils "github.com/praetorian-inc/fingerprintx/pkg/plugins/pluginutils"
)const DNS = "dns"type UDPPlugin struct{}
type TCPPlugin struct{}func init() {plugins.RegisterPlugin(&UDPPlugin{})plugins.RegisterPlugin(&TCPPlugin{})
}func CheckDNS(conn net.Conn, timeout time.Duration) (bool, error) {for attempts := 0; attempts < 3; attempts++ {transactionID := make([]byte, 2)_, err := rand.Read(transactionID)if err != nil {return false, &utils.RandomizeError{Message: "Transaction ID"}}InitialConnectionPackage := append(transactionID, []byte{ //nolint:gocritic// Transaction ID0x01, 0x00, // Flags: 0x0100 Standard query0x00, 0x01, // Questions: 10x00, 0x00, // Answer RRs: 00x00, 0x00, // Authority RRs: 00x00, 0x00, // Additional RRs: 00x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x04, 0x62, 0x69, 0x6e, 0x64, 0x00, // Name: version.bind0x00, 0x10, // Type: TXT (Text strings) (16)0x00, 0x03, // Class: CH (0x0003)}...)if conn.RemoteAddr().Network() == "tcp" {InitialConnectionPackage = append([]byte{0x00, 0x1e}, InitialConnectionPackage...)}response, err := utils.SendRecv(conn, InitialConnectionPackage, timeout)if err != nil {return false, err}if len(response) == 0 {return false, nil}if conn.RemoteAddr().Network() == "udp" {if !bytes.Equal(transactionID[0:1], response[0:1]) {return false, nil}}if conn.RemoteAddr().Network() == "tcp" {if !bytes.Equal(transactionID[0:1], response[2:3]) {return false, nil}}}return true, nil
}func (p *UDPPlugin) Run(conn net.Conn, timeout time.Duration, target plugins.Target) (*plugins.Service, error) {isDNS, err := CheckDNS(conn, timeout)if err != nil {return nil, err}if isDNS {payload := plugins.ServiceDNS{}return plugins.CreateServiceFrom(target, payload, false, "", plugins.UDP), nil}return nil, nil
}func (p *UDPPlugin) PortPriority(i uint16) bool {return i == 53
}func (p UDPPlugin) Name() string {return DNS
}func (p *UDPPlugin) Type() plugins.Protocol {return plugins.UDP
}func (p TCPPlugin) Run(conn net.Conn, timeout time.Duration, target plugins.Target) (*plugins.Service, error) {isDNS, err := CheckDNS(conn, timeout)if err != nil {return nil, err}if isDNS {payload := plugins.ServiceDNS{}return plugins.CreateServiceFrom(target, payload, false, "", plugins.TCP), nil}return nil, nil
}func (p TCPPlugin) PortPriority(i uint16) bool {return i == 53
}func (p TCPPlugin) Name() string {return DNS
}func (p *TCPPlugin) Priority() int {return 50
}func (p *UDPPlugin) Priority() int {return 50
}func (p TCPPlugin) Type() plugins.Protocol {return plugins.TCP
}

构造的请求包类似
向某个DNS服务器发送下面的请求即可获得版本信息
dig @115.124.17.156 version.bind chaos txt

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/178918.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

循环神经网络 - RNN

循环神经网络&#xff08;Rerrent Neural Network,RNN&#xff09;是神经网络的一种&#xff0c;类似的还有深度神经网络&#xff08;DNN&#xff09;、卷积神经网路(CNN)、生成对抗网络&#xff08;GAN)等。**RNN对具有时序特性的数据非常有成效&#xff0c;他能挖掘数据中的时…

Asterisk Ubuntu 安装

更新环境 sudo apt update sudo apt install wget build-essential git autoconf subversion pkg-config libtool sudo contrib/scripts/get_mp3_source.sh A addons/mp3 A addons/mp3/common.c A addons/mp3/huffman.h A addons/mp3/tabinit.c A addons/mp3/Ma…

【Midjourney入门教程2】Midjourney的基础操作和设置

文章目录 Midjourney的常用命令和基础设置1、 /imagine2、 /blend3、 /info4、 /subscribe5、 /settings&#xff08;Midjourney的基础设置&#xff09;6、 /shorten 有部分同学说我不想要英文界面的&#xff0c;不要慌&#xff1a; 点击左下角个人信息的设置按钮&#xff0c;找…

Vue分页控件报错 “pagerCount“

报错信息&#xff1a;[Vue warn]: Invalid prop: custom validator check failed for prop “pagerCount”. <template><div class"pagination"><el-paginationsmallbackground:layout"layout":total"total":current-page"…

深度学习之基于ResNet18的神经网络水果分类系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介二、功能三、神经网络水果分类系统四. 总结 一项目简介 基于ResNet18神经网络的水果分类系统是一个利用深度学习技术进行水果图像分类的系统。下面是该系统…

Web APIs——节点操作

1、DOM节点 DOM节点&#xff1a;DOM树里每一个内容都称之为节点 节点类型&#xff1a; 元素节点 所有的标签 比如body、div属性节点 所有的属性 比如 href文本节点 所有的文本其他 2、查找节点 关闭二维码案例&#xff1a; 点击关闭按钮&#xff0c;关闭的是二维码的盒子&#…

第02章_MySQL环境搭建

第02章_MySQL环境搭建 讲师&#xff1a;尚硅谷 宋红康&#xff08;江湖人称&#xff1a;康师傅&#xff09; 官网&#xff1a;http://www.atguigu.com 1. MySQL的卸载 步骤1&#xff1a;停止MySQL服务 在卸载之前&#xff0c;先停止MySQL8.0的服务。按键盘上的“Ctrl Alt …

https原理

首先说一下几个概念&#xff1a;对称加密、非对称加密 对称加密&#xff1a; 客户端和服务端使用同一个秘钥&#xff0c;分两种情况&#xff1a; 1、所有的客户端和服务端使用同一个秘钥&#xff0c;这个秘钥被泄漏后数据不再安全 2、每个客户端生成一个秘钥&…

rhcsa-vim

命令行的三种模式 将ets下的passwd文件复制到普通用户下面 编辑模式的快捷方式 a--光标后插入 A--行尾插入 o--光标所在上一行插入 O--光标所在上一行插入 i--光标前插入 I--行首插入 s--删除光标所在位然后进行插入模式 S--删除光标所在行然后进行插入 命令模式的快捷…

MathType7.4.8.0下载安装教程

MathType是一款专业的数学公式编辑器,兼容Office word,excel等700多种程序,用于编辑数学试卷、书籍、报刊、论文、幻灯演示等文档轻松输入各种复杂的数学公式和符号。 可以帮助用户快速的在各种文档中插入符号和公式&#xff0c;多复杂的公式都可轻松编辑完成&#xff0c;还可…

如何本地部署Jellyfin影音服务器并实现在公网访问

文章目录 1. 前言2. Jellyfin服务网站搭建2.1. Jellyfin下载和安装2.2. Jellyfin网页测试 3.本地网页发布3.1 cpolar的安装和注册3.2 Cpolar云端设置3.3 Cpolar本地设置 4.公网访问测试5. 结语 1. 前言 随着移动智能设备的普及&#xff0c;各种各样的使用需求也被开发出来&…

Git保姆级教学(超详细版)

一、Git概述 Git 是一个免费的、开源的 分布式版本控制系统 &#xff0c;可以快速高效地处理从小型到大型的各种 项目。 Git 易于学习&#xff0c;占地面积小&#xff0c;性能极快。 它具有廉价的本地库&#xff0c;方便的暂存区域和多个工作 流分支等特性。其性能优于 Sub…

GD32 单片机 硬件I2C死锁解决方法

死锁的复现方式 在I2C恢复函数下个断点&#xff08;检测到I2C多次超时之后&#xff0c;应该能跳转到I2C恢复函数&#xff09;使用镊子&#xff0c;将SCL与SDA短接&#xff0c;很快就能看到程序停到恢复函数的断点上&#xff0c;此时再执行恢复函数&#xff0c;看能否正常走出&…

零代码编程:用ChatGPT批量删除掉对话音频文件的片头

一个文件夹里面有很多个mp3音频文件&#xff0c; 但是开头的片头太长了&#xff1a;40秒 怎么用ChatGPT批量去掉这些片头呢&#xff1f; 在ChatGPT中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个批量删除掉对话音频文件开头的任务 &#xff0c;具体…

【linux进程控制(一)】进程终止--如何干掉一个进程?

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; 进程终止 1. 前言2. 文章整体…

【C++】C++11【上】列表初始化|声明|新容器|右值引用|完美转发|新的类功能

目录 1、 C11简介 2、 统一的列表初始化 2.1 &#xff5b;&#xff5d;初始化 2.2 std::initializer_list 3、声明 3.1 auto和范围for 3.1decltype 3.3 nullptr 4、新容器 5、 右值引用 5.1左值引用和右值引用 5.2 左值引用与右值引用比较 5.3 左值和右值引用使用场景及意义 6…

PC页面-企业微信扫码登录

vue代码引入企业微信扫码登录 企业微信后台管理配置。前端vue 代码使用的配置信息 项目需求PC端登录需要对接企业微信扫码登录功能。 根据同事研究成果&#xff0c;记录该功能的流程。 前端代码用的是vue。 企业微信后台管理配置。 企业微信后台管理登录连接 1、扫码登录企业…

【vscode远程开发】使用内网穿透实现在公网环境下远程访问

文章目录 前言1、安装OpenSSH2、vscode配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程 前言 远程…

使用免费 FlaskAPI 部署 YOLOv8

目标检测和实例分割是计算机视觉中关键的任务&#xff0c;使计算机能够在图像和视频中识别和定位物体。YOLOv8是一种先进的、实时的目标检测系统&#xff0c;因其速度和准确性而备受欢迎。 Flask是一个轻量级的Python Web框架&#xff0c;简化了Web应用程序的开发。通过结合Fla…