通过Wireshark抓包,理解HTTP,DNS,TCP,UDP,IP等协议工作原理。

一、实验名称

利用Wireshark抓包并分析 TCP/IP 协议

二、实验目的

通过实验,了解和掌握报文捕获工具 Wireshark 的使用方法和基本特点,使 用 Wireshark 捕获网络报文,并分析各种网络协议的报文格式和工作过程。

三、实验内容

使用 Wireshark 捕获网络报文,分析以太网、ARP、IP、TCP、DNS 和 HTTP 等协议的报文格式和工作过程。

四、实验步骤

  1. DNS分析

    在 cmd 下运行:

    nslookup –type=A www.nudt.edu.cn

    nslookup –type=NS nudt.edu.cn

    nslookup –type=MX nudt.edu.cn

    nslookup –type=A www.nudt.edu.cn sdns.nudt.edu.cn

    然后用Wireshark捕获报文并分析DNS和UDP协议的报文格式和工作过程。

  2. ICMP分析

    在cmd下运行

    ping www.baidu.com

    tracert www.baidu.com

    然后用Wireshark捕获报文并分析 ICMP 报文格式和工作过程。

  3. TCP/IP分析

    a) 在浏览器输入 www.scmyzx.com.cn 网址后,然后用 Wireshark 捕获报文并分析HTTP,TCP,IP,ARP和以太网等协议的报文格式和工作过程。

    b) 运行各自编写的 UDP 和 TCP 客户/服务器程序并进行抓包分析。

五、实验结果及分析

(一)DNS分析

通过ipconfig命令查看IP、网关地址

IP地址192.168.43.217

默认网关192.168.43.1

DNS报文格式

DNS分析大体相同,就选择其一进行分析

1.在cmd下运行nslookup -type=A www.nudt.edu.cn

非权威应答:110.53.188.133 113.247.230.248 202.197.9.133

应答服务器地址为192.168.43.1,为默认网关地址

利用wireshark进行抓包分析,筛选DNS报文,本次运行有4个DNS报文,可以看出对应请求包和响应包的源IP与目的IP刚好相反。

Query这是一个请求报文。首先主机发送一个 DNS 报文。DNS 采用 UDP 协议支持。从报文可以看出端口号53,报文长度51,检错码0x1347,报文标识号Transaction ID 为0x0001

Queries

1.43.168.192.in-addr.arpa: type PTR, class IN

Response响应报文

No such name,没有Answers

源端口号50161,目的端口号53,报文长度41,检错码0xb9ad,报文标识号Transaction ID为0x0002,从Flags可知为递归查询。

Type:A(Host Address)(1),表示该报文提出一个查询ipv4地址的请求。

response这是一个响应报文。源端口号51,目的端口号50161,长度89,检错码0x1d16,报文标识号Transaction ID为0x0002,非权威服务器。

有3个Answers

www.nudt.edu.cn: type A, class IN

addr 110.53.188.133 113.247.230.248 202.197.9.133

即ipv4地址,结果是110.53.188.133 113.247.230.248 202.197.9.133

2.在cmd下运行nslookup -type=NS nudt.edu.cn

对nudt.edu.cn进行NS查询

得到两条非权威应答nameserver的值分别为sdns.nudt.edu.cn和dns.hn.edu.cn

请求报文

端口号、报文长度、检错码等和前面分析相同,不再赘述。

Queries

1.43.168.192.in-addr.arpa:type PTR, class IN

查询类型PTR

响应报文

No such name,没有Answer

请求报文

Queries

nudt.edu.cn: type NS, class IN

响应报文

有2个Answers,权威服务器

nudt.edu.cn type: NS, class IN, ns

sdns.nudt.edu.cn dns.hn.edu.cn

3.在cmd下运行nslookup -type=MX nudt.edu.cn

请求报文

1.43.168.192.in-addr.arpa: type PTR, class IN

响应报文

无Answer,一个权威服务器168.192.IN-ADDR.ARPA: type SOA, class IN, mname 168.192.IN-ADDR.ARPA

请求报文

Queries

nudt.edu.cn: type MX, class IN

响应报文

有4个Answers,nudt.edu.cn: type MX, class IN

Preference 15, mx mail1.nudt.edu.cn

Preference 10, mx mail.nudt.edu.cn

Preference 20, mx mail2.nudt.edu.cn

Preference 5, mx mx-nudt-edu-cn.icoremail.net

