wireshark实验_wengchaowoaini的博客-程序员宅基地

技术标签: wireshark  网络  测试工具  

目录

实验与学生基本信息

一、数据链路层

1.实作一 熟悉 Ethernet 帧结构

2.实作二 了解子网内/外通信时的 MAC 地址

3.实作三 掌握 ARP 解析过程

 二、网络层

1.实作一 熟悉 IP 包结构

 2.实作二 IP 包的分段与重组

3.实作三 考察 TTL 事件 

三、传输层

1.实作一 熟悉 TCP 和 UDP 段结构

2.实作二 分析 TCP 建立和释放连接 

四、应用层

 1.实作一 了解 DNS 解析

2.实作二 了解 HTTP 的请求和应答 


实验与学生基本信息

课程名称 重庆交通大学
实验题目 wireshark实验
指导教师 王勇
专业班级 计算机科学与技术2019级2班
学号 631907090120
姓名 翁超

一、数据链路层

1.实作一 熟悉 Ethernet 帧结构

使用 Wireshark 任意进行抓包,熟悉 Ethernet 帧的结构,如:目的 MAC、源 MAC、类型、

 ✎ 问题
你会发现 Wireshark 展现给我们的帧中没有校验字段,请了解一下原因。

答:
Wireshark会自动丢弃掉校验字段。有时校验会由网卡计算,这时Wireshark抓到的本机发送的数据包的校验和都是错误的,所以默认关闭了Wireshark自己的校验。

2.实作二 了解子网内/外通信时的 MAC 地址

1.ping 你旁边的计算机(同一子网),同时用 Wireshark 抓这些包(可使用 icmp 关键字进行过滤以利于分析),记录一下发出帧的目的 MAC 地址以及返回帧的源 MAC 地址是多少?这个 MAC 地址是谁的?

发出的帧的目的地与返回帧源的目的mac 是b8:94:36:2b:94:7e,这是同一子网的主机mac


2.然后 ping qige.io (或者本子网外的主机都可以),同时用 Wireshark 抓这些包(可 icmp 过滤),记录一下发出帧的目的 MAC 地址以及返回帧的源 MAC 地址是多少?这个 MAC 地址是谁的?

发出的帧的目的地与返回帧源的目的mac 是d4:24:93:1c:85:40这是网关的物理地址

3.再次 ping www.cqjtu.edu.cn (或者本子网外的主机都可以),同时用 Wireshark 抓这些包(可 icmp 过滤),记录一下发出帧的目的 MAC 地址以及返回帧的源 MAC 地址又是多少?这个 MAC 地址又是谁的?

发出的帧的目的地与返回帧源的目的mac 是d4:24:93:1c:85:40这是网关的物理地址

✎ 问题
通过以上的实验,你会发现:
1.访问本子网的计算机时,目的 MAC 就是该主机的
2.访问非本子网的计算机时,目的 MAC 是网关的
请问原因是什么?

答:MAC地址工作于局域网,局域网之间的互连一般通过现有的公用网或专用线路,需要进行网间协议转换。所以访问非本子网的计算机时,目的 MAC
是网关的。

3.实作三 掌握 ARP 解析过程

1.为防止干扰,先使用 arp -d * 命令清空 arp 缓存

2.ping 你旁边的计算机(同一子网),同时用 Wireshark 抓这些包(可 arp 过滤),查看 ARP 请求的格式以及请求的内容,注意观察该请求的目的 MAC 地址是什么。再查看一下该请求的回应,注意观察该回应的源 MAC 和目的 MAC 地址是什么。

3.再次使用 arp -d * 命令清空 arp 缓存

4.然后 ping qige.io (或者本子网外的主机都可以),同时用 Wireshark 抓这些包(可 arp 过滤)。查看这次 ARP 请求的是什么,注意观察该请求是谁在回应。

 ARP请求为Who has 192.168.1.1? Tell 192.168.1.97

✎ 问题
通过以上的实验,你应该会发现,
ARP 请求都是使用广播方式发送的
如果访问的是本子网的 IP,那么 ARP 解析将直接得到该 IP 对应的 MAC;如果访问的非本子网的 IP, 那么 ARP 解析将得到网关的 MAC。
请问为什么?

