`
夜乡晨
  • 浏览: 36409 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论
阅读更多

jpcap

http://jpcap.sourceforge.net/

http://baike.baidu.com/view/4315343.htm

 

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的基本方法以外,没有定义其它方法。   数据成员   NetworkInterfaceAddress[] java.lang.String datalink_description.数据链路层的描述。描述所在的局域网是什么网。例如,以太网 (Ethernet)、无线LAN网(wireless LAN)、令牌环网 (token ring)等等。   java.lang.String datalink_name 该网络设备所对应数据链路层的名称。具体来说,例如Ethernet10M、100M、1000M等等。   java.lang.String description网卡是XXXX牌子XXXX型号之类的描述。例如我的网卡描述:Realtek RTL8169/8110 Family Gigabit Ethernet NIC boolean Loopback标志这个设备是否loopback设备。   byte[] mac_address网卡的MAC地址,6个字节。   java.lang.String Name这个设备的名称。例如我的网卡名称:\Device\NPF_{3CE5FDA5-E15D-4F87-B217-255BCB351CD5}

2.JpcapCaptor

该类提供了一系列静态方法 实现一些基本的功能。该类一个实例代表建立了一个与指定设备的链接,可以通过该类的实例来控制设备,例如设定网卡模式、设定过滤关键字等等。   数据成员   int dropped_packets 抛弃的包的数目。   protected int ID这个数据成员 在官方文档中并没有做任何说明,查看JPCAP源代码可以发现这个ID实际上在其JNI的C代码部分传进来的,这类本身并没有做出定义,所以是供其内部使用的。实际上在对JpcapCator实例的使用中也没有办法调用此数据成员。   protected staticboolean[] instanciatedFlag同样在官方文档中没有做任何说明,估计其为供内部使用。   protected staticint MAX_NUMBER_OF_INSTANCE 同样在官方文档中没有做任何说明,估计其为供内部使用。   int received_packets收到的包的数目   方法成员   staticNetworkInterface[] getDeviceList() 返回一个网络设备列表。   staticJpcapCaptor openDevice(NetworkInterface interface, intsnaplen, booleanpromisc, intto_ms) 创建一个与指定设备的连接并返回该连接。注意,以上两个方法都是静态方法。Interface:要打开连接的设备的实例;Snaplen:这个是比较容易 搞混的一个参数。其实这个参数不是限制只能捕捉多少数据包,而是限制每一次收到一个数据包,只提取该数据包中前多少字节;Promisc:设置是否混杂模 式。处于混杂模式将接收所有数据包,若之后又调用了包过滤函数setFilter()将不起任何作用;To_ms:这个参数主要用于 processPacket()方法,指定超时的时间;   void Close()关闭调用该方法的设备的连接,相对于openDivece()打开连接。   JpcapSender getJpcapSenderInstance() 该返回一个JpcapSender实例,JpcapSender类是专门用于控制设备的发送数据包的功能的类。   Packet getPacket() 捕捉并返回一个数据包。这是JpcapCaptor实例中四种捕捉包的方法之一。   int loopPacket(intcount, PacketReceiver handler) 捕捉指定数目的数据包,并交由实现了PacketReceiver接口的类的实例处理,并返回捕捉到的数据包数目。如果count参数设为-1,那么无限 循环地捕捉数据。这个方法不受超时的影响。还记得openDivice()中的to_ms参数么?那个参数对这个方法没有影响,如果没有捕捉到指定数目数 据包,那么这个方法将一直阻塞等待。PacketReceiver中只有一个抽象方法void receive(Packet p)。   int processPacket(intcount, PacketReceiver handler) 跟loopPacket()功能一样,唯一的区别是这个方法受超时的影响,超过指定时间自动返回捕捉到数据包的数目。   int dispatchPacket(intcount, PacketReceiverhandler)跟processPacket()功能一样,区别是这个方法可以处于“non-blocking”模式工 作,在这种模式下dispatchPacket()可能立即返回,即使没有捕捉到任何数据包。   void setFilter(java.lang.String condition, boolean optimize) .condition:设定要提取的包的关键字。Optimize:这个参数在说明文档以及源代码中都没有说明,只是说这个参数如果为真,那么过滤器将处 于优化模式。   void setNonBlockingMode(booleannonblocking)如果值为“true”,那么设定为“non-blocking”模式。   void breakLoop()当调用processPacket()和loopPacket()后,再调用这个方法可以强制让processPacket()和 loopPacket()停止。

3.JpcapSender

该类专门用于控制数据包的发送。   方法成员 void close() 强制关闭这个连接。   staticJpcapSender openRawSocket()这个方法返回的JpcapSender实例发送数据包时将自动填写数据链路层头部分。   void sendPacket(Packet packet) JpcapSender最重要的功能,发送数据包。需要注意的是,如果调用这个方法的实例是由JpcapCaptor的 getJpcapSenderInstance()得到的话,需要自己设定数据链路层的头,而如果是由上面的openRawSocket()得到的话,那 么无需也不能设置,数据链路层的头部将由系统自动生成。

4.Packet

这个是所有其它数据包类(除DatalinkPacket和EthernetPacket之外)的父类。Jpcap所支持的数据包 有:ARPPacket、DatalinkPacket、EthernetPacket、ICMPPacket、IPPacket、TCPPacket、 UDPPacket。
开放分类:
JAVA网络编程
  • 大小: 153 KB
分享到:
评论

相关推荐

    Jpcap详细使用说明

    Jpcap是一个能够捕获、发送网络数据包的java类库包。这个包用到了Libpcap和原始套接字API,目前,Jpcap在FreeBSD 3.x, Linux RedHat 6.1, Solaris, and Microsoft Windows 2000/XP系统上已经做过测试,并且支持...

    Jpcap-0.7_java

    Jpcap是用于捕获和发送网络数据包的Java库。 用Jpcap,你可以开发应用程序捕获数据包从一个网络接口和可视化/分析他们在java。您还可以开发Java应用程序通过网络接口发送任意数据包。 Jpcap已在微软视窗(98/2000/...

    jpcap for win & linux

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

    jpcap分析IP数据包

    找了很长时间的jpcap知识,经过自己的努力,终于编辑了一个可用的jpcap代码。可以捕获和分析IP数据包,NETBEAN下运行通过。只要jpcap配置正确,保证可以运行。xixi代码,保证质量。谢谢大家长时间的支持!我会继续...

    jpcap相关文件(X64).zip

    JPCAP扩展包弥补了这一点,jPcap是一个可以让java工作在链路层的类库;当然,它底层还是使用了本机API通过Jini调用,在javaAPI中得到数据。JPCAP实际上并非一个真正去实现对数据链路层的控制,而是一个中间件,JPCAP...

    支持支持64位的Jpcap.dll

    支持64位的Jpcap.dll 用于在64位系统上运行jpcap抓包服务。 如果用32位的Dll,将会出现如下错误: Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\Program Files\Java\jre7\bin\Jpcap.dll: Can't ...

    JPcap_jpcap_

    Jpcap version 0.06.0

    net.sourceforge.jpcap的api

    net.sourceforge.jpcap.jar包的api net.sourceforge.jpcap.jar比一般的jpcap.jar有更多的封装类

    JPCAP包及解决安装错误办法

    安装jpcap报错:Exception in thread "main" java.lang.UnsatisfiedLinkError: C:/Windows/System32/Jpcap.dll: Can't find dependent libraries 解决办法。

    Jpcap.dll和jpcap.jar

    jpcap的Jpcap.dll和jpcap.jar。有一篇原创博文的评论说:“为什么我下载的jpcap压缩包中没有jpcap.jar呢”,故上传该资源方便其下载。哈哈哈啦啦啦

    jpcap_x64.dll+jpcap.jar

    jpcap dll 64位 jpcap jar jpcap dll 64位 jpcap jar

    jpcap.jar jpcap.dll

    java 网络通讯报文监听。。。。 jpcap.jar 和 jpcap.dll(32位动态库和64位动态库),需要安装wincap

    jpcap.jar+Jpcap.dll

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

    Jpcap 64位,完整一套包括Winpcap,Jpcap,jpcap.dll,demo.

    Jpcap 64位,完整一套包括Winpcap,Jpcap,jpcap.dll,demo.

    jpcap 32+64(jpcap.jar+Jpcap.dll)只有jar和dll

    Windows下亲测有效,使用方法,首先安装WinPcap,然后将jpcap.jar拷贝到${JAVA_HOME}/jre/lib/ext中,将Jpcap.dll拷贝到${JAVA_HOME}/jre/bin中,这样就可以在Java Project中使用jpcap了,Linux下libpcap+jpcap环境...

    jpcap使用文档及jpcap.jar

    jpcap的开发API文档以及可使用的jar包,可供开发者使用

    win10 下的 64位 jpcap开发包 jpcap64位

    jpcap64位 win10 下的 64位 jpcap开发包,可以用来发送拦截地网络数据包

    jpcap.jar jpcap.dll 32 64

    jpcap.jar jpcap.dll 32位 64位 获取网络包,支持win7 32位 64位 xp ubuntu 等系统.

    jpcap.chm jpcap帮助文档 jpcapAPI

    java利用jpcap进行数据包的捕获与分析的重要资料

    jpcap.jar包和配套的jpcap.dll

    可以用来抓取本机网络接口上网络数据包,可以分析IP/ICMP/TCP/UDP等协议包。 jpcap.dll必须放jre的bin目录

Global site tag (gtag.js) - Google Analytics