网络--HTTP协议分析

1基本原理

1.1协议简介

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。

HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。

HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。

HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。

HTTP协议工作原理

HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。

以下是 HTTP 请求/响应的步骤:

(1)客户端连接到Web服务器

一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。例如,http://www.oakcms.cn。

(2)发送HTTP请求

通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。

(3)服务器接受请求并返回HTTP响应

Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。

(4)释放连接TCP连接

若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;

(5)客户端浏览器解析HTML内容

客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。

HTTP协议特点

(1)简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

(2)灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

(3)无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

(4)无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

(5)支持B/S及C/S模式。

HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接。URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息。

HTTP协议消息格式

请求消息Request

客户端发送一个HTTP请求到服务器的请求消息包括以下格式:

请求行(request line)、请求头部(header)、空行和请求数据四个部分组成。

请求行

请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。例如,GET /index.html HTTP/1.1。HTTP 协议的请求方法有:GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。这里介绍最常用的GET方法和POST方法。

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

POST:当客户端给服务器提供信息较多时可以使用POST方法。POST方法将请求参数封装在HTTP请求数据中,以名称/值的形式出现,可以传输大量数据。

请求头部

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

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

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

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

空行

最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头。

请求数据

请求数据不在GET方法中使用,而是在POST方法中使用。POST方法适用于需要客户填写表单的场合。与请求数据相关的最常使用的请求头是:

Content-Type 和 Content-Length。

响应消息Response
一般情况下,服务器接收并处理客户端发过来的请求后会返回一个HTTP的响应消息。
HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。

状态码

状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:

1xx:指示信息–表示请求已接收,继续处理

2xx:成功–表示请求已被成功接收、理解、接受

3xx:重定向–要完成请求必须进行更进一步的操作

4xx:客户端错误–请求有语法错误或请求无法实现

5xx:服务器端错误–服务器未能实现合法的请求

常见状态代码、状态描述的说明如下。

200 OK:客户端请求成功。

400 Bad Request:客户端请求有语法错误,不能被服务器所理

401 Unauthorized:请求未经授权,这个状态代码必须和 WWW-Authenticate 报头域一起使用。

403 Forbidden:服务器收到请求,但是拒绝提供服务。

404 Not Found:请求资源不存在,举个例子:输入了错误的URL

500 Intenal Server Error:服务器发生不可预期的错误。

503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常。

HTTP请求方法

根据HTTP标准,HTTP请求可以使用多种请求方法。

HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。

HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

1.2 wireshark简介

Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是截取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。Wireshark主要应用于网络管理员用来解决网络问题,网络安全工程师用来检测安全隐患,网络管理员用来解决网络问题,用来学习网络协议。Wireshark不是入侵侦测软件(Intrusion DetectionSoftware,IDS)。对于网络上的异常流量行为,Wireshark不会产生警示或是任何提示。然而,仔细分析Wireshark截取的封包能够帮助使用者对于网络行为有更清楚的了解。Wireshark不会对网络封包产生内容的修改,它只会反映出目前流通的封包资讯。网络分析也被称为流量分析、协议分析、嗅探、数据包分析或者窃听。网络分析器可以是一个配有专用软件的独立硬件设备,也可以是一种安装在PC机上的软件工具。

Wireshark的工作流程

(1)确定Wireshark的位置。如果没有一个正确的位置,启动Wireshark后会花费很长的时间捕获一些与自己无关的数据。

(2)选择捕获接口。一般都是选择连接到Internet网络的接口,这样才可以捕获到与网络相关的数据。否则,捕获到的其它数据对自己也没有任何帮助。

(3)使用捕获过滤器。通过设置捕获过滤器,可以避免产生过大的捕获文件。这样用户在分析数据时,也不会受其它数据干扰。而且,还可以为用户节约大量的时间。

(4)使用显示过滤器。通常使用捕获过滤器过滤后的数据,往往还是很复杂。为了使过滤的数据包再更细致,此时使用显示过滤器进行过滤。

(5)使用着色规则。通常使用显示过滤器过滤后的数据,都是有用的数据包。如果想更加突出的显示某个会话,可以使用着色规则高亮显示。

(6)构建图表。如果用户想要更明显的看出一个网络中数据的变化情况,使用图表的形式可以很方便的展现数据分布情况。

(7)重组数据。Wireshark的重组功能,可以重组一个会话中不同数据包的信息,或者是一个重组一个完整的图片或文件。由于传输的文件往往较大,所以信息分布在多个数据包中。为了能够查看到整个图片或文件,这时候就需要使用重组数据的方法来实现。

2设计内容

2.1设计目的

(1)熟悉并掌握 WireShark抓包工具的基本操作,了解网络协议实体间的交互以及报文交换。

(2)通过对WireShark抓包实例进行分析,进一步加深对常用网络协议HTTP协议的理解。

(3)培养理论联系实践的科学研究精神。

2.2设计方法

(1)利用 Wireshark软件抓取本地PC的数据包,观察其主要使用的网络协议。

(2)根据所获数据包的内容分析相关HTTP协议,从而加深对HTTP网络协议的理解。

3设计步骤

3.1课程设计步骤

 (1)启动Wireshark

图3.1启动wireshark

 (2)启动PC上的浏览器

图3.2启动浏览器

(3)开始分组捕获:选择“抓包”下拉菜单中的“抓包参数选择”命令,在WireShark:“抓包选项”窗口中可以设置分组捕获的选项。

(4)在这次实验中,使用窗口中显示的默认值。选择“抓包”下拉菜单中的“网络接口”命令,显示计算机中所安装的网络接口(即网卡)。我们需要选择电脑真实的网卡,点击后显示本机的卫地址。

