DNS数据包格式及内容详解

网络知识点之-DNS协议 DNS是一种可以将域名和IP地址相互映射的以层次结构分布的数据库系统。DNS系统采用递归查询请求的方式来响应用户的查询,为互联网的运行提供关键性的基础服务。目前绝大多数的防火墙和网络都会开放DNS服务,DNS数据包不会被拦截,因此可以基于DNS协议建立隐蔽信道,从而顺利穿过防火墙,在客户端和服务器之间传输数据。DNS允许终端用户设备将给定的人类可读URL转换为网络可以理解的机器可用IP地址。Internet Engineering Task Force(IETF)标准组对HTTP和DNS进行了标准化定义。 阅读详情
AI摘要

本文详细介绍了DNS解析的全过程,从递归查询到迭代查询,深入剖析DNS数据包的格式与各字段意义,包括标志位、数量字段、查询区域、资源记录等,以及常见DNS记录类型如A、CNAME、MX、TXT等的功能与应用。

1 域名解析过程

域名解析总体可分为两大步骤,第一个步骤是本机向本地域名服务器发出一个DNS请求报文,报文里携带需要查询的域名;第二个步骤是本地域名服务器向本机回应一个DNS响应报文,里面包含域名对应的IP地址或者别名等。从下面对jocent.me进行域名解析的报文中可明显看出这两大步骤。注意:第一个步骤从主机到本地域名服务器是递归查询;第二大步骤中采用的是迭代查询,其实是包含了很多小步骤的,详情见下面的流程分析(本地服务器向根域名服务器,顶级域名服务器,二级域名服务器,权限域名服务器(一般由公司企业提供解析)等DNS迭代查询)。

其具体的流程可描述如下:

  1. 主机10.74.36.90先向本地域名服务器10.74.1.11进行递归查询
  2. 本地域名服务器采用迭代查询,向一个根域名服务器进行查询
  3. 根域名服务器告诉本地域名服务器,下一次应该查询的顶级域名服务器 dns.me的IP地址
  4. 本地域名服务器向顶级域名服务器 dns.me进行查询
  5. 顶级域名服务器me告诉本地域名服务器,下一步查询权限服务器dns.jocent.me 的IP地址
  6. 本地域名服务器向权限服务器 dns.jocent.me进行查询
  7. 权限服务器 dns.jocent.me告诉本地域名服务器所查询的主机的IP地址
  8. 本地域名服务器最后把查询结果告诉 10.74.36.90

其中有两个概念递归查询和迭代查询,其实在整个描述的过程中已经体现的很明显,这里再说明一下:

  • 递归查询:本机向本地域名服务器发出一次查询请求,就静待最终的结果。如果本地域名服务器无法解析,自己会以DNS客户机的身份向其它域名服务器查询,直到得到最终的IP地址告诉本机
  • 迭代查询:本地域名服务器向根域名服务器查询,根域名服务器告诉它下一步到哪里去查询,然后它再去查,每次它都是以客户机的身份去各个服务器查询

2 DNS数据包格式

请求数、回答数、权威域名服务器数、其他记录数

è¿éåå¾çæè¿°

