《熬夜整理》保姆级系列教程-玩转Wireshark抓包神器教程(1)-初识Wireshark

news2024/11/19 19:19:19

1.简介

  前边已经介绍过两款抓包工具,应该是够用了,也能够处理在日常工作中遇到的问题了,但是还是有人留言让宏哥要讲解讲解Wireshark这一款抓包工具,说实话宏哥之前也没有用过这款工具,只能边研究边分享。换句话说就是现学现卖,希望大家不要介意,宏哥这里的分享仅供你参考学习,有错误的地方也欢迎你指出。你自己也可以深入的研究一下。

2.软件介绍

Wireshark(前称Ethereal)是一款免费开源的网络嗅探抓包工具,世界上最流行的网络协议分析器!网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark网络抓包工具使用WinPCAP作为接口,直接与网卡进行数据报文交换,可以实时检测网络通讯数据,检测其抓取的网络通讯数据快照文件,通过图形界面浏览这些数据,可以查看网络通讯数据包中每一层的详细内容。它的强大特性:例如包含有强显示过滤器语言和查看TCP会话重构流的能力,支持几百种协议和流媒体类型。

网络封包分析软件的功能可想像成 "电工技师使用电表来量测电流、电压、电阻" 的工作 - 只是将场景移植到网络上,并将电线替换成网络线。在过去,网络封包分析软件是非常昂贵的,或是专门属于营利用的软件。Ethereal的出现改变了这一切。在GNUGPL通用许可证的保障范围底下,使用者可以以免费的代价取得软件与其源代码,并拥有针对其源代码修改及客制化的权利。Ethereal是目前全世界最广泛的网络封包分析软件之一。

Wireshark 在网络排障中使用非常频繁,显示了网络模型中的第 2 层到第 5 层(链路层、网络层、传输层、应用层),不管是网络工程师、网络安全工程师、黑客、软件开发工程师,平时都会用到Wireshark。

3.WireShark简史

1997年,Gerald Combs 需要一个工具追踪网络问题,并且想学习网络知识。所以他开始开发Ethereal (Wireshark项目以前的名称) 以解决自己的需求。

1998年,Ethreal0.2.0版诞生了。此后不久,越来越多的人发现了它的潜力,并为其提供了底层分析。

Wireshark 是一款免费开源的数据包嗅探器/分析器,可用于捕获网络上的数据包。Wireshark 最初的版本叫做 Ethereal,由 Gerald Combs 于1998年发布,Wireshark 软件和官网上都可以看到他的名字排在首位:

 

2006年5月,Gerald Combs前往CACE Technologies工作,但是他没能拿到 Ethereal 的商标权。为了保证项目成功运行下去,Combs 和他的开发团队在 2006 年年中将这个项目重新命名为 Wireshark。

随着 Combs 和其他贡献者在接下来十几年内持续维护 Wireshark 的代码并发布新版本,Wireshark 已经成为世界上最流行的数据包分析/嗅探软件之一。

上述的 Wireshark 历史在网络上很容易查到,但是这些资料并未提及 Combs 为何要将该软件取名为 Wireshark(如果有读者能找到请在评论区指出)。

不过官网上有这样一个问题可以参考:

这个回答中的 carcharodon 无疑让人想起了最有名的鲨鱼——大白鲨 (Carcharodon carcharias)。大家都知道鲨鱼具有极其灵敏的嗅觉,能在几公里外嗅到受伤的猎物,用 shark来命名数据包嗅探器真是再合适不过了。

连 Wireshark 图标都是鲨鱼鳍的形状,如下图所示:

2008年,在经过了十年的发展后,Wireshark发布了1.0版本。

4.WireShark可以做什么

简而言之,WireShark主要作用就是可以抓取各种端口的报文,包括有线网口、无线网口、USB口、LoopBack口等等,从而就可以很方便地进行协议学习、网络分析、系统排错等后续任务。

