`
wankunde
  • 浏览: 162333 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

使用JPCAP实现Java中的数据链路层控制

阅读更多

  一.JPCAP简介

  众所周知,JAVA语言虽然在TCP/UDP传输方面给予了良好的定义,但对于网络层以下的控制,却是无能为力的。JPCAP扩展包弥补了这一点。

  JPCAP实际上并非一个真正去实现对数据链路层的控制,而是一个中间件,JPCAP调用wincap/libpcap,而给JAVA语言提供一个公共的接口,从而实现了平台无关性。在官方网站上声明,JPCAP支持FreeBSD 3.x, Linux RedHat 6.1, Fedora Core 4, Solaris, and Microsoft Windows 2000/XP等系统。

  二.JPCAP机制

  JPCAP的整个结构大体上跟wincap/libpcap是很相像的,例如NetworkInterface类对应wincap的typedef struct _ADAPTERADAPTER,getDeviceList()对应pcap_findalldevs()等等。 JPCAP有16个类,下面就其中最重要的4个类做说明。

  1.NetworkInterface

  该类的每一个实例代表一个网络设备,一般就是网卡。这个类只有一些数据成员,除了继承自java.lang.Object的基本方法以外,没有定义其它方法。

  图1

  2.JpcapCaptor

  该类提供了一系列静态方法实现一些基本的功能。该类一个实例代表建立了一个与指定设备的链接,可以通过该类的实例来控制设备,例如设定网卡模式、设定过滤关键字等等。

  图2

  3.JpcapSender

  该类专门用于控制数据包的发送。

  图3

  4.Packet

  这个是所有其它数据包类的父类。Jpcap所支持的数据包有:

  ARPPacket、DatalinkPacket、EthernetPacket、ICMPPacket、IPPacket、TCPPacket、UDPPacket

  三.使用JPCAP实现监听

  1.监听原理 

  在详细说用JPCAP实现网络监听实现前,先简单介绍下监听的原理。

  局域网监听利用的是所谓的“ARP欺骗”技术。在以前曾经一段阶段,局域网的布局是使用总线式(或集线式)结构,要到达监听只需要将网卡设定为混杂模式即可,但现在的局域网络普遍采用的是交换式网络,所以单纯靠混杂模式来达到监听的方法已经不可行了。所以为了达到监听的目的,我们需要“欺骗”路由器、“欺骗”交换机,即“ARP欺骗”技术。

  假设本机为A,监听目标为B。

  首先,伪造一个ARP REPLY包,数据链路层头及ARP内容部分的源MAC地址填入A的MAC地址,而源IP部分填入网关IP,目的地址填入B的MAC、IP,然后将这个包发送给B,而B接收到这个伪造的ARP REPLY包后,由于源IP为网关IP,于是在它的ARP缓存表里刷新了一项,将(网关IP,网关MAC)刷新成(网关IP,A的MAC)。而B要访问外部的网都需要经过网关,这时候这些要经过网关的包就通通流到A的机器上来了。

  接着,再伪造一个ARP REPLY包,数据链路层头及ARP内容部分的源MAC地址填入A的MAC地址,而源IP部分填入B的IP,目的地址填入网关MAC、IP,然后将这个包发给网关,网关接收到这个伪造的ARP REPLY包后,由于源IP为B的IP,于是在它的ARP缓存表里刷新了一项,将(B的IP,B的MAC)刷新成(B的IP,A的MAC)。这时候外部传给B的数据包经过网关时,就通通转发给A。

  这样还只是拦截了B的数据包而已,B并不能上网——解决方法是将接收到的包,除了目的地址部分稍做修改,其它原封不动的再转发出去,这样就达到了监听的目的——在B不知不觉中浏览了B所有的对外数据包。

  ARP数据包解析

  单元:Byte

  图4

  2.用JPCAP实现监听

  就如上面说的,为了实现监听,我们必须做四件事:

  A.发送ARP包修改B的ARP缓存表;

  B.发送ARP包修改路由ARP缓存表;

  C.转发B发过来的数据包;

  D.转发路由发过来的数据包;

  下面我们给个小小的例子说明怎样实现。

  我们假定运行这个程序的机器A只有一个网卡,只接一个网络,所在局域网为Ethernet,并且假定已经通过某种方式获得B和网关的MAC地址(例如ARP解析获得)。我们修改了B和网关的ARP表,并对他们的包进行了转发。

  图5

  注意:这个例子只是为了说明问题,并没有考虑到程序的健壮性,所以并不一定能在任何一台机器任何一个系统上运行。

分享到:
评论

相关推荐

    Java学习:JPCAP——Java中的数据链路层控制[参照].pdf

    Java学习:JPCAP——Java中的数据链路层控制[参照].pdf

    jpcap java抓包必需jar包

    jpcap并非直接实现数据链路层的控制,而是依赖于操作系统底层的抓包库,如Windows上的winpcap和Unix/Linux上的libpcap,通过这些库来获取网络数据包,然后提供给Java程序员一个统一的API。 **jpcap的关键特性** 1....

    Jpcap_Filter.rar_java 数据包_jpcap_jpcap java_包过滤

    本篇文章将详细探讨`Jpcap`库及其在Java中的应用,特别是如何实现数据链路层的包过滤。 首先,我们要理解`Jpcap`是什么。`Jpcap`是Java Packet Capture的简称,它为Java开发者提供了一个强大的工具,能够访问和操作...

    java jpcap小程序

    Jpcap库提供了各种数据链路层(如Ethernet)、网络层(如IP)和传输层(如TCP、UDP)的包解析器。解析后的包信息可以用于分析流量模式、识别异常行为或者进行其他高级分析。 5. **事件驱动编程**:Jpcap支持事件...

    java抓包工具jpcap

    jpcap主要关注网络层和数据链路层,其中网络层处理IP协议,数据链路层涉及以太网、令牌环等协议。通过jpcap,开发者可以获取到网络封包中的源/目标IP地址、端口号、协议类型、数据载荷等信息,进行流量分析、故障...

    java arp jpcap

    ARP(地址解析协议)是TCP/IP协议栈中的一个底层协议,它的主要功能是将网络层的IP地址转换为数据链路层的物理MAC地址。在局域网中,当一个设备想要向另一个设备发送数据时,如果只知道对方的IP地址,就需要通过ARP...

    jpcap文档java

    Jpcap包是一个开源是类库,用于Java应用程序对网络数据包catch ,analyse,deal with .包括网络层以下的数据包.J2SE的java.net包是没有处理底层数据包,比如数据链路层.所以想处理底层的数据据包,就得靠Jpcap 了.

    jpcap相关文件(X64).zip

    JAVA语言虽然在TCP/UDP传输方面给予了良好的定义,但对于...JPCAP实际上并非一个真正去实现对数据链路层的控制,而是一个中间件,JPCAP调用wincap/libpcap,而给JAVA语言提供一个公共的接口,从而实现了平台无关性。

    java抓取数据包源代码Jpcap

    Java抓取数据包源代码Jpcap是一种在Java平台上实现的数据包捕获和分析的工具。Jpcap库为开发者提供了强大的功能,可以用来获取网络层的数据包信息,包括IP、TCP、UDP、ICMP等协议的数据包。它是Java版的libpcap库,...

    神州数码认证客户端java版本 基于libpcap jpcap 基于吉首大学校园网认证.rar

    本学期学习了《计算机网络》专业课程,老师布置了课程设计大作业,作业...jpcap简单来说就是对于winpcap一层封装 作为一个中间件,调用winpcap,提供一个接口,使Java实现对数据链路层的控制; 这样现实了平台的无关性;

    jpcap(1).html

    jPCAP在JAVA中,并非一个真正去实现对数据链路层的控制,而是一个中间件,JPCAP调用winpcap/libpcap,给JAVA语言提供一个公共的接口,从而实现了平台无关性。 ​​JPCAP的整个结构大体上跟wincap/libpcap是很相像的...

    jpcap压缩包

    Jpcap实际上并非一个真正去实现对数据链路层的控制,而是一个中间件,JPCAP调用wincap/libpcap,而给JAVA语言提供一个公共的接口,从而实现了平台无关性。Java的.net包中,给出了传输层协议 TCP和UDP有关的API,用户...

    Java语言实现抓包

    在这个项目中,我们使用了Jpcap库,这是一个Java接口,用于访问和处理网络接口上的原始数据包。Jpcap库提供了一系列API,使得开发者能够在Java环境中进行网络封包的捕获和分析。 首先,我们要理解什么是数据包抓取...

    jpcap资源下载

    它并非一个直接实现数据链路层控制的框架,而是作为一个中间层,调用了操作系统底层的封包捕获库,如Windows上的winpcap和Unix/Linux上的libpcap。通过这种方式,jPCAP为JAVA开发者提供了跨平台的网络封包操作能力。...

    jpcap例子

    在实际应用中,jpcap可以与其他Java库结合使用,比如与数据分析库(如Apache Spark)结合,进行大规模的网络日志分析;或者与机器学习库(如TensorFlow)结合,构建预测模型来识别网络攻击行为。同时,由于jpcap是跨...

    Jpcap

    1. **以太网(Ethernet)**:这是一种广泛使用的局域网(LAN)通信标准,定义了物理层和数据链路层的MAC子层。Jpcap能够解析和构建以太网帧,包括VLAN(虚拟局域网)信息。 2. **IPv4和IPv6**: 这是互联网协议的两个...

    mgodave-Jpcap-06eb305.rar

    jPCAP的设计目标是弥补Java语言在数据链路层操作上的不足,因为它并不直接实现对这一层的控制。而是作为一个中间件,将libpcap的功能封装成Java友好的API,使得开发者可以在不关心操作系统细节的情况下,方便地进行...

Global site tag (gtag.js) - Google Analytics