答:ARP代理,访问非子网IP时是通过路由器访问的,路由器再把发出去,目标IP收到请求后,再通过路由器端口IP返回去,那么ARP解析将会得到网关的MAC。

 二、网络层

1.实作一 熟悉 IP 包结构

使用 Wireshark 任意进行抓包(可用 ip 过滤),熟悉 IP 包的结构,如:版本、头部长度、总长度、TTL、协议类型等字段。

✎ 问题
为提高效率,我们应该让 IP 的头部尽可能的精简。但在如此珍贵的 IP 头部你会发现既有头部长度字段,也有总长度字段。请问为什么?

答:便于传输时的识别IP总长度,节省时间,当长度超过1500B时就会被返回链路层进行分段。

 2.实作二 IP 包的分段与重组

根据规定,一个 IP 包最大可以有 64K 字节。但由于 Ethernet 帧的限制,当 IP 包的数据超过 1500 字节时就会被发送方的数据链路层分段,然后在接收方的网络层重组。
缺省的,ping 命令只会向对方发送 32 个字节的数据。我们可以使用 ping 202.202.240.16 -l 2000 命令指定要发送的数据长度。此时使用 Wireshark 抓包(用 ip.addr == 202.202.240.16 进行过滤),了解 IP 包如何进行分段,如:分段标志、偏移量以及每个包的大小等

✎ 问题
分段与重组是一个耗费资源的操作,特别是当分段由传送路径上的节点即路由器来完成的时候,所以 IPv6 已经不允许分段了。那么 IPv6 中,如果路由器遇到了一个大数据包该怎么办?

答:转发到支持该数据传输的路由上或者丢弃该数据包。

3.实作三 考察 TTL 事件 

在 IP 包头中有一个 TTL 字段用来限定该包可以在 Internet上传输多少跳(hops),一般该值设置为 64、128等。
在验证性实验部分我们使用了 tracert 命令进行路由追踪。其原理是主动设置 IP 包的 TTL 值,从 1 开始逐渐增加,直至到达最终目的主机。
请使用 tracert www.baidu.com 命令进行追踪,此时使用 Wireshark 抓包(用 icmp 过滤),分析每个发送包的 TTL 是如何进行改变的,从而理解路由追踪原理。

 

 Tracert 先发送 TTL 为 1 的回应数据包,并随后的每次发送过程将 TTL 递增 1,直到目标响应或 TTL 达到最大值,从而确定路由

✎ 问题
在 IPv4 中,TTL 虽然定义为生命期即 Time To Live,但现实中我们都以跳数/节点数进行设置。如果你收到一个包,其 TTL 的值为 50,那么可以推断这个包从源点到你之间有多少跳?

答:至少50跳

三、传输层

1.实作一 熟悉 TCP 和 UDP 段结构

1.用 Wireshark 任意抓包(可用 tcp 过滤),熟悉 TCP 段的结构,如:源端口、目的端口、序列号、确认号、各种标志位等字段。

2.用 Wireshark 任意抓包(可用 udp 过滤),熟悉 UDP 段的结构,如:源端口、目的端口、长度等。 

✎ 问题
由上大家可以看到 UDP 的头部比 TCP 简单得多,但两者都有源和目的端口号。请问源和目的端口号用来干什么?

答:源端口就是指本地端口,目的端口就是远程端口。源端口就是本机程序用来发送数据的端口,目的端口就是对方主机用哪个端口接收

2.实作二 分析 TCP 建立和释放连接 

1.打开浏览器访问 qige.io 网站,用 Wireshark 抓包(可用 tcp 过滤后再使用加上 Follow TCP Stream),不要立即停止 Wireshark 捕获,待页面显示完毕后再多等一段时间使得能够捕获释放连接的包。
2.请在你捕获的包中找到三次握手建立连接的包,并说明为何它们是用于建立连接的,有什么特征。

