【网络】网络抓包与协议分析

server/2024/11/25 3:24:08/

网络抓包与协议分析

一. 以太网帧格式分析

这是以太网数据帧的基本格式,包含目的地址(6 Byte)、源地址(6 Byte)、类型(2 Byte)、数据(46~1500 Byte)、FCS(4 Byte)。

  1. Mac 地址类型

    分为单播地址、组播地址、广播地址。

    单播地址:是指第一个字节的最低位是 0 的 MAC 地址。

组播地址: 是指第一个字节的最低位是 1 的 MAC 地址。

在这里插入图片描述

广播地址:广播地址是发送至网络上所有设备的特殊地址,全为1(FF:FF:FF:FF:FF:FF)。
在这里插入图片描述

  • OUI(Organizationally-Unique Identifier): 厂商代码
  1. 头部信息

    目的Mac地址:标识帧的接收者,6个字节;

    源Mac地址:标识帧的发送者,6个字节;

    以太类型:指示帧中数据的类型,2个字节,例如:IPv4 (0x0800)、ARP (0x0806)。
    在这里插入图片描述

  2. 长度

    以太网帧的头部位14个字节,以太帧尾占4个字节,所搭载的数据长度位46-1500个字节。总的长度应为64-1518字节。

  3. 封装

    以太网帧将上层协议的数据封装在帧的数据部分,并通过类型(2 Byte)进行标识。

二. ARP协议分析

2.1 ARP数据包分析

在这里插入图片描述

我们通过Wireshark随机抓取一个ARP数据包,并分析其格式:

在这里插入图片描述

比如抓到的这个ARP数据包:

  • 由于ARP是网络层的协议,故前面14个字节为底层(数据链路层)封装的以太帧头:分别表示目的Mac(广播)、源Mac、类型(0x0806:ARP)。

  • 接下来是ARP协议的内容:
    在这里插入图片描述

  • 在最后,有一串0来补全,让数据帧长度满足最小长度64字节。

在这里插入图片描述

此处是补全为60个字节,加上以太帧尾4个字节,达到64个字节。

2.2 ARP协议工作过程

当主机 A 需向主机 B 发送数据且在 ARP 缓存中未找到 B 的 IP 与 MAC 对应关系时,A 广播 ARP 请求报文,包含 A 的 IP、MAC 及 B 的 IP。网络中只有 B 响应请求,以单播发回包含自己 IP、MAC 及 A 的 IP、MAC 的应答报文。A 收到应答后将 B 的 IP 与 MAC 对应关系存入 ARP 缓存。

三. ICMP协议分析

ICMP(Internet Control Message Protocol)即互联网控制报文协议,是 TCP/IP 协议族的一个子协议。
通过Ping程序,我们能够很容易地抓取到ICMP数据包。

3.1 ICMP格式:

在这里插入图片描述

  • Type字段表示ICMP消息的类型;
  • Code字段表示ICMP消息类型细分的子类型;
  • Checksum字段表示ICMP报文的校验和。
3.2 ICMP抓包

我们可以在命令提示符种Ping某个公网地址,就会产生ICMP报文。
在这里插入图片描述
此处的ICMP类型就是Echo请求报文。

3.3 ICMP功能
  1. 确认IP包是否成功到达目的地址
  2. 通知在发送过程中IP包被丢弃的原因

四.抓取DNS数据并分析UDP协议

dns是一个应用层协议,其传输层有时会使用TCP协议,有时会使用UDP协议。对于个人用户来说,大部分的使用场景都是UDP协议。

  • UDP使用场景:一般的域名解析查询,例如查询一个网站的 IP 地址等操作,通常使用 UDP 进行通信。

  • TCP使用场景:主要用于DNS服务器同步数据。

抓取DNS数据

在这里插入图片描述

在抓取的DNS数据中,前14个字节为以太帧头,接下来20个字节为IPv4头,接下来8个字节为UDP头,其余的为DNS数据。

UDP协议分析

在这里插入图片描述

UDP头长度为8个字节,依次为源端口(2 Byte)、目的端口(2 Byte)、数据总长度(2 Byte)、校验和(2 Byte)。

在这里插入图片描述

五. TCP协议分析

在这里插入图片描述

抓取TCP报文段

