当前位置: 首页 > web >正文

Wireshark基本使用

本文会对Wireshark做简单介绍,带大家熟悉一下Wireshark的界面,以及如何使用过滤器。

接着会带大家查看TCP五层模型下,带大家回顾各层首部的格式。

最后会演示 Wireshark 如何抓取三次握手和四次挥手包的过程。

目录

一.Wireshark简介

二. 界面介绍

三. 过滤器

1. 捕获过滤器

2. 显示过滤器

四. 保存流量包

五. 协议数据包详解

1. 物理层

2. 数据链路层

3. 网络层

 4. 传输层

三次握手

四次挥手


一.Wireshark简介

大家可能之前用过 BurpSuite,Wireshark和它相比有哪些区别呢?

Burpsuite 只是抓的应用层数据包,而 Wireshark 七层网络模型都能抓。

不过Wireshark不是入侵检测系统,对于网络上的异常流量,Wireshark不会警示或提示。

且无法对流量包进行更改,只能查看流量包。

下载地址:Wireshark · Download


二. 界面介绍

共分为五大块:菜单栏,工具栏,显示过滤器,捕获过滤器和网卡模块。

显示过滤器是对抓到的包进行过滤;

捕获过滤器是提前设置好想抓的对象。

抓包界面也分三大块:

从上到下分别是数据包列表,数据包的详细信息和详细信息十六进制表示。

在编辑-首选项-外观,也可以按自己习惯修改布局。


三. 过滤器

功能列表不可能一一介绍完,这里介绍最重要的过滤器。

1. 捕获过滤器

前面说过,捕获过滤器是提前设置好捕获的对象

点击捕获-选项:

这里的混杂模式 是指不仅抓本机MAC地址的包,所有经过网卡的包都会捕获。

捕获过滤器就在下方的框内输入即可

比如想捕获端口为443的包:输入 port 443

还有很多选项,比如

地址:host、src、dst      协议:ip、tcp、http、ftp

如查找目的地址为本机且协议是tcp的包:dst 127.0.0.1 && tcp

这里再举些例子: 

src host 192.168.2.11 && dst port 80 #抓取源地址为192.168.2.11,并且目的端口为80
的流量
host 192.168.2.11 || host 192.168.2.22 #抓取192.168.2.11或者192.168.2.22的流量
数据
!broadcast #不抓取广播包
src ether host 98:1a:35:98:09:6f #抓取源mac地址为98:1a:35:98:09:6f的数据包

2. 显示过滤器

显示过滤器是对抓完的包再进行过滤

这里也列出一些例子:

http、tcp #按照协议搜索
ip.src_host=192.168.2.16 #src_host按照源ip地址进行搜索
ip.src_host=192.168.2.16 or ip.dst_host=192.168.2.1 # dst_host是目标主机ip地址
tcp.flags.ack == 0 and tcp.flags.syn == 1 # 这是过滤出,tcp请求中ack标记为0,syn标记为1的包
ip.addr=192.168.2.33 # 是要ip地址为192.168.2.33的全部展示出来,不管是目标地址还是源地址。
tcp.srcport == 443 # 源端口为443的数据包
not arp # 不获取arp数据
tcp.port == 443 # 过滤端口443的数据包

这里还有一种过滤器选择方法:

我们选择一项右击,选择作为过滤器应用,也可以进行显示过滤。


四. 保存流量包

比如我们想导出特定几个流量包,怎么导出呢?

选中我们要标记的包右键标记或者 Ctrl + M

再点击 文件 - 导出特定分组,选择最下面的 Marked packets only


五. 协议数据包详解

OSI 七层模型和 TCP/IP 五层模型相信大家并不陌生:

Wireshark 呈现出的方式是五层模型方式:

我们依次来看一下:

1. 物理层

2. 数据链路层

数据链路层抓的是以太网MAC帧,格式如下:

细心的同学会发现,为什么Wireshark这个没有FCS字段

因为 Wireshark 抓取的MAC帧直接丢掉了帧尾,默认丢弃了这个校验字段。

3. 网络层

IP层咱先回顾一下IP首部字段:

再来对比看一下:

 4. 传输层

传输层协议主要是TCP和UDP,我们这里先看TCP:

对应看下包:这里的1000就是数据偏移,保留位是 ....

数据偏移其实就是表示这个TCP的首部长度,以4B为单位,所以为32B

标志位字段展开就是六个标志

各个标志位的含义如下:

--------------------------------------------------------------------------------------------------------------------------------

