Wireshark抓包系列教程之二:HTTP协议分析

news/2024/6/15 15:01:36 标签: 网络, 编程, wireshark, http协议

本教程参考: A Top-Down Approach, 6th ed 一书中 Wireshark_HTTP_v6.1 进行协议分析实验,点击从 官网 免费下载。

实验一:基本的 HTTP GET/Response 操作

(1)实验步骤:

①打开浏览器;

②开启 Wireshark,但不开始数据包捕获。在 Wireshark 主窗口顶部的 Filter中输入“ http”,因此只有捕获的 HTTP 消息稍后会显示在数据包列表窗口中;

③等待大约一分钟,然后开始 Wireshark 数据报捕获;

④在浏览器中输入如下地址: http://gaia.cs.umass.edu/wireshark-labs/HTTP-wireshark-file1.html 浏览器将会显示一个很简单的且只有一行的 HTML 文件;

⑤停止 Wireshark 的数据报捕获。

得到如下66,70两条数据报:

(2)回答问题:

Q1.你的浏览器运行的 HTTP 是 1.0 版本还是 1.1 版本?服务器运行 HTTP 是哪个版本?A1.我的浏览器运行的是1.1版本,服务器运行的也是1.1版本。

Q2.你的浏览器能接受服务器的哪些语言?A2.我的浏览器能接受zh-cn和zh等语言。

Q3.你的电脑的 IP 地址是多少? gaia.cs.umass.edu服务器的 IP 地址是多少?A3.我的IP地址是172.31.192.70,服务器的IP地址是128.119.245.12

Q4.从服务器返回到你的浏览器的状态码是什么?A4.状态码是200.

Q5.什么时候在服务器端得到最后修正的 HTML 文件?A5.2016.7.13 05:59:01

Q6.多少字节的内容已经返回到你的浏览器?A6.Content-Length:128字节。

Q7.除以上已回答过的字段外,头部还有哪些字段?在数据包内容窗口中检查原始数据,是否有未在数据包列表中显示的头部?

A7.HTTP请求报文中还有Host字段、connection字段、Accept字段、User-agent字段、Accept-Encoding字段等。

HTTP响应报文中还有server字段、connection字段等。

实验二:HTTP GET/Response 有条件的相互作用

(1)实验步骤:

在开始前先确信你的浏览器缓存是空的,对于 IE 浏览器选择工具-Internet 选项-删除文件,钩选“删除全部文件”从你的浏览器中移除缓存的文件,然后点击确定按钮。现在按以下步骤做:

①打开 Wireshark,开始数据包捕获。

②在你的浏览器中输入如下的 URL 地址: http://gaia.cs.umass.edu/wireshark-labs/HTTP-wireshark-file2.html

浏览器将会显示一个很简单的 5 行的 HTML 文件;

③快速地在你的浏览器中再次输入相同的 URL(或者点一下刷新);

④停止 Wireshark 数据包捕获,在在 Wireshark 主窗口顶部的 Filter 中输入“ http”,因此只有捕获的 HTTP 消息稍后将会显示在数据包列表窗口中。

得到如下数据报:

红框中的数据正是我们要获取的,即两次HTTP的请求和响应。

(2)回答问题:

Q8.从你的浏览器到服务器得到的请求中检查第一个 HTTP GET 的内容。在 HTTP GET中你有没有看到一行“ IF-MODIFIED-SINCE” ?为什么?A8.没有这行,因为这是浏览器首次获取该页面。

Q9.检查服务器回应内容,服务器明确地返回了文件的内容吗?你怎样断定?A9.明确返回了。从line-based text data中的数据可以看出。

Q10.现在从你的浏览器到服务器得到的请求中检查第二个 HTTP GET 的内容。 在 HTTP GET 中你有没有看到一行“ IF-MODIFIED-SINCE” ?如果有,在“ IF-MODIFIED-SINCE”头部有什么信息?A10.有这行字段。信息为上次访问该网址的时间。

Q11.第二次 HTTP 返回的状态码是多少?从服务器返回的响应第二个 HTTP GET 的短语是什么?服务器明确地返回了文件的内容吗?为什么?A11.状态码是304,短语是Not Modified,并没有明确返回文件内容,因为该网页内容在上次访问之后未被修改过,且本浏览器中有上次访问的缓存。

实验三:得到较长的文档

(1)实验步骤:

在前面实验得到的文档是简单和短小的 HTML 文件, 让我们来看看下载一个长的 HTML文件时会出现什么。按以下要求做:

①打开你的浏览器,确信你的浏览器缓存是空的,就如上面讨论的;

②打开 Wireshark,开始数据包捕获;

③在你的浏览器中输入如下的 URL 地址: http://gaia.cs.umass.edu/wireshark-labs/HTTP-wireshark-file3.html 你的浏览器将会显示相当长的美国权利法案;

④停止 Wireshark 数据包捕获,在 Filter 栏输入“ http”,因此只有捕获的 HTTP 消息稍后将会显示在数据包列表窗口中。

(2)回答问题:

Q12.你的浏览器发送了多少个HTTP GET请求消息?A12.1个。

Q13.传输这一个HTTP响应需要多少个TCP数据段?

A13.4个TCP数据段。

Q14.响应HTTP GET请求的相关的状态码和短语是什么?A14.200 OK.

Q15.在TCP“Continuation”附加关联的传输数据中有没有HTTP状态码和短语?A15.有。