2.1 头部

  1. 会话标识ID(2字节):是DNS报文的ID标识,对于请求报文和其对应的应答报文,这个字段是相同的,通过它可以区分DNS应答报文是哪个请求的响应。用于划分DNS流(一个请求对应一个响应)。
  2. 标志(2字节):
    QR(1bit)查询/响应标志,0为查询,1为响应Response: Message is a response
    opcode(4bit)

    4个比特位用来设置查询的种类,应答的时候会带相同值,

    0 标准查询 (QUERY)

    1 反向查询 (IQUERY)

    2 服务器状态查询 (STATUS)

    3 无

    4 为通知 (Notify)

    5 为更新 (Update)

    6-15 保留值,暂时未使用

    Opcode: Standard query (0)
    AA(1bit)

    表示授权应答 Authoritative Answer 

    应答的时候有意义,指出给出应答的服务器是查询域名的授权解析服务器。注意因为别名的存在,应答可能存在多个主域名,这个AA位对应请求名,或者应答中的第一个主域名。

    1标识域名服务器是授权服务器。

    0 为应答服务器不是该域名的权威解析服务器

    1 为应答服务器是该域名的权威解析服务器

    Authoritative: Server is not an authority for domain
    TC(1bit)

    表示截断 TrunCation

    用来指出报文比允许的长度还要长,导致被截断。仅当DNS报文使用UDP服务时使用。因为UDP数据包有长度限制,当长度过长时会被截断。

    1标识DNS报文长度超过512字节,并被截断。

    0 为报文未截断

    1 为报文过长被截断 (只返回了前 512 个字节)

    Truncated: Message is not truncated
    RD(1bit)

    表示期望递归 Recursion Desired

    这个比特位被请求设置,应答的时候使用的相同的值返回。如果设置了RD,就建议域名服务器进行递归解析,递归查询的支持是可选的。

    1标识执行递归查询,即DNS服务器无法解析某一个主机名,则它向其它DNS服务器继续查询,如此反复,直到它解析到目标主机名并返回给客户端。0标识迭代查询,即DNS服务器无法解析目标主机时,它将查询到的其它DNS服务器的IP地址返回给客户端,供客户端进行参考。

    0 为不期望进行递归查询

    1 为期望进行递归查询 (从域名服务器进行递归查询)

    Recursion desired: Don't do query recursively
    RA(1bit)

    表示支持递归 Recursion Available

    这个比特位在应答中设置或取消,用来代表服务器是否支持递归查询。允许递归标识。此字段在应答字段中使用,1标识DNS服务器支持递归查询。

    0 为应答服务器不支持递归查询

    1 为应答服务器支持递归查询

    Recursion available: Server can't do recursive queries
    Z(1bit)保留字段,暂时未使用。在所有的请求和应答报文中必须置为0。

    Z: reserved (0) 

    此时大家可能有疑问,本身Z不是三个bit吗,为什么还有Z, AD, CD那,实际上参考书上Z是三个字节,作为保留,但是有时会用来作为RCode域的扩展。

    但实际上抓包我发现,Z只占一个bit,还有AD和CD,所以我猜测实际运行中认为AD和CD是RCode域的扩展。只有Z是保留。

    AD(1bit)

    应答认证:应答/权限部分未由服务器进行认证

    0 为应答服务器未验证了该查询相关的 DNSSEC 数字签名

    1 为应答服务器已经验证了该查询相关的 DNSSEC 数字签名

    Answer authenticated: Answer/authority portion was not authenticated by the server
    CD(1bit)

    未经认证的数据:不可接受

    0 为服务器已经进行了相关 DNSSEC 数字签名的验证

    1 为服务器并未进行相关 DNSSEC 数字签名的验证

    Non-authenticated data: Unacceptable
    rcode(4bit)

    应答码(Response code) - 这4个比特位在应答报文中设置,代表的含义如下:

    0 正常,没有差错。

    1 报文格式错误(Format error) - NS服务器不能解析请求的报文。

    2 服务器失败(Server failure) - 因为服务器的原因导致没办法处理这个请求。

    3 名字差错(Name Error) - 只有对授权域名解析服务器有意义,指出解析的域名不存在(请求中的地址并不存在)。

    4 没有实现(Not Implemented) - NS域名服务器不支持查询类型。

    5 拒绝(Refused) - 服务器由于设置的策略拒绝给出应答。比如,服务器不希望对某些请求者给出应答,或者服务器不希望进行某些操作(比如区域传送zone transfer)。

    6 为域名出现了但是他不该出现

    7 为集合 RR 存在但是他不该存在

    8 为集合 RR 不存在但是他应该存在

    9 为服务器并不是这个区域的权威服务器

    10 为该名称并不包含在区域中

    11-15 保留值,暂时未使用。

    16 为错误的 OPT 版本或者 TSIG 签名无效

    17 为无法识别的密钥

    18 为签名不在时间范围内

    19 为错误的 TKEY 模式

    20 为重复的密钥名称

    21 为该算法不支持

    22 为错误的截断

    23 - 3840 保留

    3841 - 4095 私人使用

    4096 - 65534 保留

    65535 RFC 6195

    Reply code: No error (0)
  3. 数量字段(总共8字节):Questions、Answer RRs、Authority RRs、Additional RRs 各自表示后面的四个区域的数目。Questions表示查询问题区域节的数量,Answers表示回答区域的数量,Authoritative namesversers表示授权区域的数量,Additional recoreds表示附加区域的数量。

问题数QDCOUNT 无符号16位整数表示报文请求段中的问题记录数。

资源记录数ANCOUNT 无符号16位整数表示报文回答段中的回答记录数。

授权资源记录数NSCOUNT 无符号16位整数表示报文授权段中的授权记录数。

额外资源记录数ARCOUNT 无符号16位整数表示报文附加段中的附加记录数。
 

2.2 正文

2.2.1 Queries区域