"第一次握手”客户端发送的TCP报文中以[SYN]作为标志位,并且客户端序号Seq=0;
”第二次握手”服务器返回的TCP报文中以[SYN,ACK]作为标志位;并且服务器端序号Seq=0;确认号Ack=1(“第一次握手”中客户端序号Seq的值+1);
”第三次握手”客户端再向服务器端发送的TCP报文中以[ACK]作为标志位;其中客户端序号Seq=1(“第二次握手”中服务器端确认号Ack的值);确认号Ack=1(“第二次握手”中服务器端序号Seq的值+1)。
3.请在你捕获的包中找到四次挥手释放连接的包,并说明为何它们是用于释放连接的,有什么特征。

 ”第一次挥手”客户端发送的FIN请求释放连接报文以[FIN,ACK]作为标志位,其中报文序号Seq=1;确认号Ack=1;
”第二次挥手”服务器端继续返回的FIN同意释放连接报文以[FIN,ACK]作为标志位;其中报文序号Seq=1;确认号Ack=1;
”第三次挥手”客户端发出的ACK确认接收报文以[ACK]作为标志位;其中报文序号Seq=1;确认号Ack=1;
最后一次“挥手”传输报文中的序号Seq值等于前一次"握手"传输报文中的确认号Ack值;
 

✎ 问题一
去掉 Follow TCP Stream,即不跟踪一个 TCP 流,你可能会看到访问 qige.io 时我们建立的连接有多个。请思考为什么会有多个连接?作用是什么?

答:通过建立多个连接,可以实现实现多个用户进行访问,可以达到节省通道使用的作用,提高利用率,因为是属于短连接,一旦数据发送完成后,就会断开连接。但是即使断开连接,缓存依旧存在。

✎ 问题二
我们上面提到了释放连接需要四次挥手,有时你可能会抓到只有三次挥手。原因是什么?

答:是因为第二次握手和第三次挥手合并了,FIN报文用在本端没有数据发送给对方时,关闭从本端到对端的连接。但是并不影响从对方到本端的连接,也就是说本端仍然可以接收对方的数据。即发送通道关闭,接收通道正常。
如果对方收到本端FIN报文时,对方的接收通道就会关闭。此时,如果对方也没有数据发给本端,那么对方也会发送FIN给本端,用于关闭从对方到本端的连接,这时候就可能出现ACK和FIN合在一起的情况。
当然,如果对方仍然有数据发送,那么就等数据发完,再发FIN来关闭连接,这时候就是四次挥手了。

四、应用层

 1.实作一 了解 DNS 解析

1.先使用 ipconfig /flushdns 命令清除缓存,再使用 nslookup qige.io 命令进行解析,同时用 Wireshark 任意抓包(可用 dns 过滤)。

2.你应该可以看到当前计算机使用 UDP,向默认的 DNS 服务器的 53 号端口发出了查询请求,而 DNS 服务器的 53 号端口返回了结果。 

3. 可了解一下 DNS 查询和应答的相关字段的含义

✎ 问题
你可能会发现对同一个站点,我们发出的 DNS 解析请求不止一个,思考一下是什么原因?

答:将负载均衡的工作交给DNS,省去了网站管理维护负载均衡服务器的麻烦。
对于部署在服务器上的应用来说不需要进行任何的代码修改即可实现不同机器上的应用访问。

2.实作二 了解 HTTP 的请求和应答 

1.打开浏览器访问 qige.io 网站,用 Wireshark 抓包(可用http 过滤再加上 Follow TCP Stream),不要立即停止 Wireshark 捕获,待页面显示完毕后再多等一段时间以将释放连接的包捕获。
2.请在你捕获的包中找到 HTTP 请求包,查看请求使用的什么命令,如:GET, POST。并仔细了解请求的头部有哪些字段及其意义。
POST命令

部分请求头字段的具体含义

