Scapy:DNS数据包详解

这篇具有很好参考价值的文章主要介绍了Scapy:DNS数据包详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

DNS 分为查询请求和查询响应,请求和响应的报文结构基本相同。DNS 报文格式如图所示。

      Scapy:DNS数据包详解

上图中显示了 DNS 的报文格式。其中,事务 ID、标志、问题计数、回答资源记录数、权威名称服务器计数、附加资源记录数这 6 个字段是DNS的报文首部,共 12 个字节。

整个 DNS 格式主要分为 3 部分内容,即基础结构部分、问题部分、资源记录部分。下面将详细地介绍每部分的内容及含义。

基础结构部分

DNS 报文的基础结构部分指的是报文首部,如图所示。

 Scapy:DNS数据包详解

该部分中每个字段含义如下。

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


基础结构部分中的标志字段又分为若干个字段,如图所示。

 Scapy:DNS数据包详解

         而在scapy中,通常一个DNS数据包,客户端发送DNSQR请求包,服务器发送DNSRR响应包。一个DNSQR包含有解析域名qname、解析类型qtype、解析类别qclass。一个DNSRR包含有解析域名rrname、类型type、解析类别类别rtype、TTL等等。

使用ls函数查看DNS包的结构如下:

length     : ShortField (Cond)                   = None            ('None')
id         : ShortField                          = 0               ('0')
qr         : BitField  (1 bit)                   = 0               ('0')
opcode     : BitEnumField                        = 0               ('0')
aa         : BitField  (1 bit)                   = 0               ('0')
tc         : BitField  (1 bit)                   = 0               ('0')
rd         : BitField  (1 bit)                   = 1               ('1')
ra         : BitField  (1 bit)                   = 0               ('0')
z          : BitField  (1 bit)                   = 0               ('0')
ad         : BitField  (1 bit)                   = 0               ('0')
cd         : BitField  (1 bit)                   = 0               ('0')
rcode      : BitEnumField                        = 0               ('0')
qdcount    : DNSRRCountField                     = 0               ('None')
ancount    : DNSRRCountField                     = 0               ('None')
nscount    : DNSRRCountField                     = 0               ('None')
arcount    : DNSRRCountField                     = 0               ('None')
qd         : DNSQRField                          = None            ('None')
an         : DNSRRField                          = None            ('None')
ns         : DNSRRField                          = None            ('None')
ar         : DNSRRField                          = None            ('None')
 

解析如下:

length:

        表示除length占用的部分外的整个DNS数据长度,占用两个字节。这个标志只在TCP请求数据包中存在。

id:

        DNS 报文的 ID 标识。对于请求报文和其对应的应答报文,该字段的值是相同的。通过它可以区分 DNS 应答报文是对哪个请求进行响应的。

qr:

        查询请求/响应的标志信息。查询请求时为 0;响应时为 1。

opcode:

        操作码。

        0 为普通的 DNS 请求(标准查询),1为 rDNS 请求(反向查询),2为服务器状态请求,3无意义,4为通知 (Notify),

5为更新 (Update),6到15保留。

aa:

        授权应答。该字段在响应报文中有效。值为 1 时,表示名称服务器是权威服务器;值为 0 时,表示不是权威服务器。

tc:

       表示是否被截断。0表示未截断。1 表示响应已超过 512 字节并已被截断,只返回前 512 个字节。

rd:

       期望递归。该字段能在查询中设置,并在响应中返回。为1时,告诉名称服务器必须处理这个查询,这种方式被称为一个递归查询。如果该位为 0,且被请求的名称服务器没有一个授权回答,它将返回一个能解答该查询的其他名称服务器列表。这种方式被称为迭代查询。

ra:

        可用递归。该字段只出现在响应报文中。当值为 1 时,表示服务器支持递归查询。

z:

        保留字段,在所有的请求和应答报文中,它的值必须为 0。

ad:

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

cd:

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