支持实时捕获数据并保存为pcap文件

支持从已经捕获的数据包中读取数据;

支持超过1000种标准/专用协议解析

支持创建插件解析私有协议;

支持使用捕获和显示过滤器细化数据;

支持TLS协议解密(设置比较复杂,不如使用charles/burp/fidder方便)

上边说了一堆,换句话主要就是三点:

①分析网络底层协议,

②解决网络故障问题,

③找寻网络安全问题。

5.Wireshark不能做的

为了安全考虑,wireshark只能查看封包,而不能修改封包的内容,或者发送封包。

不支持编辑修改数据包(需要编辑数据包建议使用 WireEdit)

不支持入侵/检测异常流量 

6.Wireshark VS Fiddler

Fiddler是在windows上运行的程序,专门用来捕获HTTP,HTTPS的。

wireshark能获取HTTP,也能获取HTTPS,但是不能解密HTTPS,所以wireshark看不懂HTTPS中的内容。

7.同类的其他工具

1.微软的network monitor

2.Sniffer 

3.Omnipeek

4.Fiddler

5.Httpwatch

6.科来网络分析系统

8.什么人会用到wireshark

1. 网络管理员会使用wireshark来检查网络问题

2. 软件测试工程师使用wireshark抓包,来分析自己测试的软件

3. 从事socket编程的工程师会用wireshark来调试

4. IT运维工程师

5.网络工程师

6.安全工程师

7.听说,华为,中兴的大部分工程师都会用到wireshark。

总之跟网络相关的东西,都可能会用到wireshark。

9.平台支持

Wireshark可以在以下平台运行:

①Windows

②MacOS

③Linux/Unix

10.相关网址

1.官网:https://www.wireshark.org/

2.书籍:Chappell University | Wireshark Training

3.维基文档:Home - Wireshark Wiki

11.Wireshark抓包原理

Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。Wireshark使用的环境大致分为两种,一种是电脑直连网络的单机环境,另外一种就是应用比较多的网络环境,即连接交换机的情况。

「单机情况」下,Wireshark直接抓取本机网卡的网络流量;

「交换机情况」下,Wireshark通过端口镜像、ARP欺骗等方式获取局域网中的网络流量。

端口镜像:利用交换机的接口,将局域网的网络流量转发到指定电脑的网卡上。

ARP欺骗:交换机根据MAC地址转发数据,伪装其他终端的MAC地址,从而获取局域网的网络流量。

抓包原理分为网络原理和底层原理1.网络原理: 1)本机环境-直接抓本机网卡进出的流量:直接在终端安装ws,然后ws抓本机网卡的与互联网通信的流量。 2)集线器环境(老网络)-集线器:向其他所有端口都会泛洪,抓整个局域网里面的包。

11.1网络抓包原理

网络中不论传输什么,最终通过物理介质发送的都是二进制,类似于0101的Bit流。纯文本(字符串)中文通常采用UTF-8编码,英文用ASCII编码;非纯文本音频、视频、图片、压缩包等按不同编码封装好,转换成二进制传输。在IP网络中,通过Wireshark抓包,获取的原始数据都是二进制。

哪种网络情况下能够抓取到包呢?下面结合网络原理讲解。网络抓包主要存在三种情况:本机环境、集线器环境和交换机环境。

11.1.1本机环境

本机环境直接抓包本机网卡进出的流量。Wireshark会绑定我们的网卡,不需要借助第三方设备(交换机、集线路由器)就能抓取我们的网络通信流量,这是最基本的抓包方式。即直接抓取进出本机网卡的流量包。这种情况下,wireshark会绑定本机的一块网卡。

11.1.2集线器环境

集线器环境可以做流量防洪,同一冲突域。集线器的英文是“Hub”,“Hub”是“中心”的意思,集线器的主要功能是对接收到的信号进行再生整形放大,以扩大网络的传输距离,同时把所有节点集中在以它为中心的节点上。它工作于OSI参考模型第一层,即“物理层”。