Accept:浏览器可接受的MIME类型。 Accept-Charset:浏览器可接受的字符集。
Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip。
Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。
Authorization:授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中。
Connection:表示是否需要持久连接。如果Servlet看到这里的值为“Keep-Alive”,或者看到请求使用的是HTTP1.1(HTTP
1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。 Content-Length:表示请求消息正文的长度。 Cookie:设置cookie,这是最重要的请求头信息之一
From:请求发送者的email地址,由一些特殊的Web客户程序使用,浏览器不会用到它。 Host:初始URL中的主机和端口。
If-Modified-Since:只有当所请求的内容在指定的日期之后又经过修改才返回它,否则返回304“Not Modified”应答。
Pragma:指定“no-cache”值表示服务器必须返回一个刷新后的文档,即使它是代理服务器而且已经有了页面的本地拷贝。
Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。
User-Agent:浏览器类型,如果Servlet返回的内容与浏览器类型有关则该值非常有用。
UA-Pixels,UA-Color,UA-OS,UA-CPU:由某些版本的IE浏览器所发送的非标准的请求头,表示屏幕大小、颜色深度、操作系统和CPU
3.请在你捕获的包中找到 HTTP 应答包,查看应答的代码是什么,如:200, 304, 404 等。并仔细了解应答的头部有哪些字段及其意义。

 响应码分五种类型,由它们的第一位数字表示:
1xx:信息,请求收到,继续处理
2xx:成功,行为被成功地接受、理解和采纳
3xx:重定向,为了完成请求,必须进一步执行的动作 4xx:客户端错误,请求包含语法错误或者请求无法实现
5xx:服务器错误,服务器不能实现一种明显无效的请求

✎ 问题 刷新一次 qige.io 网站的页面同时进行抓包,你会发现不少的 304 代码的应答,这是所请求的对象没有更改的意思,让浏览器使用本地缓存的内容即可。那么服务器为什么会回答 304 应答而不是常见的 200 应答?

答:因为浏览器要判断文件有无修改,和cache结果是否一致。
服务器收到请求后,优先根据Etag的值判断被请求的文件有没有做修改,Etag值一致则没有修改,命中协商缓存,返回304;如果不一致则有改动,直接返回新的资源文件带上新的Etag值并返回200;
如果服务器收到的请求没有Etag值,则将If-Modified-Since和被请求文件的最后修改时间做比对,一致则命中协商缓存,返回304;不一致则返回新的last-modified和文件并返回200;
 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wengchaowoaini/article/details/122344597

智能推荐

xgboost相比传统gbdt有何不同?xgboost为什么快?xgboost如何支持并行?_人工智能曾小健的博客-程序员宅基地_xgboost为什么快

传统GBDT以CART作为基分类器,xgboost还支持线性分类器,这个时候xgboost相当于带L1和L2正则化项的逻辑斯蒂回归(分类问题)或者线性回归(回归问题)。 传统GBDT在优化时只用到一阶导数信息,xgboost则对代价函数进行了二阶泰勒展开,同时用到了一阶和二阶导数。顺便提一下,xgboost工具支持自定义代价函数,只要函数可一阶和二阶求导。 xgboost在代价函数里加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数、每个叶子节点上输出的score的L2模的平方和。从..

百度AI——人脸识别案例_程序员小莫的博客-程序员宅基地

人脸分析import requests, base64def get_access_token(): url = 'https://aip.baidubce.com/oauth/2.0/token' data = { 'grant_type': 'client_credentials', # 固定值 'client_id': '', ...

Buildroot ipa image_weixin_30609287的博客-程序员宅基地

Buildroot ipa image 参考:https://github.com/csmart/ironic-python-agent/tree/buildroot/imagebuild/buildroot#buildroot-ironic-python-ag...

log4j详解与实战,java面试突击百度网盘_普通网友的博客-程序员宅基地

Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。日志信息的优先级从高到低有ERROR、WARN、INFO、DEBUG,分别用来指定这条日志信息的重要程度;日志信息的输出目的地指定了日志将打印到控制台还是文件中;而输出格式则控制了日志信息的显示内容。一、定义配置文件其实您也可以完全不使用配置文件,而是在代码中配置Log4j环境。但是,使用配置文件将使您的应用程序更加灵活。Log4j支持两种配置文件格式,一种是XML格式的文件,一种是Java特性文件(键=值)。下

ubuntu15.04安装VMwear10.0.4_纪咸的博客-程序员宅基地

1.下载vmware10.0.4,32位的文件     http://www.oyksoft.com/soft/15307.html     里面有32位和64位的,400MB左右文件名为VMware-Workstation-Full-10.0.4-2249910.i386.bundle2.下载完成后进入终端为VMware-Workstation-Full-10.0.4-2249910

android 自定义banner,Android自定义TextBanner实现自动滚动的方法_再见哈斯卡的博客-程序员宅基地

Android自定义TextBanner实现自动滚动的方法发布时间:2020-07-27 09:35:48来源:亿速云阅读:110作者:小猪这篇文章主要讲解了Android自定义TextBanner实现自动滚动的方法,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。1、TextBannerpackage com.example.myapplication.customvi...

随便推点

md5加密、Des加密对称可逆加密、RSA非对称可逆加密、https单边验证、银行U盾双边认证..._weixin_30381317的博客-程序员宅基地

1.md5不可逆的加密方式,加密成一个32位的字符串。算法是公开的,任何语言的加密结果都是一样的。总有可能是重复的。 用途: (1)防止明文存储:可以用作密码加密 (2)防止篡改:判断文件变化,将程序生成一个字节流,然后md5加密一下,判断加密结果是否有变化,可以防止程序挂载木马或者做类似SVN的东西。 (3)...

纷享销客事件变更订阅接口到底怎么用?_纸枫林的博客-程序员宅基地

纷享事件变更订阅是一种数据事件主调的服务能力,用户可以通过在纷享侧订阅事件的方式,来监听数据的变化,从而能够以一种很轻量级的方式就能达到几乎近实时的数据同步的效果。在纷享销客开放平台推出这个接口(2020年初,当时这个接口叫事件回调接口)之前,要想实现纷享销客和其它系统集成,需要通过工作流执行纷享销客的自定义函数,利用Fx.http接口把数据POST到第三方服务器,进行业务逻辑处理。现在依然有很多集成是通过这种方式进行的,简单快捷,唯一存在的问题是可能存在安全隐患,有基础编程能力的人,看到函数源码,都会

chromiumwebbrowser 使用_ChromiumWebBrowser_weixin_39710003的博客-程序员宅基地

cwber比较简单,以下是它的代码:usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Drawing;usingSystem.Data;usingSystem.Text;usingSystem.Windows.Forms;usinglibfuncs;namespace...

Flutter Redux 状态管理_张漂亮2号的博客-程序员宅基地

Xmpp中经常遇到消息刷新,红点刷新,等问题.消息到处发送,代码也不利于维护,发现有个redux,方便好用,记录下1 项目中增加 redux_epics: 0.12.02 创建Stateimport 'package:meta/meta.dart';/** * State中所有属性都应该是只读的 */@immutableclass CountState{ int _cou...

ad域服务器站点,如何变更站点 AD 域服务器IP地址_weixin_39675513的博客-程序员宅基地

在 winserver 2012 单森林单域,多站点环境中,想把某一个站点AD 域服务器IP地址更改,要如何操作,才能保证客户端正常运行,不影响客户端的运行。有些朋友也经常提出类似问题。想在不影响客户端正常运行的情况下修改域中域控制器的IP地址。根据我的经验,如果环境域中还有其他域控制器,直接在目标域控制器网卡的IPv4(TCP/IP)属性中修改IP地址即可。在我的实验环境中,修改一台域控制器的...

DTD文档的结构_zhang_ly520的博客-程序员宅基地

本章大概内容:1、为什么需要DTD2、XML文档如何使用DTD    1)内部定义DTD    2)关联外部DTD3、DTD的结构    1)元素类型声明    2)属性列表声明    3)实体声明    4)记号声明    对于一个格式良好的XML文档,我们只能保证这个文档的格式符合XML规范,但是元素与元素的关系,元素与属性的关系,属性的取值,我们就无法保证了。对于一个格式良好的文档,如果...

推荐文章

热门文章

相关标签