2024年4月13日发(作者:)

组长:李天翼

组员:

网络流量监控

网络流量监控:主要实现了在局域网中,使用路由器上网,能够把整个局域网的计算机的据

包,截获然后转发,根据截获的数据包,来进行流量的监控。进一步能够实

现对流量的控制。

在java程序中要实现数据包截获,转发等操作必须了解一下JPCAP。

JPCAP:

类库介绍

1.1 Jpcap的使用

Jpcap是2003年日本开发的一套能够捕获、发送网络数据包的java类库。因为核心Java

API不能访问底层的网络数据,但Jpcap是一种提供在Windows或UNIX系统上进行这种访

问的Java API。Jpcap不是一种纯粹的Java解决方案,它依赖本地库的使用。在Windows 或

UNIX上,你必须有必要的第三方库,分别是WinPcap或libpcap。要在java中使用Jpcap

类库需要安装Jpcap的运行和开发环境。

1.2 Jpcap介绍

JpcapSender

IPv6Option

Jpcap

ICMPPacket

JpcapWriter

TCPPacket UDPPacket

Jpcap类库的基本结构如下图:

JpcapHandler

IPAddress

EthemetPacket ARPPacket IPPacket

DatalinkPacket Packet

Jpcap 类库结构

1.2.1 Packet基类及其子类

Packet这个类是所有被捕获的数据包的基类,可以提供被捕获数据包的长度,被捕获数

据包的时间标记等基本信息。

ARPPacket和IPPacket是继承Packet的子类,它们将被捕获包分成两类。ARPPacket

按照ARP数据报的内容,将其各数据段的数据取出。IPPacket则被分得更细。这两个类主

要与是与数据链路层密切相关的,其与MAC地址相关的信息在EthemetPacket类中表示出

来。EthemetPacket是从DatalinkPacket继承而来的。

IPPacket下有三个子类,分别是ICMPPacket、TCPPacket、UDPPacket。这三个类分别

表示的是被存储在IP数据报的报文中发送的ICMP、TCP、UDP报文。

1.2.2 Jpcap的主要功能

Jpcap提供了十分方便的数据包捕获方法。Jpcap使用一个事件模型来处理包。首先,

必须创建一个执行接口andler的类。

public class Jpcaphandler implements JpcapHandler {

public void handlePacket(Packet packet){

n(packet);

}

}

为了捕获包,需要让Jpcap知道要用哪个网络设备来监听。API提供了

iceList()方法以满足这一目的。这个方法返回一列字符串,可以按一下方

法如下使用它:

String[] devices = iceList();

一旦有了一个设备名称的目录,只要从其中选取一个用来监听:

String deviceName = devices[0];

选择一个设备之后,通过vice()方法打开它。openDevice()方法需要四个参数:

即将打开的设备名,从设备上一次读取的最大字节数,说明是否将设备设为混杂模式的

Boolean值,和以后调用processPacket()方法要使用到的超时值。

Jpcapjpcap = vice(deviceName, 1024, false, 10000);

openDevice()方法将一个参数返回到用以捕获的Jpcap对象。既然有了Jpcap实例,你可以调

用processPacket() 或loopPacket()开始监听了。这两种方式都带有两个参数:捕获的最大包

数可以是-1(说明没有限制);执行JpcapHandler的一个类的实例。

如果你调用processPacket(),那么Jpcap将一直捕获包,直到超过openDevice中规定的时限