实验八利用Wireshark分析DNS协议
一、实验目的
分析DNS协议
二、实验环境
与因特网连接的计算机,操作系统为Windows,安装有Wireshark、IE等软件。三、实验步骤
nslookup工具允许运行该工具的主机向指定的DNS服务器查询某个DNS记录。如果没有指明DNS服务器,nslookup将把查询请求发向默认的DNS服务器。其命令的一般格式是:
nslookup –option1 –option2 host-to-find dns-server
1、打开命令提示符(Command Prompt),输入nslookup命令。
图中显示三条命令,第一条命令:nslookup “提出一个问题”
即:“将主机 的IP地址告诉我”。屏幕上出现了两条信息:(1)“回答这一问题”DNS服务器的名字和IP地址;(2) 主机名字和IP地址。
第二条命令:nslookup –type=NS
在这个例子中,我们提供了选项“-type=N S”,域为。执行这条命令后,屏幕上显示了DNS服务器的名字和地址。接着下面是三个MIT DNS服务器,每一个服务器是MIT校园里权威的DNS服务器。
第三条命令:nslookup www.aiit.or.kr
在这个例子中,我们请求返回 DNS server 而不是默认的DNS服务器()。此例中,DNS 服务器提供主机www.aiit.or.kr 的IP地址。
2、ipconfig
ipconfig用来显示TCP/IP 信息, 你的主机地址、DNS服务器地址,适配器等信息。如果你想看到所有关于你所在主机的信息,可在命令行键入:
ipconfig /all
ipconfig在管理主机所储存的DNS信息非常有用。
如果查看DNS缓存中的记录用命令:ipconfig /displaydns
要清空DNS缓存,用命令:ipconfig /flushdns
3、利用Wireshark捕获DNS信息
(1)利用ipconfig命令清空你的主机上的DNS缓存。
(2)启动浏览器,将浏览器的缓存清空。
(3)启动Wireshark分组俘获器,在显示过滤筛说明处输入
“ip.addr==your_IP_address”(如:ip.addr==202.202.210.104),过滤器(filter)将会删除所有目的地址和源地址都与指定IP地址不同的分组。
(4)开始Wireshark俘获。
(5)在浏览器的地址栏中输入:
(6)停止分组俘获。
(7)重复上面的实验,只是将命令替换为:nslookup –type=NS
(8)重复上面的实验,只是将命令替换为:
nslookup www.aiit.or.kr
四、实验报告
在实验的基础上,回答以下问题:
(1)你的浏览器运行的是HTTP1.0,还是HTTP1.1?你所访问的服务器所运行的HTTP版本号是多少?
(2)你的浏览器向服务器指出它能接收何种语言版本的对象?
(3)你的计算机的IP地址是多少?服务器的IP地址是多少?
(4)从服务器向你的浏览器返回的状态代码是多少?
(5)你从服务器上所获取的HTML文件的最后修改时间是多少?
(6)返回到你的浏览器的内容以供多少字节?
(7)分析服务器响应报文的内容,服务器是否明确返回了文件的内容?如何获知?
(8)服务器对第二个HTTP GET请求的响应中的HTTP状态代码是多少?服务器是否明确返回了文件的内容?请解释。
(9)与这个HTTP GET请求相对应的响应报文的状态代码和状态短语是什么?
(10)你的浏览器一共发出了多少个HTTP GET请求?这些请求被发送到的目的地的IP地址是多少?
(11)对于浏览器发出的最初的HTTP GET请求,服务器的响应是什么(状态代码和状态短语)?
(12)当浏览器发出第二个HTTP GET请求时,在HTTP GET报文中包含了哪些新的字段?
(13)DNS查询报文的目的端口号是多少?DNS查询响应报文的源端口号是多少?
//根据半径计算圆的周长和面积
#include
const float PI=3.1416; //声明常量(只读变量)PI为3.1416 float fCir_L(float); //声明自定义函数fCir_L()的原型float fCir_S(float); //声明自定义函数fCir_S()的原型//以下是main()函数
main()
{
float r,l,s; //声明3个变量
cout<<"R="; //显示字符串
cin>>r; //键盘输入
l=fCir_L(r); //计算圆的周长,赋值给变量l
s=fCir_S(r); //计算圆的面积,赋值给变量s
cout<<"l="< cout<<"\ns="< } //定义计算圆的周长的函数fCir_L() float fCir_L(float x) { float z=-1.0; //声明局部变量 if (x>=0.0) //如果参数大于0,则计算圆的周长z=2*PI*x; return(z); //返回函数值 } //定义计算圆的面积的函数fCir_S() float fCir_S(float x) { float z=-1.0; //声明局部变量 if (x>=0.0) //如果参数大于0,则计算圆的面积z=PI*x*x; return(z); //返回函数值 } /* Program: P1-2.CPP Written by: Hap Date written: 02:11:10 */ #include void main(void) { double s1,s2,s3; s1=1.5; /* 对变量s1赋值*/ cout<<"s1="< /* 对变量s2赋值*/ s2=2.5; cout<<"s2="< s3= /* 对变量s3赋值*/ 3.5; cout<<"s3="< cout<<"s1+s2+s3="< } #include main() { double r=1.0;