ICMP协议
ICMP协议是网络层协议, 利用ICMP协议可以实现网络中监听服务和拒绝服务,如 ICMP重定向的攻击。
一、ICMP基本概念
1、ICMP协议
ICMP是Internet控制报文协议,用于在IP主机、路由器之间传递控制消息,控制消息指网络通不通、主机是否可达,路由是否可用等等。
- 案例
- 环境:GNS3 路由器 交换机 电脑
- slots设置:交换机要选择NM-6ESW,主机和路由器选NM-1FE-TX


PC#show int f0/0
FastEthernet0/0 is up, line protocol is upHardware is AmdFE, address is cc02.1b08.0000 (bia cc02.1b08.0000)Internet address is 192.168.1.1/24#可知PC的MAC地址为cc02.1b08.0000R3#show int f0/0
FastEthernet0/0 is up, line protocol is upHardware is AmdFE, address is cc03.187c.0000 (bia cc03.187c.0000)
#可知路由器R3的MAC地址为cc03.187c.0000
- ping一下网关

- 抓包看到数据有请求有响应

根据抓到得报文可以看出:ICMP报文是有请求有响应的,如果说出现请求超时这种情况,很有可能是数据包可以到达目的地,但是回不来,或者说 根本不能到达目的地,所以请求超时会有多种情况。如果是路由器回复目标主机不可达造成的结果就是路由器没有帮你转发数据。
- ICMP报文前面是网络层协议,有IPV4报文,接着才是ICMP协议 。

2、ICMP封装结构
ICMP是主机和路由器之间传递控制报文消息的,ICMP属于网络层协议,是封装在传输层和控制层之间的。

3、ICMP报文结构
- type类型
- code 代码
- Checksum校验和
- Identifier(BE)和dentifier(LE)是报文的标志符
- Sequence Number(BE)和Sequence Number(LE)是报文的序列号
- Data:ICMP的数据

4、ICMP的Type&Code
ICMP报文主要就是看它的类型(type)和代码(code)
- (8 0) ICMP请求
ICMP报文type类型都为8,code字段为0,注不正常的请求下面有No response seen字段。
- (0 0) 回显应答(表示比较正常的应答)
- (11 0) 超时(传输期间生存时间为0)

- (3 1) 不正常应答(目标不可达主机不可达)

