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