Java低层网络编程.docx

上传人:b****8 文档编号:23867054 上传时间:2023-05-21 格式:DOCX 页数:18 大小:595.58KB
下载 相关 举报
Java低层网络编程.docx_第1页
第1页 / 共18页
Java低层网络编程.docx_第2页
第2页 / 共18页
Java低层网络编程.docx_第3页
第3页 / 共18页
Java低层网络编程.docx_第4页
第4页 / 共18页
Java低层网络编程.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

Java低层网络编程.docx

《Java低层网络编程.docx》由会员分享,可在线阅读,更多相关《Java低层网络编程.docx(18页珍藏版)》请在冰豆网上搜索。

Java低层网络编程.docx

Java低层网络编程

第二章Java低层网络编程

一、JPCAP简介

众所周知,JAVA语言虽然在TCP/UDP传输方面给予了良好的定义,提供了充分的类库.但对于网络层以下的控制,却是无能为力的。

JPCAP扩展包正好弥补了这一点。

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

在官方网站上声明,JPCAP支持FreeBSD3.x,LinuxRedHat6.1,FedoraCore4,Solaris,andMicrosoftWindows2000/XP等系统。

二、JPCAP机制

JPCAP的整个结构大体上跟wincap/libpcap是很相像的,例如NetworkInterface类对应wincap的typedefstruct_ADAPTERADAPTER,getDeviceList()对应pcap_findalldevs()等等。

JPCAP有16个类,下面就其中最重要的4个类做说明。

2.1NetworkInterface

该类的每一个实例代表一个网络设备,一般就是网卡。

这个类只有一些数据成员,除了继承自java.lang.Object的基本方法以外,没有定义其它方法。

数据成员

NetworkInterfaceAddress[]

java.lang.Stringdatalink_description.

数据链路层的描述。

描述所在的局域网是什么网。

例如,以太网(Ethernet)、无线LAN网(wirelessLAN)、令牌环网(tokenring)等等。

java.lang.Stringdatalink_name

该网络设备所对应数据链路层的名称。

具体来说,例如Ethernet10M、100M、1000M等等。

java.lang.Stringdescription

网卡是XXXX牌子XXXX型号之类的描述。

例如网卡描述:

RealtekRTL8169/8110FamilyGigabitEthernetNICBooleanLoopback标志这个设备是否loopback设备。

byte[]mac_address,网卡的MAC地址,6个字节。

java.lang.StringName,这个设备的名称。

例如网卡名称:

\Device\NPF_{3CE5FDA5-E15D-4F87-B217-255BCB351CD5}

2.2JpcapCaptor

该类提供了一系列静态方法实现一些基本的功能。

该类一个实例代表建立了一个与指定设备的链接,可以通过该类的实例来控制设备,例如设定网卡模式、设定过滤关键字等等。

数据成员

intdropped_packets

抛弃的包的数目。

protectedintID

这个数据成员在官方文档中并没有做任何说明,查看JPCAP源代码可以发现这个ID实际上在其JNI的C代码部分传进来的,这类本身并没有做出定义,所以是供其内部使用的。

实际上在对JpcapCator实例的使用中也没有办法调用此数据成员。

protectedstaticboolean[]instanciatedFlag

同样在官方文档中没有做任何说明,估计其为供内部使用。

protectedstaticintMAX_NUMBER_OF_INSTANCE

同样在官方文档中没有做任何说明,估计其为供内部使用。

intreceived_packets

收到的包的数目

方法成员

staticNetworkInterface[]getDeviceList()

返回一个网络设备列表。

staticJpcapCaptoropenDevice(NetworkInterfaceinterface,intsnaplen,booleanpromisc,intto_ms)

创建一个与指定设备的连接并返回该连接。

注意,以上两个方法都是静态方法。

Interface:

要打开连接的设备的实例;

Snaplen:

这个是比较容易搞混的一个参数。

其实这个参数不是限制只能捕捉多少数据包,而是限制每一次收到一个数据包,只提取该数据包中前多少字节;

Promisc:

设置是否混杂模式。

处于混杂模式将接收所有数据包,若之后又调用了包过滤函数setFilter()将不起任何作用;

To_ms:

这个参数主要用于processPacket()方法,指定超时的时间;

voidClose()

关闭调用该方法的设备的连接,相对于openDivece()打开连接。

JpcapSendergetJpcapSenderInstance()

该返回一个JpcapSender实例,JpcapSender类是专门用于控制设备的发送数据包的功能的类。

PacketgetPacket()

捕捉并返回一个数据包。

这是JpcapCaptor实例中四种捕捉包的方法之一。

intloopPacket(intcount,PacketReceiverhandler)

捕捉指定数目的数据包,并交由实现了PacketReceiver接口的类的实例处理,并返回捕捉到的数据包数目。

如果count参数设为-1,那么无限循环地捕捉数据。

这个方法不受超时的影响。

还记得openDivice()中的to_ms参数么?

那个参数对这个方法没有影响,如果没有捕捉到指定数目数据包,那么这个方法将一直阻塞等待。

PacketReceiver中只有一个抽象方法voidreceive(Packetp)。

intprocessPacket(intcount,PacketReceiverhandler)

跟loopPacket()功能一样,唯一的区别是这个方法受超时的影响,超过指定时间自动返回捕捉到数据包的数目。

intdispatchPacket(intcount,PacketReceiverhandler)