(1)查询名 QNAME 要查找的名字,是一个或多个标识符的序列,长度不固定,且不使用填充字节,一般该字段表示的就是需要查询的域名(如果是反向查询,则为IP,反向查询即由IP地址反查域名)。每个标识符以首字节的计数值来说明随后标识符的字节长度,每个名字以最后字节为0结束,长度为0的标识符是根标识符。单个标识符最大长度为63字节。一般的格式如下图所示。

(2)查询类型 QTYPE 每个问题有一个查询类型。2个字节表示查询类型,取值可以为任何可用的类型值,以及通配码*来表示所有的资源记录。

类型助记符说明
1A由域名获得IPv4地址
2NS查询授权的域名服务器
5CNAME查询规范名称(别名)
6SOA开始授权
11WKS熟知服务
12PTR把IP地址转换成域名(指针记录,反向查询)
13HINFO主机信息
15MX邮件交换记录
28AAAA由域名获得IPv6地址
252AXFR对区域转换的请求,传送整个区的请求。
255ANY对所有记录的请求

其他QTYPE类型有

MD 3 a mail destination (Obsolete - use MX)

MF 4 a mail forwarder (Obsolete - use MX)

SOA 6 marks the start of a zone of authority

MB 7 a mailbox domain name (EXPERIMENTAL)

MG 8 a mail group member (EXPERIMENTAL)

MR 9 a mail rename domain name (EXPERIMENTAL)

NULL 10 a null RR (EXPERIMENTAL)

WKS 11 a well known service description

MINFO 14 mailbox or mail list information

TXT 16 text strings TXT 记录是为您所在网域之外的来源提供文本信息的一种 DNS 记录,可用于多种用途。该记录的值可以是人工可读文本,也可以是机器可读文本。(常用夹带其他数据比如C&C和文件,用于建立隧道)

查询类型出现在问题字段中,查询类型是类型的一个超集,所有的类型都是可用的查询类型

AXFR 252 A request for a transfer of an entire zone

MAILB 253 A request for mailbox-related records (MB, MG or MR)

MAILA 254 A request for mail agent RRs (Obsolete - see MX)

255 A request for all records

这里给一个域名,可用来模拟DNS的查询类型,可以选择不同的类型,比如A,PTR等玩一下, https://www.nslookuptool.com/chs/       
(3)查询类:通常为1,表示IN,表明是Internet数据。

IN (1) 指互联网地址。

CS 2 the CSNET class (Obsolete - used only for examples in some obsolete RFCs)

CH 3 the CHAOS class

HS 4 Hesiod [Dyer 87]

查询类是类的一个超集

* 255 any class

2.2.2 资源记录(RR)区域(包括回答区域,授权区域和附加区域)

该区域有三个,但格式都是一样的。这三个区域分别是:回答区域,授权区域和附加区域

(1) 域名NAME(2字节或不定长):它的格式和Queries区域的查询名字字段是一样的。有一点不同就是,当报文中域名重复出现的时候,该字段使用2个字节的偏移指针来表示。比如,在资源记录中,域名通常是查询问题部分的域名的重复,因此用2字节的指针来表示,具体格式是最前面的两个高位是 11,用于识别指针。其余的14位从DNS报文的开始处计数(从0开始),指出该报文中的相应字节数。一个典型的例子,C00C(1100000000001100,12正好是头部的长度,其正好指向Queries区域的查询名字字段)。

(2) 查询类型TYPE :表明资源纪录的类型,见2.2.1节的查询类型表格所示。指出RDATA数据的含义

(3)查询类CLASS :对于Internet信息,总是1,代表IN。表示RDATA的类

(4)生存时间(TTL):4字节无符号整数表示资源记录可以缓存的时间。以秒为单位,表示的是资源记录的生命周期,一般用于当地址解析程序取出资源记录后决定保存及使用缓存数据的时间,它同时也可以表明该资源记录的稳定程度,极为稳定的信息会被分配一个很大的值(比如86400,这是一天的秒数)。0代表只能被传输,但是不能被缓存。

TTL 是 DNS 记录中的一个值,可决定对该记录所做的后续更改需要多少秒才会生效。网域的每条 DNS 记录(如 MX 记录、CNAME 记录等)都有一个 TTL 值。一条记录目前所设的 TTL 决定了您现在所做的任何更改需要多久才会生效。例如,如果一条记录的 TTL 为 86400 秒,则对该记录的更改最多需要 24 小时才会生效。