4.在cmd下运行nslookup -type=A www.nudt.edu.cn sdns.nudt.edu.cn

各组报文分析类似,这里仅选取其中一组进行。

请求报文,UDP,源端口号62373,目的端口号53,报文长度52,检验和0x9302;DNS,Transaction ID:0x0001,标志0x0100,期望递归。

一个Query,181.0.197.202.in-addr.arpa: type PTR, class IN

响应报文,UDP,源端口号53,目的端口号62373,报文长度82,检验和0xbeee;DNS,Transaction ID:0x0001,标志0x8180,属于响应,期望递归且可递归。

一个Answer,181.0.197.202.in-addr.arpa: type PTR, class IN, sdns.nudt.edu.cn

5.DNS工作过程分析

① 当我的主机与某一个ISP连接时,该ISP提供一台主机的IP地址,该主机具有一台或多台其本地DNS服务器的IP地址。当我的主机发出DNS请求时,该请求被发往本地DNS服务器,它起着代理的作用,并将该请求转发到DNS服务器层次结构中,最后将查询结果返回给我的主机。

② 当我查询域名www.nudt.edu.cn时,主机将向本地DNS服务器发起请求查询该域名。

③ 本地DNS服务器接收到请求后,会先查询自己的缓存中是否有该地址,如果有的话,就直接返回相应结果,查询成功,同时该查询结果被标记为非权威应答;若没有,则本地DNS服务器会从配置文件中读取根域名服务器的地址,向其中一台发出查询请求。

④ 根服务器接收到请求后,解析到是cn这个顶级域名下的,于是向本地DNS服务器返回负责cn的顶级域的IP列表。

⑤ 本地DNS服务器接收到该列表后,再次向其中一台发送请求。

⑥ cn域的服务器收到请求后,解析到是edu.cn域的,于是向本地DNS服务器返回负责edu.cn域的IP列表。

⑦ 本地DNS服务器收到列表后,再次向其中一台发送请求,过程与上述类似,直到最终权威服务器收到该查询请求,如sdns.nudt.edu.cn,权威服务器会查询相应IP地址并返回给本地DNS服务器,本地DNS服务器获得最终结果后,将结果返回给我的主机,并将结果保存在缓存中,设定一定的存活时间,最终我的主机的DNS查询请求完成。

(二)ICMP

1.在cmd下运行ping www.baidu.com

ping一共进行了四次,均成功,获取了四组报文,分别是6和8、10和11、18和19、22和23。

以其中一组为例分析

请求报文

原IP地址192.168.43.217 目的IP地址183.232.231.172

Type: 8 (Echo (ping) request) Code: 0 回显请求

Checksum 正确

响应报文

原IP地址183.232.231.172 目的IP地址192.168.43.217

Type: 0 (Echo (ping) reply) Code: 0 回显回答(对ping的回答)

Checksum 正确

2.在cmd下运行tracert www.baidu.com

报文大致可分为三种类型:

  1. 源主机发送请求,路由器回复错误报告

  2. 源主机发送请求,路由器请求超时

  3. 源主机发送请求,目的主机回复响应

接下来对以上三种类型各举一个例子分析

  1. 源主机发送请求,路由器回复错误报告

Type: 3 (Destination unreachable) Code: 3 (Port unreachable) 目的端口不可达

  1. 源主机发送请求,路由器请求超时

请求报文

Type: 8 (Echo (ping) request) Code: 0 回显请求

TTL为1

无响应 Expert Info (Warning/Sequence): No response seen to ICMP request

这是默认网关发送给源主机的报文

Type: 11 (Time-to-live exceeded) Code: 0 (Time to live exceeded in transit) TTL过期

这里返回了中间路由器的IP地址,192.168.43.1(默认网关),可见是第一跳。

  1. 源主机发送请求,目的主机回复响应

请求报文

Type: 8 (Echo (ping) request) Code: 0 回显请求

响应报文

Type: 0 (Echo (ping) reply) Code: 0 回显回答(对ping的回答)

工作过程:

