最近在看Linux高性能服务器编程,按照书上的讲解实践一下。
1、查询DNS服务器的IP地址
Linux下访问DNS服务,需要知道DNS服务器的IP地址,在Linux上,使用/etc/resolv.conf文件来存放DNS服务器的IP地址,可以通过cat命令来查询。
[root@master ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.182.2
2、域名解析
host是常用的域名解析的工具,可以用来测试域名系统工作是否正常,其通常用于将名称转换为IP地址。在使用的时候,提示host未找到命令,寻找原因后,发现是bind包版本太低,调用命令
yum install bind-utils
更新后,便可以使用host指令。接下来向首选DNS服务器查询机器www.baidu.com的IP地址:
[root@master ~]# host -t A www.baidu.com
www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 120.232.145.185
www.a.shifen.com has address 120.232.145.144
输出告诉我们,机器名www.baidu.com是www.a.shifen.com的别名,并且该机器名对应两个IP地址。
3、使用tcpdump观察DNS通信过程
TCPDUMP是linux上最强大的网络数据采集分析工具,下面将运行host命令查询www.baidu.com对应的IP地址,并使用tcpdump抓取这一过程中的以太网帧,具体操作如下:
在一个命令行窗口输入以下指令,此时会进入监听状态:
sudo tcpdump -i any -nt -s 500 port domain
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 500 bytes
再新建一个命令行窗口,输入host指令,查询www.baidu.com的IP地址,则第一个窗口会输出以下内容:
IP 192.168.182.1.44775 > 192.168.182.2.domain: 662+ A? www.baidu.com. (31)
IP 192.168.182.2.domain > 192.168.182.1.44775: 662 3/5/9 CNAME www.a.shifen.com., A 120.232.145.144, A 120.232.145.185 (348)
数据包开始的“IP”指出后面描述的内容是IP数据报。tcpdump以“IP地址.端口号”的形式来描述通信的一端;以“>“表示数据的传输方向,其前面是源端,后面是目的端。带.domain后缀的代表其使用了域名服务的端口。
第一个数据包中的数值662是DNS查询报文的标识值,”+“表示启用递归查询标志,”A?“表示使用A类型的查询方式,”www.baidu.com"则是DNS查询问题中的查询名,括号中的数值31则是DNS查询报文的长度。
第二个数据包中,'3/4/4’表示该报文包含3个应答资源记录、4个授权资源记录和4个额外信息记录。
“CNAME www.a.shifen.com., A 120.232.145.144, A 120.232.145.185”表示3个应答资源记录的内容,其中CNAME紧随其后记录的是机器的别名,A表示紧随其后的记录是IP地址。