请注意,更改记录的 TTL 会影响之后的所有更改需要多久才会生效。我们建议将 TTL 值设置为 3600,即让整个互联网中的服务器每小时检查一次该记录的更新情况。较短的 TTL 在之前的有效期到期后才会生效。这意味着,下次更新该记录时,您的更改最多要一个小时才会生效。要使后续的更改更快生效(例如,如果您想快速还原一项更改),则可以设置较短的 TTL 值,如 300 秒(5 分钟)。正确配置记录后,我们建议将 TTL 值设置为 86400,即让整个互联网中的服务器每 24 小时检查一次记录的更新情况。

(5) 资源数据长度:URDLENGT**H 2个字节无符号整数表示RDATA的长度

(6)资源数据 RDATA  该字段是一个可变长字段,不定长字符串来表示记录,格式与TYPE和CLASS有关。比如,TYPE是A,CLASS 是 IN,那么RDATA就是一个4个字节的ARPA网络地址。表示按照查询段的要求返回的相关资源记录的数据。可以是Address(表明查询报文想要的回应是一个IP地址)或者CNAME(表明查询报文想要的回应是一个规范主机名)等。

2.2.3 授权区域

2.2.4 附加区域

注意:

为了减小报文,域名系统使用一种压缩方法来消除报文中域名的重复。使用这种方法,后面重复出现的域名或者labels被替换为指向之前出现位置的指针。优点:节约了空间,降低报文的容量;避免数据包截断;保证了数据的一致性。缺点:但是需要所有的程序都应该能够理解收到的报文中包含的指针。

以上截断概念重申:

仅当DNS报文使用UDP服务时使用截断标识和功能。因为UDP数据报有长度限制,所以过长的DNS报文将被截断。1表示DNS报文超过512字节,并被截断。当然基于TCP的DNS数据包不存在此问题。

常用记录类型

TXT记录

一般指某个主机名或域名的说明,如:admin IN TXT "管理员, 电话:XXXXXXXXXXX",mail IN TXT "邮件主机,存放在xxx , 管理人:AAA",Jim IN TXT "contact: abc@mailserver.com",也就是您可以设置 TXT 内容以便使别人联系到您。 

TXT的应用之一,SPF(Sender Policy Framework)反垃圾邮件。SPF是跟DNS相关的一项技术,它的内容写在DNS的TXT类型的记录里面。MX记录的作用是给寄信者指明某个域名的邮件服务器有哪些。SPF的作用跟MX相反,它向收信者表明,哪些邮件服务器是经过某个域名认可会发送邮件的。SPF的作用主要是反垃圾邮件,主要针对那些发信人伪造域名的垃圾邮件。例如:当邮件服务器收到自称发件人是spam@gmail.com的邮件,那么到底它是不是真的gmail.com的邮件服务器发过来的呢,我们可以查询gmail.com的SPF记录,以此防止别人伪造你来发邮件。

CNAME记录

DNS 协议不允许您为 DNS 命名空间的顶端节点(也称为区域顶点)创建别名记录 (CNAME)。例如,如果您注册了 DNS 名称 example.com,则顶级域名为 example.com。您不能为 example.com 创建 CNAME 记录,但可以为 www.example.com、newproduct.example.com 等创建 CNAME 记录。

此外,如果您为某个子域创建 CNAME 记录,则不能为该子域创建任何其他记录。例如,如果您为 www.example.com 创建 CNAME,则不能创建其“名称”字段的值为 www.example.com 的任何其他记录。

MX 记录类型

MX 记录的每个值实际上都包含两个值,即优先级和域名:

Priority

表示电子邮件服务器优先级的一个整数。如果只指定一个服务器,则优先级可以是 0 到 65535 之间的任意整数。如果指定多个服务器,则为优先级指定的值指示您要将邮件路由到第一个、第二个等电子邮件服务器中的哪一个。优先级值最低的服务器优先。例如,如果您有两个电子邮件服务器,并且为优先级指定值 10 和 20,则电子邮件始终会路由到优先级为 10 的服务器 (除非该服务器不可用)。如果您指定值为 10 和 10,则电子邮件会大致同等地路由到两个服务器。

域名

电子邮件服务器的域名. 指定 A 或 AAAA 记录的名称 (如 mail.example.com)。在 RFC 2181, Clarifications to the DNS Specification 中,10.3 小节禁止为域名值指定 CNAME 记录的名称。(当 RFC 提到“别名”时,指的是 CNAME 记录,而不是 Route 53 别名记录。)

NAPTR 记录类型