Tracert 使用ICMP报文实现,可跟踪从一台主机到世界上任意一台主机之间的路由。为了判断源和目的地之间所有路由器的名字和地址,源主机中的tracert向目的地主机发送一系列普通的IP数据报。每个这些数据报携带了一个具有不可达UDP端口号的UDP报文段,第一个数据报的TTL为1,第二个为2,依次递增。该源主机也为每个数据报启动定时器,当第n个数据报到达第n台路由器时,第n台路由器观察到这个数据报的TTL刚好过期。根据IP协议规则,路由器丢弃该数据报并发送一个ICMP告警报文给源主机(类型11编码0)。该告警报文包含了路由器的名字和IP地址。当该ICMP报文返回源主机时,源主机从定时器得到往返时延,从ICMP报文中得到第n台路由器的名字和IP地址。

随着TTL递增,最终有一个报文将到达目的主机,由于该报文具有不可达端口号,于是该目的主机将向源主机发送一个端口不可达的ICMP报文(类型3编码3)。而源主机收到这个ICMP报文后,就知道不需要再发送数据报了,Tracert结束。

(三) TCP/IP

1. 在浏览器输入www.scmyzx.com.cn网址后,然后用wireshark捕获报文并分析页面抓取过程

① 当我的电脑与网络连接时,没有IP地址就不能做任何事情(例如下载一个Web网页),所以我的电脑所采取的一个网络相关的动作是运行DHCP协议,以从本地DHCP服务器获得一个IP地址以及其他信息。

操作系统生成一个DHCP请求报文,并将这个报文放入具有目的端口号67(DHCP服务器)和源端口号68(DHCP客户)的UDP报文段。该UDP报文段被放置在一个具有广播IP目的地址(255.255.255.255)和源IP地址(0.0.0.0)的IP数据报中,因为电脑还没有一个IP地址。

② 包含DHCP请求报文的IP数据报则被放置在以太网帧中。该以太网帧具有目的MAC地址FF:FF:FF:FF:FF:FF,使得该帧将广播到与交换机连接的所有设备,该帧的源MAC地址则是我的电脑的MAC地址5c:ea:1d:9a:99:43。

③ 包含DHCP请求的广播以太网帧是第一个由电脑发送到以太网交换机的帧,该交换机在所有的出端口广播入帧,包括连接到路由器的端口。路由器接收到该以太网帧后,从中抽取出IP数据报。该数据报的广播IP目的地址指示了这个IP数据报应当由在该结点的高层协议处理,因此该数据报的载荷(一个UDP报文段)被分解,向上到达UDP,DHCP请求报文从此UDP报文中抽取出来。此时DHCP服务器有了DHCP请求报文。

④ DHCP服务器将分配IP地址给我的电脑,这些信息会被放入一个DHCP ACK报文,而这个报文被放入一个UDP报文段,UDP报文段被放入一个IP数据报,IP数据报再被放入一个以太网帧中。

可以看到源MAC地址为96:fc:30:e8:71:b8,而目的MAC地址就是之前看到的我的MAC地址5c:ea:1d:9a:99:43,源IP地址为192.168.43.1,目的IP地址为192.168.43.217,可以在DHCP ACK报文中看到,这正是DHCP服务器为我分配的IP地址。

⑤ 现在我的电脑已经拥有了自己的IP地址,具备了基本条件。接下来,当我将www.scmyzx.com.cn的URL键入Web浏览器时,开始了一连串的事件。浏览器需要生成一个TCP套接字,用于向www.scmyzx.com.cn发送HTTP请求。但为了生成这个套接字,电脑需要知道www.scmyzx.com.cn的IP地址,故需要DNS协议提供转换服务。

⑥ 操作系统因此生成一个DNS查询报文,将字符串www.scmyzx.com.cn放入DNS报文的问题段中。该DNS报文则放置在一个具有53号端口(DNS服务器)目的端口的UDP报文段中。该UDP报文段则被放入具有IP目的地址192.168.43.1(第④步中DHCP ACK返回的DNS服务器地址)和源IP地址192.168.43.217的IP数据报中。

⑦ 包含DNS请求报文的数据报被放入一个以太网帧中,该帧将发送到网关。但虽然知道了网关的IP地址,却仍不知道其MAC地址,所以需要使用ARP协议。生成一个具有目的IP地址192.168.43.1(默认网关)的ARP查询报文,将该ARP报文放置在一个具有广播目的地址(FF:FF:FF:FF:FF:FF)的以太网帧中,并向交换机发送该以太网帧,交换机将该帧交付给所有连接的设备。

⑧ 网关接收到包含ARP查询报文的帧后,发现ARP报文中目的IP地址192.168.43.1匹配其接口的IP地址,因此准备一个ARP回答,指示它的IP地址对应MAC地址96:fc:30:e8:71:b8。该回答放入一个以太网帧中,其目的地址为5c:ea:1d:9a:99:43。