假设三台电脑通信,PC1处安装Wireshark,当PC2、PC3发送数据包到集线器网络里面(冲突域或广播域),由于集线器是物理层产品,不能识别MAC地址、IP地址,它会将接收包往其他所有接口泛洪,此时Wireshark就能抓到从同一个集线器其他电脑发过来的数据包,即局域网中的数据包。这是一种典型的老网络做法,现在基本淘汰。

用于抓取流量泛洪,冲突域内的数据包,即整个局域网的数据包。

11.1.3交换机环境

交换机环境是更加常见的方式,包括端口镜像、ARP欺骗、MAC泛洪。

11.1.3.1端口镜像

交换机是一种数据链路层甚至网络层的产品,它的转包接包严格按照交换机上的MAC地址表通信。所以正常情况下,PC2和PC3通信流量是很难流到PC1的网卡上。当PC2和PC3通信时,PC1是无法通过Wireshark抓到包。但是我们可以在交换机端口做SAPN端口镜像操作,它会将其他两个口的流量复制一份到PC1处,PC1的网卡和Wireshark设置为混插模式,此时就能进行抓包。该模式常用于很多付费的流量分析软件。这种方式下,交换机严格按照tenlnet表和mac地址表进行转发数据包。当pc2和pc3通信的时候,默认是pc1是无法抓取数据包的,但是可以通过在交换机上设置策略,即端口镜像。这样Pc2和Pc3通信的数据包就被复制一份到连接pc2的那个交换机端口,这样pc2就可以抓取到Pc2和Pc3的通信数据包了。

11.1.3.2ARP欺骗

假设我们没有权限在交换机上做端口镜像技术,因为有MAC地址表,又想获取整个局域网中的流量,窃取到PC2、PC3上的流量。这可以通过著名的ARP攻击软件Cain&Abel实现,其流程是:

  • 首先,PC2发送ARP请求广播包,交换机收到包之后会发给PC1和PC3。
  • PC1和PC3接收到,正常情况下PC1会丢弃该包,因为询问的是PC3,但ARP欺骗会回复“我是IP3,对应地址为MAC1”,这就是典型的ARP欺骗或ARP病毒。
  • 最后PC2会将流量封装成底层的MAC1回复过去。如果PC3和PC1都回应,但APR有个特性叫后到优先,PC1会做一个错误的绑定,将数据包发到MAC1,从而导致PC2和PC3的通信流量都会经过PC1,这也是典型的流量劫持、局域网攻击。

步骤如下:

(1)PC2想和PC3通信,故而向交换机发送广播

(2)正常情况下PC1会将此包丢弃掉(因为要找的不是它),但是这里的PC1会进行ARP欺骗,告诉PC2它就是PC2要找的PC3

(3)因为ARP后到优先的特性,PC2很大可能会认为PC1的MAC地址是自己要找的PC3

(4)就这样,PC2和PC3的通信就变成了PC2和PC1的通信了。

(5)至于后续PC1要不要把数据(可能被修改的数据)交给PC3,那完全取决于PC1的心情。

以上便是局域网ARP攻击的典型情况。

11.1.3.3MAC泛洪

通过工具泛洪带来大量垃圾包,产生大量MAC地址,此时交换机MAC地址表会变为右边这张表(爆表),MAC2和MAC3被挤出了MAC地址表。一旦这种MAC地址被挤出MAC地址表,按照交换机原理,如果收到的数据包是未知,它会对外泛洪,此时PC2和PC3对外流量泛洪。

这种情况下,PC1没有端口镜像的权限,所以它不能直接截取全网的流量,那么该怎么做呢?

(1)PC1发送大量垃圾包,这里产生了大量的MAC地址,导致MAC表爆表

(2)PC2和PC3发出的数据找不到目的地址就会进行全网泛洪,被PC1截取全网流量

