1.6.3 使用tcpdump观察DNS通信过程


前言

本篇文章为笔者的读书笔记,未经允许请勿转载。如果对你有帮助记得点个赞(●’◡’●)
本次实验是linux高性能服务器编程的第二个实验,难度不大,巩固tcpdump的一些常用知识。


DNS工作原理

我们通常使用机器的域名来访问这台机器,而不是直接使用IP地址。域名转换成IP地址需要使用域名查询服务。域名查询服务有很多种实现方式,比如NIS(Network Information Service,网络信息服务)、DNS和本地静态文件等。
DNS是一套分布式的域名服务系统。每个DNS服务器上都存放着大量的机器名和IP地址的映射,并且是动态更新的。众多网络客户端程序都使用DNS协议来向DNS服务器查询目标主机的IP地址


linux下访问DNS服务

要访问DNS服务,就必须先知道DNS服务器的IP地址。
linux使用/etc/resolv.conf文件来存放DNS服务器的IP地址。

root@iZwz9e2t1qu6rzggq3tc0dZ:/# cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
# 127.0.0.53 is the systemd-resolved stub resolver.
# run "systemd-resolve --status" to see details about the actual nameservers.

nameserver 127.0.0.53
options timeout:2 attempts:3 rotate single-request-reopen

由于我用的阿里云服务器所以里面的数据不太一样
接下来通过host命令使用DNS协议和服务器通信.

root@iZwz9e2t1qu6rzggq3tc0dZ:/# host -t A wwww.baidu.com
wwww.baidu.com is an alias for ps_other.a.shifen.com.
ps_other.a.shifen.com has address 220.181.38.251
ps_other.a.shifen.com has address 220.181.38.148

其中-t选项告诉DNS协议使用哪种查询类型。我们这里使用的是A类型,即通过机器的域名获得其IP地址(但实际上返回的资源记录中还包含机器的别名)。

实验开始

在服务器上开启两个终端,一个测试终端一个监听终端

  • 监听终端
root@iZwz9e2t1qu6rzggq3tc0dZ:~# tcpdump -i eth0 -nt -s 0 port domain
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes

-i 指定监听的网络接口,网络接口通过ifconfig查看一般都是eth0,-n指定每个监听到数据包中的域名转换成IP地址后显示出来,不把网络地址转换成名字,-t不打印时间戳,“-s snaplen” snaplen表示从一个包中戳取的字节数。0表示包不截断,抓完整的数据包,其实500就够用了,可以看到“capture size 262144 bytes”就是完整的数据包大小。默认的话tcpdump只显示部分数据包,默认68字节。
“port domain”表示只抓取使用domain(域名)服务的数据包,即DNS查询和应答报文。

  • 测试终端
root@iZwz9e2t1qu6rzggq3tc0dZ:/# host -t A wwww.baidu.com
wwww.baidu.com is an alias for ps_other.a.shifen.com.
ps_other.a.shifen.com has address 220.181.38.148
ps_other.a.shifen.com has address 220.181.38.251

关于这个的解释上面已经说了

  • 监听终端
root@iZwz9e2t1qu6rzggq3tc0dZ:~# tcpdump -i eth0 -nt -s 0 port domain
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
IP 172.17.128.254.42357 > 100.100.2.136.53: 62792+ A? ps_other.a.shifen.com. (39)
IP 100.100.2.136.53 > 172.17.128.254.42357: 62792 2/0/0 A 220.181.38.148, A 220.181.38.251 (71)
^C
2 packets captured
2 packets received by filter
0 packets dropped by kernel
root@iZwz9e2t1qu6rzggq3tc0dZ:~# 

这两个数据包开始的“IP”指出,它们后面内容描述的是IP数据报(数据报是通过网络传输的数据的基本单元,包含一个报头(header)和数据本身,其中报头描述了数据的目的地以及和其它数据之间的关系。)

tcpdump以“IP地址.端口号”的形式来描述通信的某一端:以“>”表示数据传输的方向,“>”前面是源端,后面是目的端。

第一个数据包是服务器向其首选DNS服务器发送的DNS查询报文(目标端口53是DNS服务使用的端口)。数值62792是DNS查询报文的标识值,因此该值也出现在DNS应答报文中。“+”表示启用递归查询标志。“A?”表示使用A类型的查询方式。“ps_other.a.shifen.com.”则是DNS查询问题中的查询名。括号中的数值39是DNS查询报文的长度(以字节为单位)。

第二个数据包是服务器反馈的DNS应答报文。“2/0/0”表示2个应答资源记录、0个授权资源记录和0个额外信息记录。“A 220.181.38.148, A 220.181.38.251”表示2个应答资源记录的内容。A 表示紧随其后的记录是IP地址。该报文长度71。


数据报信息

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值