rcode:

        返回码字段,表示响应的差错状态。

        0为正常

        1 为表示报文格式错误(Format error),服务器不能理解请求的报文。

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

        3为名称错误(Name Error),只有对授权域名解析服务器有意义,指出解析的域名不存在。

        4为查询类型不支持(Not Implemented),即域名服务器不支持查询类型。

        5为拒绝(Refused),一般是服务器由于设置的策略拒绝给出应答,如服务器不希望对某些请求者给出应答。

        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保留

qdcount:

        DNS 查询请求的数目。

ancount:

        DNS 查询请求的数目。

nscount:

        权威名称服务器的数目。

arcount:

        额外的记录数目(权威名称服务器对应 IP 地址的数目)。

qd:

        DNS解析部分,应传入DNSQR类

an:

        是DNS解析的回应部分,为DNSRR类。

ns:

        权威名称服务器区域。

ar:

       附加信息区域。

DNS解析类型

1.A记录解析

        记录类型选择“A”,记录值填写空间商提供的主机IP地址,MX优先级不需要设置,TTL设置默认的3600即可。

 文章来源地址https://www.toymoban.com/news/detail-502987.html

2.CNAME记录解析

        CNAME类型解析设置的方法和A记录类型基本是一样的,其中将记录类型修改为“CNAME”,并且记录值填写服务器主机地址即可。

 

3.MX记录解析

        MX记录解析是做邮箱解析使用的。记录类型选择MX,线路类型选择通用或者同时添加三条线路类型为电信、网通、教育网的记录,记录值填写邮局商提供的服务器IP地址或别名地址,TTL设置默认的3600即可,MX优先级填写邮局提供商要求的数据,或是默认10,有多条MX记录的时候,优先级要设置不一样的数据。

        这些解析类型即DNSQR.qtype、DNSRR.type的内容

DNSQR类解析

该类包含有以下内容

qname:

        查询名,一般为要查询的域名,有时也会是 IP 地址,用于反向查询。比如说www.sina.com。它由一个或者多个标示符序列组成。每个标示符已首字节数的计数值来说明该标示符长度,每个名字以0结束。计数字节数必须是0~63之间。该字段无需填充字节。
qtype:

        DNS 查询请求的资源类型。通常查询类型为 A 类型,表示由域名获取对应的 IP 地址。详见上文。
qclass:

        地址类型,通常为互联网地址,值为 1。

DNSRR类解析

该类包含有以下内容

rranme:

       域名,指DNS 请求的域名。即发送的DNSQR类中的qname。

type:

       资源记录的类型,与问题部分中的查询类型值是一样的。即发送的DNSQR类中的qtype。

rclass:

        地址类型,与问题部分中的查询类值是一样的。

ttl:

        生存时间,以秒为单位,表示资源记录的生命周期,一般用于当地址解析程序取出资源记录后决定保存及使用缓存数据的时间。它同时也可以表明该资源记录的稳定程度,稳定的信息会被分配一个很大的值。

rdlen:

        资源数据的长度。

rdata:

        指DNS记录中与类型相关的数据部分,表示按查询段要求返回的相关资源记录的数据。 比如对于DNS的A记录中的IPv4地址或者MX记录中的主机名及其优先级。

参考资料:

python scapy dns 包字段解析 - 御用闲人 - 博客园

用scapy模拟DNS放大攻击 - Capricorn.python - 博客园

Python 使用Scapy操作DNS流量 - lyshark - 博客园

DNS中的“无效Rdata”

DNS报文格式解析(非常详细)

DNS 标志位简要解析 - imlonghao

 

 

 

 

 