11.2底层原理

那么,抓包的底层架构是怎样的?下面开始讲解Wireshark的底层原理。

底层原理:wireshark底层抓包工具。

12.wireshark整体架构

Wireshark包括5层架构:

最底层Win-/libpcap:wireshark底层驱动软件,Wireshark抓包时依赖的库文件(驱动文件、库文件)

Capture:抓包引擎,利用libpcap/WinPcap底层抓取网络数据包,libpcap/WinPcap提供了通用的抓包接口,能从不同类型的网络接口(包括以太网、令牌环网、ATM网等)获取数据包

Wiretap:将抓来的二进制数据转换成需要的格式文件,此时获取的是一些比特流,通过Wiretap(格式支持引擎)能从抓包文件中读取数据包,支持多种文件格式

Core:核心引擎,通过函数调用将其他模块连接在一起,起到联动调用的作用,Epan(包分析引擎涉):Protocol-Tree(保存数据包的协议信息,协议结构采用树形结构,解析协议报文时只需从根节点通过函数句柄依次调用各层解析函数即可)、Dissectors(各种协议解码器,支持700多种协议解析,解码器能识别出协议字段,并显示出字段值,Wireshark采用协议树的形式对数据流量的各层次协议逐层处理)、Plugins(一些协议解码器以插件形式实现,源码在plugins目录)、Display-Filters(显示过滤引擎,源码在epan/dfilter目录)。

GTK1/2:图形处理工具,处理用户的输入输出显示,最终存储至Harddisk硬盘中。

PS:了解基本的原理知识挺重要的,尤其为后续。

13.功能模块

模块名

功能

源码子目录

GTK/Qt

处理所有的用户输入/输出(所有的窗口,对话框等等)

/ui
GTK: /ui/gtk
Qt: /ui/qt

Core

主要的"粘合代码"(glue code),它把其他的块组合到一起

/

Epan

(Ethereal Packet Analyzer)

协议树(Protocol-Tree) - 保存捕获文件的协议信息数据

/epan

解析器(Dissectors) - 多种协议的解析器

/epan/dissectors

插件(Plugins) - 一些用插件实现的协议解析器

/plugins

显示过滤器(Display-Filters) - 显示过滤器引擎

/epan/dfilter

Wiretap

wiretap库用于读/写libpcap格式或者其他文件格式的捕获文件

/wiretap

Capture

抓包引擎相关接口

/

Dumpcap

抓包引擎. 这是唯一需要提升权限来执行的部

/

WinPcap/libpcap

(不是Wireshark包的一部分) - 依赖于平台的包捕获库,包含捕获过滤器引擎.这就是我们为什么有不同的显示和捕获 两套过滤语法的原因 - 因为用了两种不同的过滤引擎

-

14.WireShark代码流程图

15.小结

好了,到此宏哥就将Wireshark工具的前世今生基本上全都讲解和分享完了,今天时间也不早了,就到这里!感谢您耐心的阅读~~

  每天学习一点,今后必成大神-

往期推荐(由于跳转参数丢失了,所有建议选中要访问的右键,在新标签页中打开链接即可访问):

Appium自动化系列,耗时80天打造的从搭建环境到实际应用精品教程测试

Python接口自动化测试教程,熬夜87天整理出这一份上万字的超全学习指南

Python+Selenium自动化系列,通宵700天从无到有搭建一个自动化测试框架

Java+Selenium自动化系列,仿照Python趁热打铁呕心沥血317天搭建价值好几K的自动化测试框架

Jmeter工具从基础->进阶->高级,费时2年多整理出这一份全网超详细的入门到精通教程

Fiddler工具从基础->进阶->高级,费时100多天吐血整理出这一份全网超详细的入门到精通教程

Pycharm工具基础使用教程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1428166.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity DOTween插件常用方法(二)