(5)随后,点击“开始”则进行分组捕获,所有由选定网卡发送和接收的分组都将被捕获。

(6)待捕获一段时间,关闭浏览器,选择主窗口中有的“stop”按钮,可以停止分组的捕获。
 

图3.3抓包

3.2 抓包并分析过程

这次实验通过分析 http://gaia.cs.umass.edu/wireshark-labs/HTTP-wireshark-file1.html此链接来分析http 协议的作用。在 flter 中输入 http 进行筛选。
wireshark 所抓的含有http 请求报文的帧:

图3.4打开相关连接抓到的 HTTP 包

对打开实验链接这个事务进行分析,在浏览器中输入指定链接,敲击回车的过程中,浏览器向DNS请求解析该链接的IP地址。域名系统DNS解析出服务器的地址为128.195.110.11在这个过程中本机 IP 10.13.214.237。然后浏览器与服务器建立 TCP连接。然后浏览器发出取文件命令GET/person.png HTTP/1.1。服务器给出响应把文件(text/html) 发送给浏览器,浏览器显示text/html 中的所有文本。浏览器下载网页文本内容,网页文本中标记着图片、CSS文件和Flash等等。在这次课程设计中主页还包括图片和其他一些内容,浏览器分析出这些内容后开4个线程对这些内容进行下载,分别向服务器发送请求报文,服务器接收到内容后根据HTTP协议发送响应报文。所有的内容下载完毕时候浏览器会显示全部内容, 一个完整的网页链接就这样打开了。


3.3 分析HTTP报文

图3.5包1

分析:本地PC机(IP地址为10.13.214.237)中的浏览器向目标网页的服务器(IP地址为128.195.110.11)请求服务时,先和PC网络代理服务器建立TCP连接,并向代理服务器发出HTTP请求报文,请求服务器发送文本文件。

代码分析:

Hypertext Transfer Protocol

GET/wiki/lib/exe/detail.php?id=net%3Alab%3Anetworkprotocolanalysis%3Awireshark_http&media=net:lab:networkprotocolanaly            //请求目标

Host:218.195.110.11\r\n             //目标所在主机

Connection:keep-alive\r\n         //激活链接

Upgrade-Insecure-Requests:1\r\n

User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 (//用户代理,所用的浏览器是谷歌)Safari/537.Accept:text/html,application/xhtml+xmlapplication/xml;q=0.9,image/avif,image/webpimage/apng,*/*;q=0.8,application/s.Referer:http://218.195.110.11/wiki/doku.php?id=net:lab:networkprotocolanalysis:wireshark_http\r\n

Accept-Encoding:gzip, deflate\r\n              //可接受编码,文件格式

Accept-Language:zh-CN,zh;q=0.9\r\n         //可接受语言:中文

Cookie:DokuWiki=p6ms7rd8fstj38tie31j5mq1hg\r\n

[Full_request ]

URL:http://218.195.110.11/wiki/1ib/exe/detail.php?id=net&3Alab%3Anetworkprotocolanalysisx3Awireshark_htt[HTTP request 1/8]

[Response in frame:38941

INext reauest in_frame:38961

图3.6包2

分析:由状态栏的200代码可知,目标服务器(IP地址为128.195.110.11)成功接收到我们本地发送的请求报文,向本地PC机(IP地址为10.13.214.237)发送响应报文,把文件发送给浏览器。根据报文内容可以知道更多的关于文档的信息。

代码分析:

Hypertext Transfer Protocol

HTTP/1.1 200 OK\r\n。 //状态行,成功

server;:Apache/2.4.6(Centos) openSSl/1.0.2k-fips   //服务器

Date:Thu, 10 May 2022 12:25:36 GMT\r\n。 //响应信息创建的时间

Content-Type:text/html;charset-UTF-8\r\n。  // 内容类型:文本

Transfer-Encoding:chunked\r\n。  //内容编码

Connection:keep-alive\r\n。     //激活链接

Vary:Accept-Encoding\r\n

set-Cookle:JSESSIONID-849116191E96S2189E717F3F0CF71570;Path-/;Httponly\r\nset-Cookie:spaceFid=2446;Domain=chaoxing.com; Path=/\r\n

Set-Cookie:spaceRoleId-"";Domain-chaoxing.com; Path=/\r\n

set-Cookie:route-43bf1525b739b8a12eb52ada0519e7f2;Path-/\r\n

Content-Encoding: gzip r\n

[Time since request:9.522107089 seconds]

图3.7包3

分析:状态行显示的结果表明目标服务器成功接收到本地发送的请求报文,相应的的向本地发出响应报文并把文本文件发送给了本地。响应报文中有关于内容编码、内容类型、上次修改时间、创建日期、以及期限的记录,以上关于代码额分析中都有提到,不再赘述。

最后,通过HTTP协议向目标服务器请求主页文档,服务器通过HTTP协议把文档传送给浏览器,浏览器下载完所有内容后把所有内容显示到浏览器上面,从而在浏览器上打开了访问的目标主页。

4总结

经过本次课程设计的我在基于WireShark进行基本的数据的抓取,以及对数据包的简单分析,加深了对常用网络协议HTTP的理解,顺便也理解了DNS协议,对TCP和UDP的报文结构有了更多的了解。

由于自身能力和时间的限制,对更加细节的流程把握的不是很好,希望能够随着今后对课程体系更深入的学习能有进一步的改进。同时,此次课程设计也让我看到了自己的不足,自己对本专业的相关知识掌握的还很少,还有很多知识都没掌握,还让我认识到解决问题的方法、途径很多做事要开阔自己的思维,看待问题要从多个角度看。

  • 25
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值