名称权威指针 (NAPTR) 是动态授权发现系统 (DDDS) 应用程序用于将一个值转换为另一个值或将一个值替换为另一个值的一种记录类型。例如,一个常见的用途是将电话号码转换为 SIP URI。

NAPTR 记录的 Value 元素包含六个以空格分隔的值:

Order

当您指定多个记录时,您希望 DDDS 应用程序评估记录的顺序。有效值:0 - 65535.

Preference

当您指定具有相同 Order 的两个或更多记录时,您评估这些记录的顺序首选项。例如,如果两个记录的 Order 为 1,则 DDDS 应用程序首先会评估具有较低 Preference 的记录。有效值:0 - 65535.

Flags

特定于 DDDS 应用程序的一个设置。RFC 3404 中当前定义的值为大写字母和小写字母 "A"、"P"、"S" 和 "U",以及空字符串 ""。将 Flags 用引号引起来。

服务

特定于 DDDS 应用程序的一个设置。将 Service 用引号引起来。

Regexp

DDDS 应用程序用于将输入值转换为输出值的一个正则表达式。例如,IP 电话系统可使用一个正则表达式将用户输入的电话号码转换为 SIP URI。将 Regexp 用引号引起来。为 Regexp 指定一个值,或者为 Replacement 指定一个值,但不要同时为这两者指定值。

该正则表达式可包含以下任何可打印 ASCII 字符:

  • a-z

  • 0-9

  • - (连字符)

  • (space)

  • ! # $ % & ' ( ) * + , - / : ; < = > ? @ [ ] ^ _ ` { | } ~ .

  • " (引号)。要在字符串中包含引号字符,请在它前面加上 \ 字符:\"。

  • \ (反斜杠)。要在字符串中包含反斜杠,请在它前面加上 \ 字符:\\。

以八进制格式指定所有其他值,例如国际化域名。

Replacement

您希望 DDDS 应用程序对其提交 DNS 查询的下一个域名的完全限定域名 (FQDN)。DDDS 应用程序会用您为 Replacement 指定的值 (如果有) 来替换输入值。为 Regexp 指定一个值,或者为 Replacement 指定一个值,但不要同时为这两者指定值。如果您为 Regexp 指定了一个值,请为 Replacement 指定一个圆点 (.)。

域名可以包含 a-z、0-9 和 - (连字符)。

NS 记录类型

NS 记录会标识托管区域的名称服务器。NS 记录的值为名称服务器的域名。

PTR 记录类型

PTR 记录 Value 元素的格式与域名相同。

SOA 记录类型

授权起始点 (SOA) 记录会提供有关域和相应 Amazon Route 53 托管区域的信息。

SPF 记录类型

SPF 记录以前用于验证电子邮件发件人的身份。但是,不再建议您创建记录类型为 SPF 的记录。RFC 7208 中的 Sender Policy Framework (SPF) for Authorizing Use of Domains in Email, Version 1 (在电子邮件中授权使用域的发件人策略框架 (SPF),版本 1) 已更新为:“...[I]ts existence and mechanism defined in [RFC4408] have led to some interoperability issues. Accordingly, its use is no longer appropriate for SPF version 1; implementations are not to use it.“(...在 [RFC4408] 中定义的其存在和机制已导致一些互操作性问题。因此,它已不再适合 SPF 版本 1;实施方案中不应再使用它。) 在 RFC 7208 中,请参阅第 14.1 节 The SPF DNS Record Type。

建议您创建一个包含适用值的 TXT 记录,而不是 SPF 记录。

SRV 记录类型

SRV 记录 Value 元素包含四个以空格分隔的值。前三个值为分别是表示优先级、权重和端口的十进制数。第四个值为一个域名。有关 SRV 记录格式的信息,请参阅适用的文档。

TXT 记录类型