文章目录 1.3 动画设置1.4 动画队列 Sequence1.5 动画回调函数1.6 等待函数(协程中使用) 1.3 动画设置 SetLoops 设置循环动画; 参数: loops:指定循环的次数,设置为 -1 表示无限循环; loopType…

linux -- 并发 -- 并发来源与简单的解决并发的手段

互斥与同步 当多个执行路径并发执行时,确保对共享资源的访问安全是驱动程序员不得不面对的问题 互斥:对资源的排他性访问 同步:对进程执行的先后顺序做出妥善的安排 一些概念: 临界区:对共享的资源进行访问的代码片段…

年轻人“过年”行为大赏

【潮汐商业评论/原创】 前脚刚进家门,后脚快递电话一个接着一个。 临近春节,Julia是提前批回家的年轻人,与Julia一同到家的还有她的年货。上至大小家电,下到坚果零食,短短几天快递就堆满了客厅。 吃的喝的还能理解&…

Tencent Tinker:移动应用热修复的未来之路

Tencent Tinker:移动应用热修复的未来之路 1 引言 移动应用热修复是一项在移动应用开发领域中日益重要的技术,它可以帮助应用程序开发者快速修复线上应用的bug、漏洞和功能问题,而无需重新发布整个应用。这种能力对于提高用户体验、降低用户…

卸载Ubuntu双系统

卸载Ubuntu双系统 我们卸载Ubuntu双系统,可能出于以下原因: 1、Ubuntu系统内核损坏无法正常进入 2、Ubuntu系统分配空间不足,直接扩区较为复杂 3、以后不再使用Ubuntu,清理留出空间 123无论出于哪种原因,我们都是要…

vue项目在public中编写一个json文件 并用http请求获取 模仿数据接口

我们前后端分离是经常存在 前端已经开发到需要接口 但后端还没开始的情况的 如果直接在js中写假数据 后面还要改不少东西 多少有点麻烦 我们可以 直接在 public 静态资源目录下创建一个json文件 这里 我取名叫 city.json 大家可以根据自己喜好给json文件命名 我这个json文件的…

LEETCODE 170. 交易逆序对的总数