下面演示三次握手和四次挥手的抓包过程:

三次握手

首先看下三次握手的过程图:

具体的三次握手细节可以看 湖科大计网

实验过程如下:

我们随便访问一个网站,通过 源地址、目标地址和info 能找到三次握手的包

也可以设置显示过滤器为 tcp.flags.syn == 1 进行查找

然后存储下来,我们来进行分析:

第一个包,开始时服务器端处于监听状态,客户端发送TCP连接请求报文段

并设置 seq=x,SYN=1,进入 SYN-SENT 状态

---------------------------------------------------------------------------------------------------------------------------------

第二个包,服务器端接收到后,向客户端发送确认消息

设置 SYN=1,ACK=1,seq=y,ack=x+1,并进入 SYN-RCVD 状态

---------------------------------------------------------------------------------------------------------------------------------

第三个包,客户端收到后,向服务器端发送TCP确认报文段表示收到

设置 ACK=1,seq=x+1,ack=y+1,进入 ESTABLISHED 状态

最后,服务器收到确认请求,就知道可以进行通信了,也进入 ESTABLISHED 状态。

四次挥手

四次挥手的过程图:

实验过程如下:

我们搜索 tcp.flags.fin == 1

搜到两条先标记,然后搜 tcp.flags,就能找到四次挥手的四个包了,标记保存。

第一个包,客户端向服务器发送FIN请求,并确认收到之前的数据

设置 FIN=1,ACK=1,seq=u,ack=v,并进入终止等待1状态

---------------------------------------------------------------------------------------------------------------------------------

第二个包, 服务器收到客户端的包,返回确认包

设置 ACK=1,seq=v,ack=u+1,服务器端进入关闭等待状态,客户端进入终止等待2状态

---------------------------------------------------------------------------------------------------------------------------------

第三个包,主要是为了防止第二包发完后,服务器端还有数据要发送给客户端

发送完后,服务器端也告知客户端自己要请求断开连接,并确认收到了之前的数据包

设置 FIN=1,ACK=1,seq=w,ack=u+1,服务器端进入最后确认状态

---------------------------------------------------------------------------------------------------------------------------------

第四个包,客户端确认收到服务器端的释放请求

设置 ACK=1,seq=u+1,ack=w+1,客户端进入时间等待状态,因为怕服务器端没收到这个确认包。客户端等待2MSL看服务器端是否会超时重传,没反应就进入关闭状态。

感谢你能看到这 o(* ̄▽ ̄*)ブ

http://www.xdnf.cn/news/4723.html

相关文章:

  • $SYNT 迈入新时代:治理门户更新 + 通胀提案发布
  • [机器学习介绍与定义]机器学习-part1
  • 删除链表倒数第N个节点
  • 什么是变量提升?(形象的比喻)
  • 【AI入门】CherryStudio入门4:创建知识库,对接思源笔记
  • Spring Boot 实现验证码生成与校验:从零开始构建安全登录系统
  • Linux Shell编程之条件语句
  • Jquery ajax 提交序列化或JSON数据到后台
  • 前端缓存踩坑指南:如何优雅地解决浏览器缓存问题?
  • CKESC STONE 80A-MC 电调的全场景可靠性技术测评
  • 从零打造个人博客静态页面与TodoList应用:前端开发实战指南
  • Maven
  • AI CUBE 使用指南 目标检测格式范例 AI cube 报错数据集不合规范,请清洗数据集
  • 在Hugging Face网站像Github一样克隆repository到本地的具体步骤
  • 【数据结构】——链表OJ(下)
  • 丝路传说手游:职业选择与高难度BOSS突破指南
  • 视频编解码学习8之视频历史
  • hprof文件,java虚拟机堆转储文件,Dump文件
  • 使用adb设置wifi相关
  • AI Agent开发之门:微软官方课程全面解析
  • R1-Searcher:用强化学习解锁大语言模型检索新能力!
  • 计算机体系架构-----设计模式:状态模式(从程序员加班问题切入)
  • SpringBoot中使用MCP和通义千问来处理和分析数据-连接本地数据库并生成实体类
  • 只出现一次的数字(暴力、哈希查重、异或运算)
  • Python基于Django和MySQL实现突发公共卫生事件舆情分析系统(有大屏功能)
  • 【AI论文】FlexiAct:在异构场景中实现灵活的动作控制
  • 线程池的核心参数和线程创建方式,线程和进程
  • rust程序静态编译的两种方法总结
  • 手势、鼠标滑动实现界面切换
  • 介绍Unity中的Dictionary