`
wankunde
  • 浏览: 158545 次
  • 性别: 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_Filter.rar_java 数据包_jpcap_jpcap java_包过滤

    JAVA JPCAP 实现数据链路层过滤数据包

    jpcap java抓包必需jar包

    jPCAP在JAVA中,并非一个真正去实现对数据链路层的控制,而是一个中间件,JPCAP调用winpcap/libpcap,给 JAVA语言提供一个公共的接口,从而实现了平台无关性。

    jpcap文档java

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

    jpcap相关文件(X64).zip

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

    Jpcap_0.7支持windows与linux

    jPCAP在JAVA中,并非一个真正去实现对数据链路层的控制,而是一个中间件,JPCAP调用winpcap/libpcap,给 JAVA语言提供一个公共的接口,从而实现了平台无关性。 其中包含了jpcap.dll与libjpcap.so文件

    神州数码认证客户端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,用户...

    jpcap资源下载

    jPCAP在JAVA中,并非一个真正去实现对数据链路层的控制,而是一个中间件,JPCAP调用winpcap/libpcap,给 JAVA语言提供一个公共的接口,从而实现了平台无关性

    mgodave-Jpcap-06eb305.rar

    jPCAP在JAVA中,并非一个真正去实现对数据链路层的控制,而是一个中间件,JPCAP调用winpcap/libpcap,给 JAVA语言提供一个公共的接口,从而实现了平台无关性。

    jpcap for win & linux

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

    jpcap.jar+Jpcap.dll

    jpcap.jar+Jpcap.dll java版,能够抓取经过数据链路层的数据包,对抓取到的数据包进行一定程序的解析,可自己写IP数据包直接发送给数据链路层……

    jpcap_api.rar_jpcap 0.7 api_jpcap Packet api_jpcap a_jpcap api d

    JAVA数据链路层 所需 JPCAP API

    jPcap的ip抓包

    JPCAP实际上并非一个真正去实现对数据链路层的控制,而是一个中间件,JPCAP调用Winpcap/Libpcap,给JAVA语言提供一个公共的接口,从而实现了平台无关性,并能够捕获、发送网络数据包

    jpcap-doc-shendi.CHM

    JPCAP的API文档,JPCAP使得Java可以进行数据链路层操作,比如编写ping程序,自定义协议等,跨平台

    Java语言实现抓包

    本程序可以抓取ip,arp,tcp,udp,icmp协议的包,同时可以检测上网网速,上网流量,抓包数等等

    java jpcap 获取网卡的地址,数据源地址,捕获包,分析包

    NULL 博文链接:https://houyajie.iteye.com/blog/2434126

    jpca.doc介绍文档

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

    JAVA上百实例源码以及开源项目源代码

     Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。  设定字符串为“张三,你好,我是李四”  产生张三的密钥对(keyPairZhang)  张三生成公钥(publicKeyZhang...

Global site tag (gtag.js) - Google Analytics