2024年2月20日发(作者:)

Wireshark分析网页相应过程

实验四班 况建炜

2801309008

一、 基础知识介绍:

一次完整的网页相应包括一个DNS请求报文,一个DNS回答报文,一个HTTP请求报文和一个HTTP响应报文。

1、 DNS报文格式:

标识符会被复制到对查询的回答报文中,以便让客户机用它来匹配发送的请求和接收到的回答。

标志字段格式为:

QR(1比特):查询/响应的标志位,1为响应,0为查询。这里QR为0表示是一个查询报文。

opcode(4比特):定义查询或响应的类型(若为0则表示是标准的,若为1则是反向的,若为2则是服务器状态请求)。

AA(1比特):授权回答的标志位。该位在响应报文中有效,1表示名字服务器是权限服务器。

TC(1比特):截断标志位。1表示响应已超过512字节并已被截断。

RD(1比特):该位为1表示客户端希望得到递归回答。

RA(1比特):只能在响应报文中置为1,表示可以得到递归响应。

zero(3比特):保留字段,为0。

rcode(4比特):返回码,表示响应的差错状态。

问题区域包含着正在进行的查询信息。该区域包括:名字字段,用于指出正在被查询主机名字;类型字段,用于指出正被询问的问题类型。

回答区域只在来自DNS服务器的回答报文中,包含了对最初请求的名字的资源记录。每个资源记录中有Type字段,Value字段和TTL字图案。在一个回答报文中的回答区域中可以包含多条RR,因为一个主机名可以对应多个IP段。

权威区域包含了其他权威DNS服务器的记录。

附加区域包含了其他一些有帮助的记录。

2、 HTTP请求报文格式:

请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。例如,GET / HTTP/1.1。

请求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。

GET:当客户端要从服务器中读取文档时,使用GET方法。GET方法要求服务器将URL定位的资源放在响应报文的数据部分,回送给客户端。使用GET方法时,请求参数和对应的值附加在URL后面,利用一个问号(“?”)代表URL的结尾与请求参数的开始,传递参数长度受限制。例如,/?id=100&op=bind。

请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。请求头部通知服务器有关于客户端请求的信息,典型的请求头有:

User-Agent:产生请求的浏览器类型。

Accept:客户端可识别的内容类型列表。

Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机。

3、 HTTP响应报文:

响应报文分为三个部分:一个初始状态行、6个首部行,然后是实体主题。

状态行有3个字段:协议版本、状态码和相应状态信息。

首部行包括Connection、Date、Server、User-agent、Last-Modified、Content-Length、Content-Type,下文中会详细介绍。

实体主体部分是报文的主题,包含了所请求的对象本身。

二、 DNS报文分析:

打开Wireshark抓包软件:

选择网卡:

打开IE浏览器并点击Start按钮,开始抓包。在浏览器地址栏输入,等到网页完全加载后停止抓包,获得以下结果:

首先分析DNS报文,DNS有两条报文,一条query报文,一条response报文:

请求报文的内容为:

其中,标识符为0xbd58,这个标识符将和DNS回答报文中的标识符对应。

标志字段为0x0100。

0... .... .... .... = Response: Message is a query 表示报文是请求报文

. .... .... = Opcode: Standard query (0) 表示为标准

.... ..0. .... .... = Truncated: Message is not truncated 表示未截断

.... ...1 .... .... = Recursion desired: Do query recursively 表示希望递归查询

.... .... .0.. .... = Z: reserved (0) 保留位为0

.... .... ...0 .... = Non-authenticated data: Unacceptable

Questions: 1 问题数为1

Answer RRs: 0 回答为0

Authority RRs: 0 权威域名服务器回答为0

Additional RRs: 0

这里的查询名为,查询类型为A,表示是IPv4地址。查询类为0x0001表示Internet数据。

回答报文内容:

上面提到的标识符这里同样也为0xbd58,表示是对刚才那条查询报文的回答。

标志位为0x8180,QR为1,表示是回答报文。opcode是0000,表示是标准的。AA位为0,表示不是权威服务器。TC位为0,表示未截断。RD位为1,且RA为1,表示递归可用。

问题字段跟上面的查询报文是相同的,这里不再赘述,我们来看回答字段:

回答字段第一行我们看到请求的是一个类型为CNAME的记录:,结果得到规范主机名。第二行和第三行请求类型为A(规范主机名)的记录,得到结果为IP地址119.75.213.51和119.75.213.50。

接下来Authoritative nameservers中的四行表示请求知道如何获取域中主机IP地址的权威DNS服务器的主机名,得到结果为、、和。在下面Additional records中的四行是请求主机名为

、、和的IP地址,得到结果分别是123.125.113.66、123.125.113.67、220.181.3.178和220.181.4.178。

三、 HTTP报文分析:

HTTP请求报文:

内容为:

这条请求报文用的是GET方法,协议是HTTP/1.1版本。

Accept指示可被接受的请求回应的介质类型范围列表。这里包括application/x-shockwave-flash, image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,

application/-excel, application/-powerpoint, application/msword,

application/x-ms-application, application/x-ms-xbap, application/-xpsdocument,

application/xaml+xml。

Accept-Language限制请求回应中首选的语言为简体中文。

Accept-Encoding限制了回应中可接受的内容编码值,指示附加内容解码方式为gzip, deflate。

User-Agent定义用户代理,即向服务器发送请求的浏览器类型为Mozilla/4.0.

Host定义目标所在的主机,这里为。

Connection:Keep-Alive告诉服务器使用持久连接。

HTTP响应报文:

内容为:

版本号为HTTP/1.1。状态为200(OK)请求成功。

Date指示服务器产生并发送该相应报文的日期和时间,这里表示时间是2010年10月26日10:47:0。

Server表明该报文是由一个BWS/1.0服务器产生的。BWS服务器应该是百度自己开发的服务器。

Content-Length表示被发送对象的字节数,为3113。

Content-Type表示实体主题中的对象是HTML文本。

Cache-Control是控制网页的缓存,这里的值为private是默认取值。

Expires表示存在时间,允许客户端在这个时间之前不去检查(发请求)。

Connection:keep-alive表示持续连接。

下面的Line-based text data就是发送过来的HTML文本数据。这里就不再详细列出。