class Solution { public:int reversePairs(vector<int>& record) {if(record.size()<1)return 0;//归并 递归int left,right;left0;rightrecord.size()-1;int nummergeSort(left,right,record);return num;}int mergeSort(int left,int right, vector<int>…

WordPress可以做企业官网吗?如何用wordpress建公司网站?

我们在国内看到很多个人博客网站都是使用WordPress搭建&#xff0c;但是企业官网的相对少一些&#xff0c;那么WordPress可以做企业官网吗&#xff1f;如何用wordpress建公司网站呢&#xff1f;下面boke112百科就跟大家简单说一下。 WordPress是一款免费开源的内容管理系统&am…

前端JavaScript篇之对对象与数组的解构的理解、如何提取高度嵌套的对象里的指定属性?

目录 对对象与数组的解构的理解如何提取高度嵌套的对象里的指定属性&#xff1f; 对对象与数组的解构的理解 对象与数组的解构是一种通过模式匹配的方式&#xff0c;从对象或数组中提取值&#xff0c;并将其赋给变量的过程。它可以让我们以一种简洁的方式访问和使用对象或数组…

flask基于大数据的旅游景区推荐可视化大屏系统 juj13-vue

本论文分为六个章节。 第一章&#xff0c;绪论&#xff0c;其包含课题背景及意义&#xff0c;现国内外的发展现状&#xff0c;本课题要研究的内容&#xff0c;所使用开发工具的描述等信息。 第二章&#xff0c;主要介绍了系统的开发技术。 第三章&#xff0c;先讲述功能需求分析…

留学生怎么合理使用ChatGPT ?还有哪些同类工具可以使用?

一篇篇相关于ChatGPT的文章陆陆续续铺天盖地的出现在我们面前。今天我们来看看怎么使用这个宝藏工具&#xff01; 文章主要内容为&#xff1a; 1.它是什么&#xff1f; 2.它能做什么&#xff1f; 3.作为留学生我们怎么使用它&#xff1f; 4.其他同类工具推荐 5.个人观点 一…

第 8 章:Linux中使用时钟、计时器和信号

在本章中&#xff0c;我们将开始探索Linux环境中可用的各种计时器。随后&#xff0c;我们将深入了解时钟的重要性&#xff0c;并探讨UNIX时间的概念。接下来&#xff0c;我们将揭示在Linux中使用POSIX准确测量时间间隔的方法。之后&#xff0c;我们将进入std::chrono的领域&…

市场复盘总结 20240202

仅用于记录当天的市场情况&#xff0c;用于统计交易策略的适用情况&#xff0c;以便程序回测 短线核心&#xff1a;不参与任何级别的调整&#xff0c;采用龙空龙模式 一支股票 10%的时候可以操作&#xff0c; 90%的时间适合空仓等待 昨日主题投资 连板进级率 6/30 20% 二进三…

vue全家桶之路由管理Vue-Router

一、前端路由的发展历程 1.认识前端路由 路由其实是网络工程中的一个术语&#xff1a; 在架构一个网络时&#xff0c;非常重要的两个设备就是路由器和交换机。当然&#xff0c;目前在我们生活中路由器也是越来越被大家所熟知&#xff0c;因为我们生活中都会用到路由器&#…

基于最新koa的Node.js后端API架构与MVC模式

Koa 是一个由 Express 原班人马打造的现代 Web 框架&#xff0c;用于 Node.js。它旨在提供一个更小、更富有表现力和更强大的基础&#xff0c;用于 Web 应用和 API 开发。Koa 不捆绑任何中间件&#xff0c;它提供了一个优雅的方法以组合不同的中间件来处理请求和响应。 Koa 的核…

【QT】坐标系统和坐标变换

目录 1 坐标变换函数 1.1 坐标平移 1.2 坐标旋转 1.3 缩放 1.4 状态保存与恢复 2 坐标变换绘图实例 2.1 绘制3个五角星的程序 2.2 绘制五角星的PainterPath的定义 3 视口和窗口 3.1 视口和窗口的定义与原理 3.2 视口和窗口的使用实例 4 绘图叠加的效果 1 坐标变换函数 QPainter…

链表与二叉树-数据结构

链表与二叉树-数据结构 创建叶子node节点建立二叉树三元组&#xff1a;只考虑稀疏矩阵中非0的元素&#xff0c;并且存储到一个类&#xff08;三元组&#xff09;的数组中。 创建叶子node节点 class Node{int no;Node next;public Node(int no){this.nono;} } public class Lb…

24.云原生ArgoCD高级之数据加密seale sealed

云原生专栏大纲 文章目录 数据加密之seale sealedBitnami Sealed Secrets介绍Bitnami Sealed Secrets工作流程安装sealed-secrets和kubeseal安装sealed-secrets-controller安装kubeseal通过kubeseal将sealed-secrets公钥拿出来通过kubeseal加密secrets替换kustomize下secret为…

Leetcode 热门百题斩(第二天)

介绍 针对leetcode的热门一百题&#xff0c;解决大多数实习生面试的基本算法题。通过我自己的思路和多种方法&#xff0c;供大家参考。 1.两数之和&#xff08;题号&#xff1a;1) 方法一 最先想到的就是两个for去遍历匹配。 class Solution {public int[] twoSum(int[]…

DPVS 多活部署架构部署

一、目标 利用DPVS部署一个基于OSPF/ECMP的提供HTTP服务的多活高可用的测试环境。 本次部署仅用于验证功能&#xff0c;不提供性能验证。 配置两台DPVS组成集群、两台REAL SERVER提供实际HTTP服务。 注&#xff1a;在虚拟环境里面&#xff0c;通过在一台虚拟服务器上面安装FR…