DNS查询报文分析

ops/2024/9/23 7:00:05/

目录

1. 用 tcpdump工具监听抓包

2. 用 host 工具获取域名对应的IP地址

3. 分析DNS以太网查询数据帧

linux%E4%B8%8B%E6%9F%A5%E8%AF%A2DNS%E6%9C%8D%E5%8A%A1%E5%99%A8IP%E5%9C%B0%E5%9D%80-toc" style="margin-left:80px;">3.1 linux下查询DNS服务器IP地址

3.2 DNS以太网查询数据帧

(1)数据链路层

(2)网络

(3)传输层

(4)应用层


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

1. 用 tcpdump工具监听抓包

tcpdump -i ens33 -ent -X port domain                                                                          

-i: 是 interface 的意思,指定要监听的网卡接口。"-i any"表示抓取所有网卡接口的数据包。

ens33:网卡接口名

-e: 是 ethernet (以太网) 的意思,显示以太网帧头部信息。

-n: 是 number 的意思,显示 IP 地址表示主机,而不是主机名;显示数字表示端口号,而不是服务名称。

-t: 不打印抓包时间戳

-XX: X是 hex 的意思,以十六进制显示数据包的内容,并打印每个十六进制字节对应的 ASCII 字符,XX表示还打印以太网帧头部信息

port domain:表示只抓取使用 domain (域名) 服务的数据包,即 DNS 查询和应答数据包

2. 用 host 工具获取域名对应的IP地址

host -t A www.baidu.com

host:是linux下一个常用的访问DNS服务器的客户端程序

-t:告诉DNS协议使用哪种查询方式

A:通过域名获取IP地址

www.baidu.com:需要查询的域名

从 host 命令输出可知,www.baidu.com 是 www.a.shifen.com 的别名,并且对应有两个IP地址,host 命令是通过 DNS 协议跟DNS服务器通信。

3. 分析DNS以太网查询数据帧

linux%E4%B8%8B%E6%9F%A5%E8%AF%A2DNS%E6%9C%8D%E5%8A%A1%E5%99%A8IP%E5%9C%B0%E5%9D%80">3.1 linux下查询DNS服务器IP地址

        我们的目的是要查询域名 www.baidu.com 对应的 IP地址,就要去访问DNS服务器查询,要访问DNS服务器,就要知道DNS服务器的IP地址,在linux下,/etc/resolv.conf 文件存放着DNS服务器的IP地址。我的主机 192.168.0.155 。

cat /etc/resolv.conf 

该文件的内容如下:

# Generated by NetworkManager
nameserver 192.168.0.1
nameserver 8.8.8.8

# Generated by NetworkManager 这行是注释,说明这两个 DNS服务器地址是由网络管理程序写入的

首选DNS服务器IP地址是:192.168.0.1,即路由器(网关)的IP地址

备选DNS服务器IP地址是:8.8.8.8,是google提供的免费DNS服务器的IP地址

有了DNS服务器的IP地址:192.168.0.1,就可以首先在本机 192.168.0.155 的ARP缓存中查询,是否有对应映射的 MAC地址,如果没有就会发送ARP请求,让192.168.0.1告诉它的MAC地址,192.168.0.1就会发送一个ARP应答告诉192.168.0.155 它的MAC地址。

arp -a 192.168.0.1  // 查询本机的ARP缓存是否有192.168.0.1对应映射MAC地址


http://www.ppmy.cn/ops/110677.html

相关文章

软件测试 - 性能测试 (实战 - 基于场景的性能测试-博客系统)(⼯具 - JMeter )

一、 JMeter介绍 1.1 安装JMeter 下载tar包,解压即可。 这里使用的是5.5版本的 解压后,在bin目录下找到 jmeter.bat 双击 正常双击之后,会出来一个终端 如果报错,在bin目录下,打开jmeter.properties文件,…

Rust 循环引用与内存泄漏指南:如何避免‘死亡拥抱

1. 概述Rust的内存管理与循环引用问题 Rust 内存管理的独特性:首先详细描述Rust的所有权和借用检查系统,特别是这些机制如何确保绝大多数情况下的内存安全性,并避免常见的悬空指针(Dangling Pointer)和二次释放&#…

PP_HTONL(x)

#define PP_HTONL(x) ((((x) & (u32_t)0x000000ffUL) << 24) | \(((x) & (u32_t)0x0000ff00UL) << 8) | \(((x) & (u32_t)0x00ff0000UL) >> 8) | \(((x) & (u32_t)0xff000000UL) >> 24)) 这个宏 PP_HTONL(x) 用于将一个 32 位无符号…

git-describe获取不到新创建的标签

一、问题描述 1、新建的分支 2、git-describe 失败 二、查询资料 &#xff08;1&#xff09;git-describe - 根据可用的ref给对象一个人类可读的名称 &#xff08;2&#xff09;该命令查找可从提交访问的最新标记。如果标记指向提交&#xff0c;则仅显示标记。否则&#xf…

悟空crm客户管理系统二次开发 单独新增表格字段

1&#xff0c;仪表盘&#xff08;数据来源修改&#xff09; 注意点&#xff1a;有层级关系&#xff0c;管理员账号可以看到全部数据&#xff0c;主管只能看到下属数据。 2、在客户管理菜单里面 增加一个时间筛选、额度汇总 /*** 获取客户列表** param $type* param $content*…

神经网络的可解释性理论及工具

1.可解释性分析简介 explainable AI&#xff1a;why&#xff0c;利用决策树 eg&#xff1a; interpretable AI&#xff1a;how 2.机器学习的可解释性 解释工具&#xff1a; 按输入对输出的贡献值。 然后把值sigmoid成0-1. 例子&#xff1a; 就是去计算&#xff0c;有你和没你…

react 打开微信小程序不同的版本

项目场景&#xff1a; 在开发大项目的时候&#xff0c;需要在测试环境上打开不同的版本。如在正式环境&#xff0c;打开正式版小程序&#xff1b;在测试环境上&#xff0c;打开体验版小程序。 问题描述 如何根据当前的环境打开不同的版本&#xff1f; 答案是配置环境变量。如…

Qt常用控件——QLineEdit

文章目录 QLineEdit核心属性和信号基本示例正则表达式约束验证输入密码是否一致密码显示状态切换 QLineEdit核心属性和信号 QLineEdit用来表示单行输入&#xff0c;可以输入一段文本&#xff0c;但是不能替换 核心属性&#xff1a; 属性说明text输入框中的文本inputMask输入…