1.jpcap
说明与安装
JAVA
语言虽然在TCP/UDP
传输方面给予了良好的定义,但对于网络层以下的控制,却是无能为力的。JPCAP
扩展包弥补了这一点,jPcap
是一个可以让java
工作在链路层的类库;当然,它底层还是使用了本机API
通过Jini
调用,在javaAPI
中得到数据。
JPCAP
实际上并非一个真正去实现对数据链路层的控制,而是一个中间件,JPCAP
调用wincap/libpcap
,而给JAVA
语言提供一个公共的接口,从而实现了平台无关性。在官方网站上声明,JPCAP
支持FreeBSD 3.x, Linux RedHat 6.1, Fedora Core 4, Solaris, and Microsoft Windows 2000/XP
等系统。
jPcap
下载地址:http://netresearch.ics.uci.edu/kfujii/jpcap/doc/index.html
;
你可以从jpcap
网站上直接下载它的桌面应用程序进行测试,可以全面的统计本机的网络数据流量及收发包数据。
Jpcap is a Java class package that allows Java applications to capture and/or send packets to the network.
Jpcap is based on
libpcap
/
winpcap
and Raw Socket API. Therefore, Jpcap is supposed to work on any OS on which
libpcap
/
winpcap
has been implemented. Currently, Jpcap has been tested on FreeBSD 3.x,
Linux RedHat 6.1, Fedora Core 4, Solaris, and Microsoft Windows 2000/XP.
Jpcap
supports the following types of packets: Ethernet, IPv4, IPv6,
ARP/RARP, TCP, UDP, and ICMPv4. Other types of packets are captured as
raw packets (i.e., instances of the Packet class) which contains the
whole data of the packets. This allows Java applications to analyze
unsupported packet types.
|
本项目中使用的是jPcap0.6
版本,从其网站上下载
Source build
后,可以看到其下详细的目录结构,源码,例程及Native lib。
使用jPcap
可以编写出功能完备的网络嗅测程序,本节中,我们只是使用其非常简单的一个功能:统计本机每块网卡上收发数据的总量。
特别注意:jpcap
运行时依赖winCap
的类库,使用前必须在机地安装winCap(http://www.winpcap.org/
)(
如果是在liunx
上,则请到http://www.tcpdump.org/
下载)
。本节中jPcap
版本为0.6
,winCap
版本为4.0
,运行与win32
系统上。
2.jPcap
小试:显示本机网络接口详情
jPcap
中的API
非常简单,可查看其在线文档:http://netresearch.ics.uci.edu/kfujii/jpcap/doc/javadoc/index.html
。当然,要灵活的使用,你必须有良好的tcp/ip
协议知识基础,对常用的3
个关键类,简介如下:
JpcapCaptor
类
这个类是jPcap
中的核心对象,一个JpcapCaptor
对象代表了了系统中的一个网络接口卡;通过对JpcapCaptor
对象的调用,实现网络数据包的抓取和发送。
它供了一系列静态方法调用如:获取网卡列表,获取某个网卡上的JpcapCaptor
对象。
|
static
NetworkInterface[]getDeviceList
()
|
这个静态方法调用,可以返回机器上网络接口卡对象的数组,数组中每一个NetworkInterface
元素对象代表一个网络接口;一般使用jPcap
所要做的第一步调用就是这个方法。
|
static
JpcapCaptor
openDevice
(NetworkInterface interface, int snaplen, boolean promisc, int to_ms)
|
取得在指定网卡上的Jpcapcator
对象,
Interface
:上所返回的某个网卡对象
Snaplen
:一次性要抓取数据包的最大长度。
Promisc
:设置是否混杂模式。处于混杂模式将接收所有数据包,如果设置为混杂模式后调用了包过滤函数setFilter()
将不起任何作用;
To_ms
:这个参数主要用于processPacket()
方法,指定超时的时间;
|
int loopPacket
(int count, PacketReceiver handler)
|
常用的一种模式是,通过getDeviceList
()
取得所有网络接口,再通过openDevice
方法取得每个网络接口上的JpcapCaptor
对象,就可通过这个方法抓包了。
loopPacket
方法中count
参数表示要抓的包的数目,如果设备为-1
,责表示永远抓下去---
方法不会返回;
第二个参数必须是实现了PacketReceiver
接口的一个对象,抓到的包将调用这个PacketReceiver
对象中的receivePacket(Packet packet)
方法处理;所以抓包前,我们必须写一个实现了PacketReceiver
接口的类。
特别注意的是:这个方法的调用会阻塞等待,如果没有抓到指定count
的包、或count
设为-1
,这个方法都不会返回。所以,聪明的你肯定想到了,如果要抓取机器上多个卡口上的包,这个方法必须放在一个独立的线程中。
|
void breakLoop
()
|
即上JpcapCaptor
对象上阻塞等待的方法强制终止。当调用processPacket()
和loopPacket()
后,再调用这个方法可以强制让processPacket()
和loopPacket()
停止。
|
interface PacketReceiver
:
数据包处理器接口定义,要处理收到的数据包,必须编写这个接口的实现类,在JpcapCaptor
对象的loopPacket
方法中调用.
这个接口中仅有一个方法定义:
|
Void
receivePacket
(Packet p)
|
实现类中处理接收到的Packet
对象的方法。每个Packet
对象代表从热指定网络接口上抓取到的数据包。
|
NetworkInterface
类
该类的每一个实例代表一个网络设备,一般就是网卡。这个类只有一些数据成员,除了继承自java.lang.Object
的基本方法以外,没有定义其它方法。(
但我还不知它与jdk5.0
以上的API
中的
java.net.InterfaceAddress
类是否可以互换
)
。
|
NetworkInterfaceAddress[]
addresses
|
这个接口的网络地址。设定为数组应该是考虑到有些设备同时连接多条线路,例如路由器。但我们的
PC
机的网卡一般只有一条线路,所以我们一般取
addresses[0]
就够了。
|
java.lang.String
datalink_description
.
|
数据链路层的描述。描述所在的局域网是什么网。例如,以太网(
Ethernet
)、无线
LAN
网(
wireless LAN
)、令牌环网
(token ring)
等等。
|
java.lang.String
datalink_name
|
datalink_name
该网络设备所对应数据链路层的名称。具体来说,例如
Ethernet10M
、
100M
、
1000M
等等。
|
java.lang.String
description
|
网卡是
XXXX
牌子
XXXX
型号之类的描述。例如我的网卡描述:
Realtek RTL8169/8110 Family Gigabit Ethernet NIC
|
b
oolean
Loopback
|
标志这个设备是否
loopback
设备。
|
byte[]mac_address
|
网卡的
MAC
地址,
6
个字节。
|
java.lang.String
Name
|
这个设备的名称。例如我的网卡名称:
\Device\NPF_{3CE5FDA5-E15D-4F87-B217-255BCB351CD5}
|
jPcap
的API
使用很简单,如下代码示例:显示机器上的所有网络接口
DispalyNetInterface
.java
:
import jpcap.JpcapCaptor;
import jpcap.NetworkInterface;
import jpcap.PacketReceiver;
import jpcap.packet.Packet;
/**
* 使用jpcap显示网络接口数据.
* @author 胡东峰
*/
public class DispalyNetInterface {
public static void main(String args[]){
try{
//获取本机上的网络接口对象数组
final NetworkInterface[] devices = JpcapCaptor.getDeviceList();
for(int i=0;i<devices.length;i++){
NetworkInterface nc=devices[i];
//一块卡上可能有多个地址:
String address="";
for(int t=0;t<nc.addresses.length;t++){
address+="|addresses["+t+"]: "+nc.addresses[t].address.toString();
}
//打印说明:
System.out.println("第"+i+"个接口:"+"|name: "+nc.name
+"|loopback: "+nc.loopback+"\r\naddress: "+address);
}
}catch(Exception ef){
ef.printStackTrace();
System.out.println("显示网络接口数据失败: "+ef);
}
}
}
不幸的是,这段代码运行时会报如下错误:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no jpcap in java.library.path
at java.lang.ClassLoader.loadLibrary(
ClassLoader.java:1682
)
at java.lang.Runtime.loadLibrary0(
Runtime.java:823
)
at java.lang.System.loadLibrary(
System.java:1030
)
at jpcap.JpcapCaptor.<clinit>(
JpcapCaptor.java:250
)
at cn.netjava.cewolf.DispalyNetInterface.main(
DispalyNetInterface.java:19
)
|
还记得我们介绍jPcap: “
它底层还是使用了本机API
通过Jini
调用,在javaAPI
中得到数据”
,这是因为当前cp
中少了jpcap
要调用的本地dll
库。将jpacp
下载后lib
下面的jpcap.dll
复制到当前项目目录下,如果你仅得制了jpcap.dll
,操作系统没有安装wincap(http://www.winpcap.org/install/default.htm
)
,则会看到如下错误提示:
Exception in thread "main" java.lang.UnsatisfiedLinkError: E:\workspace\trafficManager\jpcap.dll: Can't find dependent libraries
at java.lang.ClassLoader$NativeLibrary.load(
Native Method
)
at java.lang.ClassLoader.loadLibrary0(
ClassLoader.java:1751
)
at java.lang.ClassLoader.loadLibrary(
ClassLoader.java:1676
)
at java.lang.Runtime.loadLibrary0(
Runtime.java:823
)
at java.lang.System.loadLibrary(
System.java:1030
)
at jpcap.JpcapCaptor.<clinit>(
JpcapCaptor.java:250
)
at cn.netjava.cewolf.DispalyNetInterface.main(
DispalyNetInterface.java:17
)
|
配置完好后,再次运行,输出结果正常:
第
0
个接口
:|name: \Device\NPF_GenericDialupAdapter|loopback: false
address:
第
1
个接口
:|name: \Device\NPF_{2A5FD532-45A3-4A2B-9B68-F34C14E4FD2C}|loopback: false
address: |addresses[0]: /220.192.159.105
第
2
个接口
:|name: \Device\NPF_{14303C1A-4DB3-4BC9-979E-34063E070CBB}|loopback: false
address: |addresses[0]: /192.168.1.44
|
在我的机器上,开着一块局网网卡和一块无线网卡,都显示出来了;上面的”
第0
个接口”
就是指本机的127.0.0.1
的回环地址。但不知为什么,loopback
也会是false
?
分享到:
相关推荐
**Jpcap安装包及详细安装说明文档** **一、Jpcap简介** Jpcap是Java平台上的一个网络封包捕获库,它允许开发者在Java程序中进行网络数据包的捕获、分析和发送。Jpcap提供了一套API,能够方便地访问网络接口,读取...
**安装Jpcap详解** Jpcap是一款强大的网络数据包捕获库,它为Java开发者提供了接口,使得在Java环境中捕获和分析网络流量成为可能。这篇文章将详细讲解如何在Windows环境下,特别是在Win7专业版上,安装并配置Jpcap...
"Jpcap包的安装与配置" Jpcap包是Java开发中的一个重要工具,它提供了对网络数据包的捕获和处理功能。为了能够正确地安装和配置Jpcap包,需要遵循以下步骤: 首先,需要下载并安装JDK和winpcap。JDK是Java开发环境...
《Jpcap:Java网络封包捕获库的深度解析》 Jpcap,全称为Java Packet Capture,是一个用于网络封包分析的开源库,专为Java编程语言设计。其核心功能是允许开发者在Java环境中捕获、过滤、分析以及回放网络数据包。...
2. 安装完成后,你需要将jpcap.dll复制到系统目录,如C:\Windows\System32,这样系统就能找到并加载这个动态链接库。 3. 接着,将jpcap.jar添加到你的Java项目类路径中,以便在Java代码中可以导入并使用jpcap的相关...
### Jpcap包的安装与配置详解 #### 一、Jpcap简介及应用场景 Jpcap是一款基于Java的应用程序接口(API),它主要用于捕获网络数据包。通过使用Jpcap,开发者可以在Java环境中实现对网络流量的监听、分析等功能。这...
值得注意的是,在使用jpcap之前,需要先安装WinPcap或Npcap,它们是Windows系统下的数据包捕获驱动,为jpcap提供底层支持。 jpcap的核心功能主要包括: 1. **数据包捕获**:jpcap能实时捕获网络中的数据包,包括...
安装jpcap报错:Exception in thread "main" java.lang.UnsatisfiedLinkError: C:/Windows/System32/Jpcap.dll: Can't find dependent libraries 解决办法。
标题 "64位jpcap.jar及对应jpcap.dll下载" 暗示了这是一个针对64位操作系统的Java库,主要用于网络数据包捕获和分析。jpcap是一个开源项目,它提供了Java接口来处理网络接口卡(NIC)的数据包捕获,类似于著名的...
1. **安装与配置**: 学习如何将jpcap.jar添加到项目类路径,以及如何在开发环境中设置必要的权限。 2. **API详解**: 文档会列出所有可用的类和方法,如`JpcapCaptor`用于捕获数据包,`JpcapSender`用于发送数据包,...
《深入解析Jpcap库:基于jpcap-1.0.jar的网络数据包捕获与分析》 在计算机网络领域,数据包捕获和分析是至关重要的环节,它可以帮助我们深入了解网络通信的过程,排查故障,甚至进行网络安全研究。本文将详细探讨...
《Jpcap:Java平台上的数据包捕获与分析库》 Jpcap是一个专为Java平台设计的数据包捕获和分析库,它允许开发者在Java应用程序中实现网络监控和数据包处理功能。这个库的核心组件包括两个主要部分:`jpcap.jar`和`...
**Jpcap.dll和jpcap.jar是Java网络包捕获库Jpcap的重要组成部分**。Jpcap是一个开源的Java库,它为Java程序员提供了网络数据包的捕获和分析功能,类似于知名的libpcap(在Unix系统上)和WinPcap(在Windows系统上)...
Jpcap的安装过程相对简单,通过提供的`JpcapSetup-0.7.exe`执行文件,用户可以方便地在Windows系统上完成安装。 Jpcap支持的主要协议包括: 1. **以太网(Ethernet)**:这是一种广泛使用的局域网(LAN)通信标准,...
在压缩包子文件的文件名称列表中,"jpcap_32_64"可能包含的是32位和64位版本的Jpcap库的打包文件,用户可以根据自己的操作系统选择合适的版本进行安装和使用。 总的来说,Jpcap是一个强大的网络数据包捕获工具,它...
2. 将"lib\jpcap.jar"复制到"[JRE directory]\lib\ext",如果安装了SDK,同样需要复制到"[SDK directory]\jre\lib\ext",[SDK directory]代表SDK的默认安装路径。 3. 使用JBuilder8时,需通过"Tools/Configure JDKs/...
需要注意的是,安装完成后,开发环境应确保使用与jpcap和WinPcap版本兼容的JRE或JDK,以避免运行时出现错误。 在提供的压缩包中,"Jpcap 网络抓包工具 - - ITeye技术网站.htm"和"Jpcap 网络抓包工具 - - ITeye技术...
2. **驱动安装**:Jpcap通常需要安装特定的驱动程序,以便与网络适配器进行交互。在使用前,请按照开发包提供的指南正确安装这些驱动。 3. **开发环境配置**:在Java项目中导入Jpcap库,通常通过Maven或Gradle的...
《jpcap.jar和jpcap.dll:Java网络封包捕获库的解析与应用》 在计算机网络中,封包捕获(Packet Capture)是一项关键的技术,它允许开发者或网络管理员监控网络流量,分析数据传输,排查网络问题。本文将深入探讨...