ARP扫描攻击(JAVA实现)

本文介绍了如何使用JAVA实现ARP扫描攻击,通过第三方库JPCAP进行操作。ARP攻击的原理是篡改网络设备中被攻击主机的MAC地址,导致数据传输错误。作者在实现过程中遇到了JPCAP库的依赖问题,包括缺少Winpcap库、Java Native Interface路径设置以及jar与dll版本不匹配的问题,并提供了解决方案。文章最后展示了程序运行的效果和调用代码。
摘要由CSDN通过智能技术生成

转载请注明: http://blog.csdn.net/HEL_WOR/article/details/50650465

前段时间翻看了点计算机网络方面的书,从DNS跳到了ARP协议后,就打算试试写一个ARP的扫描攻击程序出来,于是就有了这篇博客

现在想想大学的时候我们寝室应该受到ARP扫描攻击了,因为我们寝室的一夜之间连上WIFI后都不能上网了,当时不知道对路由器做静态绑定,于是后面的时间我都是蹭的其他寝室的wifi,现在想来当时是因为心没在这行吧。

ARP攻击的原理比较简单,告诉路由器被攻击主机A的MAC地址是一个假的MAC地址,由于数据在物理层是通过MAC地址来描述目标主机的地址的,而非网络层里使用的IP地址来描述主机地址,也就是说我们请求远程服务的地址最终都会被ARP协议解析成MAC地址,路由器在接收到被攻击主机A发出请求的响应数据后,会查找自己的ARP表,根据ARP表中记录的IP-MAC地址对获取主机A的MAC地址,然后将获得的响应数据表转发给被攻击主机A,但不幸的是,如果路由器查找自己的ARP表得到的是被攻击后记录下的假的MAC地址,那么主机A就不能得到自己想要的数据,对于在操作主机A的用户来说看到的现象就是主机A的页面打开很慢或者无法打开,视频加载缓慢或无法加载,直至最后主机A断网。攻击的核心就是篡改其他网络设备能看到的被攻击主机的MAC地址。

用JAVA实现ARP扫描和攻击需要用到JPCAP这个第三方JAR包,在使用这个JAR的时候回遇到一系列问题。

1.no dependence libray
请安装Winpcap。

2.java.lang.UnsatisfiedLinkError:no jpcap in java.library.path
把DLL扔到JDK下或者在工程里对JRE System Library设置Native Library Location到本地文件夹下,这点确实和VS开发里不同,VS里只需要添加引用即可完成DLL引用,Eclipse里需要制定library路径。

3.java.lang.UnsatisfiedLinkError:jpcap.JpcapCaptor.getDeviceList()[Ljpcap/NetworkInterface;
这个错误在网上得到的提示信息是jpcap.jar和jpcap.dll的版本对应不上,测试后发现确实是这个原因,这里提供一个完整的jacap安装文件

程序运行效果截图:

这里写图片描述
这里写图片描述

ArpImplenment类:

package ArpAttack;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import jpcap.JpcapCaptor;
import jpcap.JpcapSender;  
import jpcap.NetworkInterface;  
import jpcap.packet.ARPPacket;  
import jpcap.packet.EthernetPacket;  

public class ArpImplenment {
    /*
     * 保存IP-Mac对
     */
    private static HashMap<String, String> map = new HashMap<String, String>();

    /*
     * 构造MAC地址byte数组
     */
    public 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;  
    }  

    /*
     * 发送ARP函数
     */
    public static void SendArp(HashMap<String, String> map) throws Exception {  
        /*
         * 枚举网卡并打开设备  
         * 检查本机当前使用的哪个网卡  是走的本地连接还是无线网络连接
         * 设置错误会导致ARP请求不会发出去 但检测不到异常
         */
        NetworkInter
  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值