在这里插入图片描述

  • 比如抓到的这个TCP数据段,可以观察到源端口、目的端口、序号、确认序号等信息。

  • 但我们也发现现在呢不再是6个标志位,而是9个标志位。我们抓取的是FINACK为1的数据段,这是“四次挥手”中的第三次挥手。

  • 此处抓到的TCP数据段,头部长度为20个字节,即没有选项。但我们依然可以看到一些选项的踪迹,比如此处的窗口扩展因子 ( Window size scaling factor)就是选项的一部分,因为没有选项,故此处是未知的。

    在这里插入图片描述

六. HTTP协议分析

为了更方便的抓取到HTTPS的数据包,我们使用Fiddler进行抓包,比如抓到的学校的办事大厅的数据包:

HTTP的头部是以文本形式 (键值对) 进行组织的,比如此处用到了GET方法、协议是HTTP/1.1、Host是ehall.dlut.edu.cn。也可以看到客户端携带Cookie作为个人身份标识来访问服务器。

在这里插入图片描述

同时,我们也能看到返回的HTTP数据,第一行依次为 协议、状态码、状态。

七. 思考及感悟

  1. 使用了显示过滤器后,Wireshark 的抓包工作量会减少吗?

不会,Wireshark 的显示过滤器是在数据包已经被捕获后,对已捕获的数据包进行筛选显示,它并不影响抓包的过程。

  1. MAC 帧的长度和 IP 数据报的长度有怎样的关系?

MAC帧是在IP数据包的头部和尾部分别加上帧头(14 Byte)和帧尾(4 Byte)。

MAC 帧长度在以太网中最小 64 字节,最大 1518 字节。IP 数据报长度可变,若过长可能需分片封装在多个 MAC 帧中;若过短可能需填充以满足 MAC 帧最小长度要求。

  1. 心得感悟

常常使用Wireshark、Fiddler等抓包工具有助于我们更好的理解网络中各个层次的结构,让我们对网络有更好的理解。


http://www.ppmy.cn/server/144695.html

相关文章

Java面试之多线程并发篇(6)

前言 本来想着给自己放松一下,刷刷博客,突然被几道面试题难倒!产生死锁的四个必要条件?如何避免死锁?线程池核心线程数怎么设置呢?Java线程池中队列常用类型有哪些?似乎有点模糊了,…

看Threejs好玩示例,学习创新与技术(ogl)

本文标题可能看的你莫名奇妙,什么是ogl?ogl是一个新的三维引擎库,可以简单任务是非常简化的ThreeJS。下面图是它的一个示例,可见虽然它是一个麻雀,但五脏还是比较全的。 1、先说OGL OGL的代码非常简单,主要…

HarmonyOS鸿蒙系统上File文件常用操作

HarmonyOS鸿蒙系统上,file文件常用操作记录 1.创建文件 createFile(fileName: string, content: string): string {// 获取应用文件路径let context getContext(this) as common.UIAbilityContext;let filesDirPath context.filesDir / fileName;// 新建并打开…

【机器学习chp5】线性回归

推荐文章1,三种角度详细分析了L1,L2正则化的本质。 【王木头 L1、L2正则化】三个角度理解L1、L2正则化的本质-CSDN博客 推荐文章2,其中有各种梯度下降的优化算法分析。 【王木头梯度下降法优化】随机梯度下降、牛顿法、动量法、Nesterov、…

国外云计算服务器租用攻略

国外云计算服务器租用需综合考虑服务商信誉、性能配置、价格性价比、合规性与法律风险、技术支持等因素。首先明确业务需求,选择正规、技术实力强的服务商,并考虑地理位置以优化访问速度。其次,根据需求选择合适的CPU、内存、存储和带宽配置&…

tcp::acceptor acceptor(io_service, tcp::endpoint(tcp::v4(), PORT)); 解析

这行代码使用 boost::asio 库创建了一个 TCP 服务器端的 acceptor 对象,用于监听指定端口的传入连接请求。它是一个在服务器端监听客户端连接的基础组件。让我们逐部分解释这行代码: tcp::acceptor acceptor(io_service, tcp::endpoint(tcp::v4(), PORT…

Python-flet实现个人视频播放器

1:效果图 2:代码 登录后复制 import random import flet as ftdef main(page: ft.Page):page.theme_mode ft.ThemeMode.LIGHTpage.title "岁月里客栈视频播放器"page.window.always_on_top Truepage.spacing 20page.horizontal_alignment …

HTML通过JavaScript获取访问连接,IP和端口

<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <title>Get IP Address</title> <script> function displayURL() { var url window.location.href; // 获取当…