⑨ 我的电脑接收到了包含该ARP回答报文的帧,并从中抽取网关的MAC地址,现在能够使包含DNS查询的以太网帧寻址到网关的MAC地址了。

该报文如上图,源IP地址192.168.43.217,目的IP地址192.168.43.1(DNS服务器),使用UDP承载了DNS请求报文,其中有包含一个query,请求www.scmyzx.com.cn的IP地址。

⑩ DNS服务器返回的DNS应答报文如下

可以看到有一个answer,其中说明了www.scmyzx.com.cn对应的IP地址为120.76.101.154

⑪ 现在有了www.scmyzx.com.cn的IP地址后,就能够生成TCP套接字了,该套接字将用于向www.scmyzx.com.cn发送HTTP GET报文。当生成套接字时,我的TCP必须首先与www.scmyzx.com.cn的TCP执行三次握手。因此首先生成一个具有目的端口80的TCP SYN报文段,发给IP地址120.76.101.154,这是三次握手的第一次。(接下来这些报文的发送的更底层的细节,与前面叙述的过程类似,就不再赘述。)

SYN,Seq=0

⑫ 和11中类似,第二、三次握手如下:

826号是第一次,843号是第二次,847号是第三次

SYN ACK,Seq=0 ACK=1

ACK,Seq=1 ACK=1

三次握手完成,与www.scmyzx.com.cn的TCP连接成功建立。

⑬ 借助于我的套接字,现在准备向www.scmyzx.com.cn发送字节了。浏览器生成包含要获取的URL的HTTP GET报文,HTTP GET报文则写入套接字,其中GET报文成为一个TCP报文段的载荷。该TCP报文段放入一个数据报中,并交付给www.scmyzx.com.cn,和前面的分析类似。

可以看到该HTTP的首部各种信息,包括主机名,TCP连接模式等等。

⑭ 下面是应答报文

可以看到首部行的各种信息,包括HTTP/1.1 200 OK内容格式,字符格式,浏览器类型,时间等等。下面的数据部分则是提供给浏览器,用于生成网页的数据。

⑮ 通过这些数据,我们终于能在浏览器上看到我们抓取的网页了。

2. 运行编写的UDP和TCP客户/服务器程序并进行抓包分析

这里使用的是同一局域网内的两台主机之间进行通信,运行客户端程序的主机IP地址为192.168.43.217,MAC地址为5c:ea:1d:9a:99:43;运行服务器程序的主机IP地址为192.168.43.43,MAC地址为bc:a8:a6:fe:72:b1。

① UDP

可以看到源、目的IP地址和MAC地址,协议为UDP(17)。UDP报文段有源端口、目的端口号、长度、检验和,下面数据部分可以看到客户端发送给服务器的数据是abc。

信息和上一个报文大致类似,可以看到源和目的相反,数据部分也可以看到服务器返回给客户端的数据,是大写的ABC。

② TCP

2、3、4号报文为三次握手过程

33号报文内有客户端发向服务器的数据abc

34号报文内有服务器返回客户端的数据ABC

35、36、37、38号报文为关闭TCP连接过程

35号:客户端向服务器发送FIN报文

36号:服务器收到FIN,回应ACK

37号:服务器也向客户端发送一个FIN报文

38号:客户端收到FIN,回应ACK

TCP连接关闭

整个过程至此完成。

六、实验中遇到的问题及解决方法

遇到的问题:

对wireshark使用方法的不熟悉,以及对报文结构和各网络协议工作原理的不熟悉。

解决方法:

反复阅读教材,并学习wireshark使用方法,依照实验指导进行抓包,将抓包文件保存后,反复进行分析。

七、实验心得体会

通过实验,了解和基本掌握了报文捕获工具 Wireshark 的使用方法和基本特点,使 用 Wireshark 捕获网络报文,分析了各种网络协议的报文格式和工作过程,加深了对各种网络协议的理解。

尤其是最后对于在浏览器获取一个网页的过程的分析,将计算机网络各个层次以及相应的各种网络协议联系起来,形成了一个整体上的认识,让我对计算机网络的认识更加清晰和完整。同时也帮助自己记忆了一些计算机网络的知识点。

版权声明:本文为gaozhenyu原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/gaozhenyu/p/14167157.html