跟processPacket()功能一样,区别是这个方法可以处于“non-blocking”模式工作,在这种模式下dispatchPacket()可能立即返回,即使没有捕捉到任何数据包。

voidsetFilter(java.lang.Stringcondition,Booleanoptimize)

condition:

设定要提取的包的关键字。

Optimize:

这个参数在说明文档以及源代码中都没有说明,只是说这个参数如果为真,那么过滤器将处于优化模式。

voidsetNonBlockingMode(Booleannonblocking)

如果值为“true”,那么设定为“non-blocking”模式。

voidbreakLoop()

当调用processPacket()和loopPacket()后,再调用这个方法可以强制让processPacket()和loopPacket()停止。

2.3JpcapSender

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

方法成员:

voidclose()

强制关闭这个连接。

staticJpcapSenderopenRawSocket()

这个方法返回的JpcapSender实例发送数据包时将自动填写数据链路层头部分。

voidsendPacket(Packetpacket)

JpcapSender最重要的功能,发送数据包。

需要注意的是,如果调用这个方法的实例是由JpcapCaptor的getJpcapSenderInstance()得到的话,需要自己设定数据链路层的头,而如果是由上面的openRawSocket()得到的话,那么无需也不能设置,数据链路层的头部将由系统自动生成。

  2.4Packet

这个是所有其它数据包类的父类。

Jpcap所支持的数据包有:

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

这个包的基本属性有:

 int

caplen

          捕获的长度

 byte[]

data

          包数据的字节数组(excludingtheheader)

 DatalinkPacket

datalink

          数据链路层头部

static Packet

EOF

         当读一个离线文件读到文件结束标志EOF时

JpcapCaptor.getPacket()返回包.

 byte[]

header

          头数据的字节数组

 int

len

          这包的长度

 long

sec

          捕获时戳(秒)

 long

usec

          捕获时戳(微秒)

实训一Jpcap运行环境的建立

一、准备工作

首先从相关网站下载三个软件:

1、jdk-6u17-windows-i586.exe

2、WinPcap_4_1_1.zip

3、JpcapSetup-0.6.exe

二、安装配置环境软件

2.1安装配置Java运行环境

运行jdk-6u17-windows-i586.exe程序,安装Java的JDK开发环境,按提示选择安装路经,如E:

\jdk1.6目录下,安装后,有下列若干子目录:

bin——java的执行文件及动态链接库;

demo——java插件;

include——C,C++的一些相关头文件;

jre——一些.DLL及.jar的文件;

lib——java库文件;

sample——一些java程序样例;

配置环境变量:

要让java程序能正确的编译与运行,必须建立或配置三个系统环境变量:

1、建立java主目录环境变量JAVA_HOME,其值为java的jdk安装路经;

如:

变量:

JAVA_HOME值:

E:

\jdk1.6

2、对系统变量path,增加第一条路经,如:

E:

\jdk1.6\bin

在这个路经下有java的执行文件及动态链接库。

增加第二条路经,如:

E:

\jdk1.6\lib

在这个路经下有java的库文件。

3、没有即建立,有则编辑系统变量CLASSPATH,指明类库的路经.

如:

变量:

CLASSPATH值:

.;E:

\jdk1.6\lib

.园点表示当前目录,这是一条路经;

E:

\jdk1.6\lib接着指明java安装路经下的lib路经.

路经之间用分号;分隔,最后路经不必有分号.

配置环境变量具体操作步骤如下:

按次序阅读图2-1,图2-2,图2-3,图2-4,图2-5,图2-6。

表达了在WindowsXP下配置操作。

图2-1右击“我的电脑”选属性图2-2选”高级”标签中的”环境变量”按扭

图2-3新建环境变量JAVA_HOME图2-4变量值为E:

\jdk1.6

图2-5新建CLASSPATH变量图2-6编辑path变量

变量值为.;E:

\jdk1.6\lib添加路径E:

\jdk1.6\bin;E:

\jdk1.6\lib

完成上述配置后,即进DOS界面。

点击”开始”→“程序”→“附件”→“命令提示符”→打开DOS界面。

输入javac回车,即显示如图2-7,表明jdk运行正常。

图2-7DOS界面

2.2安装WinPcap支撑软件

将WinPcap_4_1_1.zip解压生成WinPcap_4_1_1文件夹。

在文件夹中有WinPcap_4_1_1安装器。

双击它,即完成安装。

如图2-8。

 

图2-8WinPcap_4_1_1安装界面

 

图2-9WinPcap_4_1_1安装响导

 

图2-10WinPcap_4_1_1版本协议

 

图2-11WinPcap_4_1_1安装选项

 

图2-12WinPcap_4_1_1安装完成

 

图2-13WinPcap_4_1_1安装结果

其中rpcapd(RemotePacketCaptureDaemon)远程包捕获守护程序。

2.3安装Jpcap支撑软件

双击运行JpcapSetup-0.6.exe程序。

自动安装Jpcap。

 

图2-14Jpcap安装响导

 

图1-15Jpcap版本协议

 

 

图2-16选择Jpcap安装组件

 

图2-17Jpcap安装成功

 

 

图2-18Jpcap安装完成

安装后,有下列文件:

(1)E:

\jdk1.6\jre\lib\ext有jpcap.jar文件;

(2)E:

\jdk1.6\bin有Jpcap.dll文件。

图2-19jpcap.jar文件

图2-20

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 政史地

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1