- (3 3) 目标不可达(端口不可达)
- (3 2) 目标不可达(协议不可达)
- 类型5 表示重定向
- (5 0)网络重定向
- (5 1)主机重定向
- 类型13 14 时间戳请求 时间戳应答
- 总计类型是有0到18,这里有个特殊点,就是类型0之后没有类型1 类型2 ,类型0过后是类型3 类型4 类型5 ,也没有类型6 类型7,接着是类型8 类型9……一直到类型18。
注:ICMP报文不同的类型下面可能有不同的代码,可能要去了解下常见的ICMP类型有哪些,某一类型下面有哪些代码。如当你去访问一个不存在或者目标不可达或者说没有响应的目的的时候,数据到达网关后,路由器发现目标无法到达或者回不来的时候,会给主机发送ICMP响应,即ICMP控制报文,根据UCMP控制报文的Type和code可以分析出主机访问目标到底是什么情况。
二、ICMP重定向
1、什么是ICMP重定向
重定向是ICMP控制报文中的一种,在某一种特定的情况下,当路由器检测到一台机器使用的是非优化路由的时候,这个时候路由器回会主机发送ICMP重定向报文,使得它走优化路由。.
2、ICMP重定向举例
(1)引入ICMP重定向
网络中有三台主机{主机A(192.168.1.10)主机B (192.168.2.1)主机C(192.168.3.1}
一台交换机和两台路由器,主机A通过交换机连接到路由器R1和R2,主机A的网关是R1,
主机B接R2,主机C接R1。网络拓扑如下:
现主机A(1.10)要访问主机B(3.1),因为主机A的网关是(1.254),初始R1没有配置到R2的路由,所以主机A是无法到达主机B的。
此时如果在R1路由器添加到R2的静态路由,主机A访问主机B的数据流向如下:
主机A->R1->R2->主机B
这样走的话就比较复杂了,因为从网络拓扑来看,主机A如果能够走R2到主机B的话显然是最优路线,那么就要引入了ICMP重定向l了。
(2)ICMP重定向
此时我们可以在R2路由器R1上直接设置主机重定向,让主机A访问主机B的时候直接走路由器R2.
即在此情况下,当路由器R1检测到主机A使用的是非优化的路由,路由器R1就会想主机A发送ICMP重定向报文,使主机A的路由改变。
此时,如果有黑客直接给逐句A发送ICMP重定向,将主机A的路由改变了,可能在成逐句A无法进行网络通信,或直接将主机A的网关改成自己来达成截取流量的目的,这就是ICMP重定向攻击。
3、ICMP重定向原理性实验
实验环境:GNS3(两台路由器、一台交换机、一台主机)2.1和3.1的网络通过路由器的loopback虚拟接口来实现
(1)网络搭建与配置

PC(config)#no ip routing
PC(config)#int f0/0
PC(config-if)#ip add 192.168.1.10 255.255.255.0
PC(config-if)#no shut
PC(config-if)#exit
PC(config)#ip default-gateway 192.168.1.254
PC(config)#R1#
R1#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R1(config)#int f0/0
R1(config-if)#ip add 192.168.1.254 255.255.255.0
R1(config-if)#no shut
R1(config-if)#exit
R1(config)#int loopback 0
R1(config-if)#ip
*Mar 1 00:13:05.739: %LINEPROTO-5-UPDOWN: Line protocol on Interface Loopback0, changed state to up
R1(config-if)#ip add 192.168.2.1 255.255.255.0
R1(config-if)#R2#conf
Configuring from terminal, memory, or network [terminal]?
Enter configuration commands, one per line. End with CNTL/Z.
R2(config)#int f0/0
R2(config-if)#ip add 192.168.1.253 255.255.255.0
R2(config-if)#no shut
R2(config-if)#no shut
*Mar 1 00:09:59.695: %LINK-3-UPDOWN: Interface FastEthernet0/0, changed state to up
*Mar 1 00:10:00.695: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/0, changed state to up
R2(config-if)#exit
R2(config)#int loopback 0
*Mar 1 00:10:18.415: %LINEPROTO-5-UPDOWN: Line protocol on Interface Loopback0, changed state to up
R2(config-if)#ip add 192.168.3.1 255.255.255.0
(2)主机Aping测试
R1、R2以及192.168.2.1都可以ping通,但是192.168.3.1无法ping通(没有路由)





(3)配置路由
直接在R1路由器配置一条路由,使得数据通过R1转发到192.168.3.0
R1#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R1(config)#ip route 192.168.3.0 255.255.255.0 192.168.1.253
R1(config)#
(4)抓包分析
开启三条链路的抓包,然后主机ping192.168.3.1抓取数据进行分析。

- 主机A->交换机数据流量
第一条报文是no response,没有响应也就是cmd上面显示请求超时的那条报文。

我们来看下ICMP报文的type和code字段,type类型为5,code为0表示对网络进行重定向

下一条报文就请求到了

- 交换机->R1数据流量
左边链路是
1.10请求3.1
1.10收到路由器的重定向,
1.10去请求1.253的MAC地址
接下来后续的包就直接交给了1.253
主机A访问3.1的时候网关直接发送ICMP重定向报文给主机A,

由于主机A的网关R1发现自己路由表中有直接到达192.1683.1的路由
所以看到下一跳地址直接向R2发送了ARP请求,请求R2的MAC地址,R2发送ARP应答将自己的MAC地址响应给R1.
- 右边链路的抓包情况
右边这条链路很清楚,它就没有重定向的过程。直接是1.10请求3.1,3.1响应1.10

(4)总结
整个过程:
192.168.1.10请求192.168.3.1
192.168.1.10收到网关的ICMP重定向报文
网关请求R2(192.168.1.253)的MAC地址
接下来后续的包就直接交给了R1(192.168.1..253)
在GNS3中,重定向的路由直接改了PC网关;

4、ICMP重定向攻击
(1)环境
- kali虚拟机(netwox工具、ettercap工具)
(2)工具
- netwox

- ettercap

如果遇到直接点击ettercap图标无法启动,尝试终端输入ettercap -G运行


(3)ettercap 攻击模拟
- 选择网卡

- 扫描

- 查看扫描到的IP-MAC列表


- windows虚拟机作为被攻击目标

- kali作为攻击机

- 在扫描列表中找到被攻击主机,右击选中,然后Add to Target1

在列表中任选一个Add to Target2

- 点击右上角小地球标识,ICMP redirect


- 重定向到哪里去,这里输入的是一个虚假的MAC地址


- windows上面抓包

- 正常还是可以访问网络的

- 这里抓到了ICMP报文

正常实施ICMP重定向攻击的话,Windows这台主机是不能通信的,实验结果的话在虚拟机里面很难实现。
(4)netwox攻击模拟
web.ecs.syr.edu/~wedu/Teaching/cis758/netw522/netwox-doc_html/tools/index.html

- 用法
- 参数:-d 指定网卡 -f 过滤器 -g 新的网关 -s 欺骗IP -c ICMP代码 -i 源IP地址
- 使用示例:netwox的86模块 -g 指定新的网关

- 指定新网关并实施攻击

- netwox是直接对网络中的所有主机进行了重定向

- ping下百度可以ping通,还是可以正常访问到网络的。

- 查找ping百度的报文进行分析

- kali向Windows10发送了重定向报文,将它的网关改成了192.168.183.134




相关文章:
ICMP协议
ICMP协议是网络层协议, 利用ICMP协议可以实现网络中监听服务和拒绝服务,如 ICMP重定向的攻击。 一、ICMP基本概念 1、ICMP协议 ICMP是Internet控制报文协议,用于在IP主机、路由器之间传递控制消息,控制消息指网络通不通、主机是…...
环信服务端下载消息文件---菜鸟教程
前言 在服务端,下载消息文件是一个重要的功能。它允许您从服务器端获取并保存聊天消息、文件等数据,以便在本地进行进一步的处理和分析。本指南将指导您完成环信服务端下载消息文件的步骤。 环信服务端下载消息文件是指在环信服务端上,通过调…...
创建型模式 | 建造者模式
一、建造者模式 1、原理 建造者模式又叫生成器模式,是一种对象的构建模式。它可以将复杂对象的建造过程抽象出来,使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。创建者模式是一步一步创建一个复杂的对象…...
MVC设计模式
在当今的软件开发领域,MVC(Model-View-Controller)设计模式已经成为了一种广泛使用的架构模式。它为应用程序提供了一种结构化的方法,将数据、用户界面和业务逻辑分开,从而使得应用程序更易于维护、扩展和重用。 一、…...
WSL (2103) ERROR: CreateProcessEntryCommon:493: chdir 错误解决
[TOC](WSL (2103) ERROR: CreateProcessEntryCommon:493: chdir 错误解决) 1. 错误信息 <3>WSL (2103) ERROR: CreateProcessEntryCommon:493: chdir(/mnt/d/Program Files/PowerShell/7) failed 52. 解决方法 wsl --shutdownwslrefer: https://github.com/microsoft/…...
【二、自动化测试】为什么要做自动化测试?哪种项目适合做自动化?
自动化测试是一种软件测试方法,通过编写和使用自动化脚本和工具,以自动执行测试用例并生成结果。 自动化旨在替代手动测试过程,提高测试效率和准确性。 自动化测试可以覆盖多种测试类型,包括功能测试、性能测试、安全测试等&…...
用ChatGPT来造一个ChatGPT:计算机领域智能问答系统实践(2)
在PHP语言中,你可以使用MySQL数据库来存储知识库,并使用PHP来实现系统的逻辑。以下是一个简单的示例: 创建数据库表: 首先,创建一个名为 computer_knowledge 的表来存储计算机知识。可以使用以下SQL语句:…...
Ubuntu开机自动挂载硬盘
前言: 因为我的电脑是WIN10 Ubuntu18.04双系统,且两个系统都装在C盘上,而D盘作为数据和代码存储盘,经常会开机就被访问,例如上一次关机前用VS Code访问D盘代码,然后下一次开机的时候打开VSCode发现打不开…...
vue3基础:单文件组件介绍
介绍 Vue 的单文件组件 (即 *.vue 文件,简称 SFC,全称是single file component) 是一种特殊的文件格式,使我们能够将一个 Vue 组件的模板、逻辑与样式封装在单个文件中。下面是一个单文件组件的示例: <script> export def…...
OCR字符识别:开始批量识别身份证信息
身份证信息批量识别OCR是一项解决方案,它能够将身份证照片打包成zip格式或通过URL地址进行提交,并能够识别照片中的文本信息。最终,用户可以将识别结果生成为excel文件进行下载。 API接口功能: 1. 批量识别:支持将多…...
php多小区智慧物业管理系统源码带文字安装教程
多小区智慧物业管理系统源码带文字安装教程 运行环境 服务器宝塔面板 PHP 7.0 Mysql 5.5及以上版本 Linux Centos7以上 统计分析以小区为单位,统计如下数据:小区总栋数、小区总户数、小区总人数、 小区租户数量、小区每月收费金额统计、小区车位统计、小…...
解决虚拟机的网络图标不见之问题
在WIN11中,启动虚拟机后,发现网络图标不见了,见下图: 1、打开虚拟机终端 输入“sudo server network-manager stop”,停止网络管理器 输入“cd /回车” , 切换到根目录 输入“cd var回车” ,…...
【Spring类路径Bean定义信息扫描】
Spring类路径Bean定义信息扫描 1. ClassPathBeanDefinitionScanner作用2. 类声明3. 属性4. 构造器5. 扫描方法6. 真正扫描方法7. postProcessBeanDefinition8. 注册bean定义 1. ClassPathBeanDefinitionScanner作用 扫描类路径下的类注册为bean定义。2. 类声明 public class …...
Ubuntu上安装VMware+win11系统手册
Ubuntu安装vmware 下载: Linux 版下载地址:https://www.vmware.com/go/getworkstation-linux 安装: sudo chmod x VMware-Workstation-Full-17.5.0-22583795.x86_64.bundle 执行安装命令: sudo ./VMware-Workstation-Full-17.5.0…...
2024年1月12日:清爽无糖rio留下唇齿之间的香甜
友利奈绪的时间管理 2024年1月12日08:02:28进行java程序设计的上课准备 2024年1月12日08:02:44知道java的题目有18道 2024年1月12日08:43:07随机数去重比较 2024年1月12日08:54:03C语言题目最小公倍数 2024年1月12日08:58:37C语言题目二维数组变一维数组 2024年1月12日10…...
群晖Synology Drive同步文件时过滤指定文件夹“dist“, “node_modules“
群晖Synology Drive同步文件时过滤指定文件夹"dist", “node_modules” mac用户 安装Synology Drive创建同步任务修改Synology Drive配置 打开/Users/[用户名]/Library/Application Support/SynologyDrive/data/session/[同步任务序号,第一个同步任务就…...
小程序中滚动字幕
需求:在录像时需要在屏幕上提示字幕,整体匀速向上滚动 html部分: <view class"subtitles_main"><view style"font-size:34rpx;color: #fff;line-height: 60rpx;" animation"{{animation}}">人生的…...
MySQL中约束是什么?
🎉欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克🍹 ✨博客主页:小小恶斯法克的博客 🎈该系列文章专栏:重拾MySQL 🍹文章作者技术和水平很有限,如果文中出现错误&am…...
若依在表格中如何将字典的键值转为中文
文章目录 一、需求:二、问题解决步骤1、给需要转换的列绑定formatter属性2、获取字典项3、编写formatter属性绑定的方法 一、需求: 后端有时候返回的是字典的键值,在前端展示时需要转成中文值 后端返回的是dictValue,现在要转换…...
用笨办法-刻意练习来提高自己的编程能力
尝试了很多学习方法,企图快速提高编程能力,但最终发现,唯有老老实实刻意练习1,在辛苦与时间积累下,逐渐提升能力,才是最有效的方式。 将自己的笨办法总结了一下,主要包含7个步骤: …...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...