到了这里,关于Scapy:DNS数据包详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python scapy二层、三层发送接收数据包

    Linux环境:安装scapy, 执行scapy 安装scapy yum install python3-pip (安装python3 pip) pip3 install --upgrade pip yum remove python-pip(删除pip) pip3 install scapy (安装scapy) send                : Send packets at layer 3 sendp              : Send packets at layer 2 sr                     : Send and receive packets

    2024年02月07日
    浏览(28)
  • 【Python】构造数据包Scapy——网络扫描、攻击工具

    库 :是Python的一个库,独立运行的工具(在Linux中,将scapy当作一个独立的工具来使用,可以不依赖Python) 使用场景 :网络扫描、攻击工具 可以在自己程序中实现对网络数据包的发送、监听、解析,构建能够进行探测、扫描、攻击的网络工具。 Scapy是可以直接操作到数据包

    2024年02月03日
    浏览(27)
  • DNS服务器没有响应是什么错误?

    如果您遇到 DNS 服务器未响应错误但不知道如何处理,请按照下面的文章在家自己修复此错误! 什么是 DNS 服务器没有响应错误? DNS 服务器无响应错误意味着您的浏览器无法与 DNS 服务器建立连接。通常,DNS 错误是由用户方面的问题引起的,无论是网络或互联网连接、错误配置

    2024年02月06日
    浏览(26)
  • DNS服务器未响应是什么意思

    DNS(域名服务器)是进行域名和与之相对应的 IP 地址转换的服务器,是上网是必须使用的一个电脑与网络交互的工具。平时有没有遇到这样的一个情况,电脑屏幕突然出现了以个这样的提醒,显示 DNS 服务器无响应,网线突然连接不正常,网络连接后正常,显示网络已连接,

    2024年02月07日
    浏览(42)
  • Python灰帽——Scapy模块 / 数据包的构造、发送、接收、捕获

    \\\" 网络神器 \\\" scapy 是 python 的一个第三方模块,能够发送、捕获、分析和铸造网络数据包 主要功能:扫描、识别、测试、攻击、包铸造、抓包分析 在编辑器导入 scapy 包 简单构造 构造数据包 Scapy 中的分层结构 OSI 模型中的下层协议在前,以 / 隔开 Ether()/IP()/TCP() Ether 类用于设

    2024年02月22日
    浏览(37)
  • 子域名查询、DNS记录查询

    首先关于DNS域名解析的一些知识,传送门: https://blog.csdn.net/qq_36119192/article/details/82752515 了解了DNS解析的一些知识后,我们就可以开始我们的DNS探测了! 一些和域名查询相关的网站: · DNS查询:https://dnsdb.io/ · 微步在线:https://x.threatbook.cn/  · 在线域名信息查询: http:

    2024年02月12日
    浏览(26)
  • DNS协议 是什么?说说DNS 完整的查询过程?

    DNS(Domain Names System),域名系统,是互联网一项服务,是进行域名和与之相对应的 IP 地址进行转换的服务器 简单来讲, DNS 相当于一个翻译官,负责将域名翻译成 ip 地址 IP 地址:一长串能够唯一地标记网络上的计算机的数字 域名:是由一串用点分隔的名字组成的 Internet 上

    2024年03月26日
    浏览(37)
  • 浏览器响应数据类型(Content-Type)详解

    浏览器要显示内容,首先需要判断响应消息中的数据属于哪种类型。Web 可以处理的数据包括文字、图像、声音、视频等多种类型,每种数据的显示方法都不同,因此必须先要知道返回了什么类型的数据,否则无法正确显示。 这时,我们需要一些信息才能判断数据类型,原则

    2024年02月11日
    浏览(40)
  • 什么是数据库?数据库分为哪几种?

    一、什么是数据库?   数据库(Database)是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。(简而言之,用来存储大量数据的) 二、数据库分为那几种? 常用数据库有mysql、oracle、sqlse

    2024年02月07日
    浏览(29)
  • DNS域名查询过程

    目录 DNS(Domain Names System) 域名转IP IP转域名  域名 域名查询流程 浏览器DNS缓存 操作系统缓存 本地host文件 完整流程 递归查询 迭代查询 域名系统,将域名和 IP 地址进行转换的服务器。 域名转IP 在命令行中通过 nslookup + 域名可以查看域名解析到ip 也可以在Chrome浏览器中 c

    2024年02月03日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包