实验四:带有内嵌对象的HTML文档

(1)实验步骤:

①打开浏览器,确信你的浏览器缓存是空的,就如上面讨论的;

②打开 Wireshark Network Analyzer,开始数据包捕获;

③在你的浏览器中输入如下的 URL 地址:  http://gaia.cs.umass.edu/wireshark-labs/HTTP-wireshark-file4.html 

④停止 Wireshark 数据包捕获,在 Filter 窗口中输入“ http”,因此只有捕获的 HTTP 消

息稍后将会显示在数据包列表窗口中。

(2)回答问题:

Q16. 你的浏览器发送了多少个HTTP GET请求消息?这些GET请求发送到哪些IP地址?A16. 110.227.172.54;128.119.245.12;184.30.179.55;128.119.240.90;128.119.240.90;221.235.252.171;共6个GET请求。(你做的可能和我的有区别,我访问的时候,上面的图片没有加载出来)

Q17.你的浏览器是否同时下载这两张图片(并发的从两个网站上下载图片)?你是如何判断的?

A17.不是并发下载的,是先后请求先后到达的。

实验五:HTTP认证

(1)实验步骤:

①确信你的浏览器缓存是空的,就如上面讨论的。关闭你的浏览器,然后再打开;

②打开 Wireshark Network Analyzer,开始数据包捕获;

③在你的浏览器中输入如下的 URL 地址: http://gaia.cs.umass.edu/wireshark-labs/protected_pages/HTTP-wireshark-file5.html 在出现的对话框中输入用户名和密码,用户名是“wireshark-students”,密码是“network”;

④停止Wireshark 数据包捕获,在Filter窗口中输入“ http”,因此只有捕获的HTTP消息稍后将会显示在数据包列表窗口中。

(2)回答问题:

Q18.服务器对起初的HTTP GET消息的响应(状态码和短语)是什么?与前一部分实验相比,在这个响应消息中出现了什么新的字段?A18. 401 Authorization Required,出现了www-Authenticate字段。

Q19.当你的浏览器第二次发送HTTP GET消息时,有什么新的字段被包含在HTTP GET消息中?对应的服务器响应有没有新的字段出现?A19. GET消息中出现了新的Authorization字段。服务器响应出现了ETag字段。

Q20.当你的浏览器第三次发送HTTP GET消息时, 有什么新的字段被包含在HTTP GET消息中?当你输入正确的用户名和密码后,服务器给出的响应是什么?A20. HTTP request字段。给出如下页面响应。


http://www.niftyadmin.cn/n/1685490.html

相关文章

c++ 实现链队列数据结构

建立头文件LinkQueue.h #ifndef LinkQueue_h #define LinkQueue_htemplate <class DataType> //使用结构体定义结点 struct Node{DataType data;Node<DataType> *next; //指向下一个结点的指针 };template <class DataType> class LinkQueue{ public:LinkQu…

VC网络编程实战视频教程

图书&#xff1a;《Visual C 网络编程案例实战》 相关视频教程&#xff0c;见下面网址&#xff0c;非常详细&#xff0c;值得学习。 VisualC网络编程案例实战01&#xff1a;Visual C网络编程 http://v.ku6.com/show/HeYGLUly4n2feYVxDGTreg...html?st1_9_2_0&nr1 Visual…

c++ 实现邻接表有向图结构

建立头文件 #ifndef ALGraph_h #define ALGraph_hconst int MaxSize 20;struct ArcNode{ //邻接结点int adjvex;ArcNode *next;};template <class DataType> struct VertexNode{ //头结点DataType vertex;ArcNode *firstedge; };template <class DataType> cla…

java中new和反射的区别

区别如下&#xff1a; 1&#xff1a;首先new出来的对象我们无法访问其中的私有属性&#xff0c;但是通过反射出来的对象我们可以通过setAccessible()方法来访问其中的私有属性。 2&#xff1a;在使用new创建一个对象实例的时候必须知道类名&#xff0c;但是通过反射创建对象有时…

Winsock的初始化

首先是调用 WSAStartup() 来加载合适的 Winsock Dll版本 其中两个参数 WORD wVersionRequested 加载库的版本 LPWSADATA lpWSAData 关于版本信息的结构体 typedef struct WSAData {WORD(_16) wVersion; //winsocket的版本号//Windows XP 的版本是2.2WORD …

IDEA 类图功能使用方法

CtrlShiftAltU显示类图&#xff0c;&#xff08;可以选中代码中类&#xff0c;再按快捷键&#xff0c;直接进入此类的类图&#xff09; 在类图中&#xff0c;选中某类右击显示Show Implementations&#xff0c;弹出子类的选择框。 按Shift可以多选&#xff0c;需要鼠标从窗…

VC6.0中清除程序中所有的断点?

在程序开发的过程中&#xff0c;通常需要设置许多断点来调试程序&#xff0c;而当这些断点失去作用时&#xff0c;如何去掉它们呢&#xff1f;按F9一个一个的清除显然浪费时间&#xff0c;要否有更简单的方法呢&#xff1f; 更简单的方法就是使用组合键CtrlB来打开Breakpoints对…

c++ 实现链表数据结构

建立头文件 #pragma once #ifndef LinkList_H #define LinkList_Htemplate <class DataType > struct Node {DataType data;Node<DataType> *next; };template <class DataType> class LinkList { public:LinkList();LinkList(DataType a[], int n);~LinkLis…