TXT 记录包含一个或多个用双引号 (") 引起的字符串。当您使用简单路由策略时,请将域 (example.com) 或子域 (www.example.com) 的所有值包含在同一 TXT 记录中。

单个字符串最多可包含 255 个字符,包括以下内容:

  • a-z

  • A-Z

  • 0-9

  • 空格

  • - (连字符)

  • ! " # $ % & ' ( ) * + , - / : ; < = > ? @ [ \ ] ^ _ ` { | } ~ .

如果您的 TXT 记录包含以下任意字符,则必须使用 \三位八进制代码格式的转义码指定字符:

  • 八进制字符 000 到 040 (十进制 0 到 32,十六进制 0x00 到 0x20)

  • 八进制字符 177 到 377 (十进制 127 到 255,十六进制 0x7F 到 0xFF)

例如,如果您的 TXT 记录的值为 "exämple.com",则应指定 "ex\344mple.com"。

有关 ASCII 字符和八进制代码之间的映射,请在 Internet 上搜索“ascii 八进制代码”。一个有用的参考是 ASCII 代码 - 扩展 ASCII 表。

大小写将被保留,因此 "Ab" 和 "aB" 是不同的值。

要将引号 (") 包含在字符串中,请在引号前面放置反斜杠 (\) 字符:\"。转义字符。

DNS应答报文分析 DNS (Domain Name System),域名系统是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式系统,能够使人们更方便地访问互联网,DNS服务器使用UDP端口 53。在linux操作系统下,我们可以通过 host 命令,查询域名的IP地址,命令格式为:host -t A 域名,它的工作原理是怎样的呢,接下来,通过解析DNS应答报文,探索DNS工作原理。 阅读详情

相关推荐

Python3 dpkt包解析DNS数据包

从网卡直接抓包,只过滤端口53,过滤出dpkt.ip.IP类和dpkt.udp.UDP类。提取DNS包的各种信息储存为字典格式。代码如下。 import pcap import dpkt import socket # RR types DNS_A = 1 DNS_NS = 2 DNS_CNAME = 5 DNS_SOA = 6 DNS_NULL = 10 DNS_PTR = 12 DNS_HINFO = 13 DNS_MX = 15 DNS_TXT = 16 DNS_AAAA = 28 DNS_SRV

weixin_42280274的博客 2457

DNS数据包格式解析

DNS数据包大概可以分为基本选项部分、请求部分、应答资源部分;下面讲解将以访问百度抓取到的请求/应答数据包来说明 基本选项部分 基本选项部分的结构请求数据包和应答数据包基本都是一样的,只是对应的值不一样或者某些标志位只对请求书包或应答数据包有效而已,下面说明下每个标志的作用 请求数据包的基本选项部分: 应答数据包的基本选项部分: Length:占用两个字节,表示整个DNS数据的长度(不包含length占用的两个字节),这个标志只在TCP请求数据包中存...

qq_37907693的博客 7507

Wireshark-DNS数据报分析

DNS:域名系统  DNS是一种用于internet上提供IP地址和域名相互映射的分布式服务系统。可以通过IP地址获取相应的域名,也可以通过域名获取IP,这样可以不用记住难记的IP。   我们实际网络中的DNS服务是由网络运营商提供的。大多数地区都有相应的域名服务器。114.114.114.114是一个公共的DNS服务器,任何地方都可以通过这个服务器获取DNS服务。   域名是通过.来区分不同级

三哥的博客 2万+

Scapy:DNS数据包详解

Scapy中DNS数据包详解(DNS协议,DNS包参数)

m0_71713477的博客 3864

DNS篇之DNS协议详解

1、DNS原理 2、DNS包结构 3、DNS类型 4、DNS有哪些请求方式?怎么发送不同请求的DNS 5、DNS服务器搭建 6、DNS反向解析

新雪兰 8942

二进制协议之-通过DNS数据包解释DNS协议各个字段含义

使用wireshark通过DNS数据包和对应的RFC文档解释DNS请求和响应中各个字段含义

村中少年的专栏 4265

TCP,UDP,IP数据包格式详解

在 TCP/IP 协议中,使用 IP 协议传输数据的包被称为 IP 数据包,每个数据包都包含 IP 协议规定的内容。IP 协议规定的这些内容被称为IP 数据报文(IP Datagram)或者IP 数据报。 IP 数据报文由首部(称为报头)和数据两部分组成。首部的前一部分是固定长度,共 20 字节,是所有 IP 数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。 每个 IP 数据报都以一个 IP 报头开始。源计算机构造这个 IP 报头,而目的计算机利用 IP 报头中封装的信息处理数据..

mijichui2153的博客 1万+

WireShark抓DNS请求和回复数据报的分析

1 DNS简单理解 我们简单理解DNS功能是把域名转成IP地址,我们先发送一个NDS请求数据包到本地域名服务器去找,找不到我们就去根域名服务器去找,根域名找不到我们再把顶级域名服务器地址回复给本地域名服务器,然后本地域名服务器到顶级域名服务器去查询,如果依然找不到,同理,再到权限域名服务器去找 ,如果不清楚再到我的这篇博客里面去看下 DNS的理解 2 DNS请求数据包和回复...

码莎拉蒂 3万+

使用nslookup进行DNS查询及wirekhark抓取DNS数据包

nslookup 是一个查询 Internet 域名服务器的程序。我们通常使用nslookup工具来测试DNS解析,获取DNS报文的详细数据,这也是我们想要使用协议分析工具nslookup来分析DNS流量进行分析。 只要你上网,都会涉及DNS解析。简单起见,我们这里不会搭建一个DNS服务器,而是使用Internet域名解析来分析验证。 ...

chen1415886044的博客 8907

复用浏览器之跳过扫码登录

复用浏览器 1、通过命令启动浏览器:chrome --remote-debugging-port=9222(前提是退出所有的chrome浏览器) 2、启动浏览器之后,在地址栏输入127.0.01:9222,成功复用如下图所示:

qq_43911915的博客 2035

海思方案定制hi3531dv200/SS528 DVR方案解析:从硬件选型到编解码实战应用

海思方案,Hi3518EV100,Hi3518CV100,Hi3515CV100,Hi3516CV100,Hi3516ECV100,Hi3516D,Hi3516A,Hi3519,Hi3520D,Hi3521A,Hi3535,Hi3531,Hi3536,Hi3536C,Hi3536D,Hi3518EV200,Hi3518EV201,Hi3520DV200,Hi3516CV200,Hi3516CV300,Hi3516AV200,Hi3520DV300,Hi3519V101,sd3403,hi3519av200

1585

数据包格式_IP /TCP协议及握手过程和数据包格式中级详解

IP地址定义:IP被称为网际协议,是Internet上使用的一个关键的底层协议。TCP/IP是通用的通信协议,使Internet成为一个允许连接不同类型的计算机和不同操作系统的网络。特点:IP协议具有能适应各种各样网络硬件的灵活性,对底层网络硬件几乎没有任何要求,任何一个网络只要可以从一个地点向另外一个地点传送二进制数据,记忆可以使用IP协议加入Internet。要求:为了通信的需求,连接Inte...

weixin_34894242的博客 1091

【Konva】解决图形加入group后无法获取到绝对坐标,以及group内绘制新图形坐标偏移的问题

解决konva绘图开发时“图形加入group后坐标不会变动,无法获取到绝对坐标”的问题

近10年前端开发工作经验,为你分享日常经验所得 1499

DNS报文格式及DNS查询程序

From: http://blog.youkuaiyun.com/wangyifei0822/archive/2008/04/23/2316857.aspx DNS报文格式:该报文12字节的首部和4个长度可变的字段组成。标识字段由客户程序设置并有服务器返回结果。16bit的标志字段 如下:QR:0表示查询报文,1表示响应报文Opcode:通常值为

CodeJoker的专栏 1万+

DataGrip 2023.3 Windows版激活保姆级教程:从下载脚本到输入激活码,一次搞定

本文提供DataGrip 2023.3 Windows版的完整安装与授权指南,从环境准备到数据库连接管理,再到高效开发技巧与高级功能扩展,帮助开发者快速掌握这一专业数据库管理工具。内容涵盖安装步骤、初始配置、常见问题解决及性能调优技巧,适合数据库开发新手和专业人士。

weixin_30275415的博客 643

基于Python的电商平台商品价格监控与历史价格查询系统

随着电子商务的快速发展,消费者对商品价格透明度的需求日益增长。本文设计并实现了一个基于Python的电商平台商品价格监控与历史价格查询系统,能够自动抓取京东和淘宝商品信息,存储历史价格数据,并通过可视化界面展示价格走势。系统采用最新的异步爬虫技术、反爬虫绕过策略和现代Web框架,实现了高效稳定的数据采集与展示功能。关键词:Python爬虫、价格监控、历史价格、数据可视化、异步爬虫、电商平台实现了京东和淘宝商品信息的异步爬取,采用多种反爬虫策略提高爬取成功率;

2201_76125261的博客 682

ICMP、DNS、TCP等协议多段数据包关联

ICMP数据包 ICMP 分为查询请求和响应,请求和响应的报文结构基本相同。ICMP报文格式如图所示: 各字段的解释: ICMP协议的request包和reply包关联 在ICMP协议中request包(请求包)和reply包(响应包)的关联主要是看Sequence number (BE)字段中的值,这个字段是有16个bit组成,也即是最大值为65535; request包截图: reply包截图: ICMP协议的多段分析中request包(或reply包)的关联 ..

weixin_43287950的博客 1829

【图像去噪】论文精读:AKDT: Adaptive Kernel Dilation Transformer for Effective Image Denoising

论文题目:AKDT: Adaptive Kernel Dilation Transformer for Effective Image Denoising —— AKDT:用于有效图像去噪的自适应核膨胀Transformer图像去噪是一项基本但具有挑战性的任务,特别是在处理高分辨率图像和复杂的噪声模式时。大多数现有方法依赖于标准的 Transformer 架构,该架构通常计算复杂度高,并且对不同噪声水平的适应性有限。在本文中,我们介绍了自适应核膨胀Transformer(AKDT)

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 1046

一个数据包在网络中传输的全过程

想必不少小伙伴面试过程中,会遇到「当键入网址后,到网页显示,其间发生了什么」的面试题。这次,我带大家一起探究下,一个数据包在网络中的心路历程。每个阶段都有数据包的「心路历程」,我们一起看看它说了什么?接下来以下图较简单的网络拓扑模型作为例子,探究探究其间发生了什么?

swadian2008的博客 1万+

【华为OD机试真题E卷】474、推荐多样性 | 机试真题+思路参考+代码解析(E卷复用)(C++、Java、Py)

题目描述 >推荐多样性需要从多个列表中选择元素,一次性要返回 N 屏数据(窗口数量),每屏展示 K 个元素(窗口大小),选择策略:   各个列表元素需要做穿插处理,即先从第一个列表中为每屏选择一个元素,再从第二个列表中为每屏选择一个元素,依次类推   每个列表的元素尽量均分为 N 份,如果不够 N 个,也要全部分配完,参考样例图:

KJ.JK 4436

【Pytorch实战教程】基于RML2018的融合网络分类 | LSTM网络和ResNet网络融合 | 含数据集的处理

这段代码是从原始数据中读取所选择的数据,画出星座图,并将星座图保存本地,然后将IQ数据保存成mat文件,将图片数据读取之后保存为npy文件,方便后续融合网络使用。

若北辰 928

TCP/IP——DNS数据包分析

一.实验目的 分析DNS 协议报文格式和DNS 协议的工作过程 二.实验拓扑 三.实验工具 GNS3和Wireshark抓包分析软件 四.DNS协议的封装格式 五.单个DNS服务器查询实验步骤 1.配置接口IP ,并启用OSPF协议实现全网可达 1)配置IP地址 PC: int f0/0 ip add 192.168.1.1 255.255.255.0 no shut DNS-Server1: int f0/0 ip add 192.168.1.2 255.255.255.0 no shut int f

weixin_50464560的博客 1885

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

基于Wireshark的DNS数据包分析5-2

3 查询数据包结构 查询数据包的结构主要包含了图1中的“Header”和“Question”两部分。 3.1 Header部分 Header表示消息头,其具体结构如图4所示。 图4 Header结构 3.1.1ID 图4中的ID是“Transaction ID”即为会话ID,长度是16bit。当DNS服务器返回该查询结果时,会使用相同的ID。从图3中可以看到,此时的会话ID是0x120a。 3.1.2 Flags Flags指的是该数据包的标志,其大小为16bit。Flags的具体.

hou09tian的博客 1082

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

pcap数据包 DNS解析工具

pcap数据包 DNS解析工具 去发现同类优质开源项目:https://gitcode.com/ 简介 本仓库提供了一个使用C语言编写的工具,主要用于对pcap数据包进行解析,从而获取DNS解析内容。该工具能够有效地对数据流进行处理,帮助用户更好地理解网络中的DNS请求和响应。 功能特点 基于C语言:工具采用C语言编写,具有高效性和跨平台性。 解析pcap数据包:能够读取pcap格式的数据包文件...

gitblog_06769的博客 585

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Wireshark数据包分析之DNS协议包解读

*此篇博客仅作为个人笔记和学习参考 DNS协议包格式 DNS资源记录类型 DNS数据包分析(查询) Domain Name System (query)[Response In: 16]Transaction ID: 0x0002 #DNS ID号#Flags: 0x0100 Standard query #标志#0... .... .... .... = Response: Me...

weixin_33957648的博客 1212

DNS那点事之DNS报文格式及数据包分析

上一讲到DNS中域名解析的原理和过程,这篇文章讲一下DNS的报文格式,并通过Wireshark捉包分析一下。关于DNS的报文格式可以看google,这里不再多说,接下来用我的站点mydoodle.com.cn 来捉包分析。 展开Domain Name System(reposen) 首部区域: 标识符:Tra

doodlesomething 5695
上一篇: 从Python中os模块中实用的文件和目录操作方法到Python内置变量
下一篇: Python模型本地持久化存储
answer3lin
博客等级 码龄11年 138粉丝 61原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值