Java之JPcap网络抓包与分析程序(支持多种协议分析,对初学网络者认识网络有很好帮助)【Z】
此程序是利用JPcap包,抓取通过本地网卡的数据帧,并分析各字段的程序。
这是我的一个网络课程设计,具体介绍在下面的实习报告中详细讲述,并附有源代码
不知道怎么上传文件,所以直接粘贴过来了。
?
目录
第一章??设计目的、任务与要求
1.1设计的目的------------------------------------3
1.2设计的任务与要求------------------------------3
第二章?系统分析设计 ?
2.1?系统分析--------------------------------------3
2.2?系统设计--------------------------------------8
第三章?系统实现
??3.1?实现过程--------------------------------------10
??3.2?采用技术--------------------------------------11
??3.3?结果界面--------------------------------------11
??3.4?结果分析--------------------------------------16
第四章?心得体会------------------------------------- 18
参考文献--------------------------------------------19
附录------------------------------------------------20
第一章??设计目的、任务与要求
1.1:设计的目的
????《计算机网络原理》课程是计算机科学与技术专业的重要专业课程之一。随着计算机网络技术的迅速发展和在当今信息社会中的广泛应用,给《计算机网络》课程的教学提出了新的更高的要求。
计算机网络原理课程设计的目的与任务是为了使学生在课程学习的同时,通过在一个计算机网络环境中的实际操作,巩固《计算机网络原理》课堂教学所讲授网络的基本理论、基本概念和方法技术,对现代计算机网络的基本功能有一个初步的了解。为学生今后使用计算机网络的理论和方法,开发大型、复杂的集成系统,打下一个坚实的基础。
????1.2:设计的任务与要求
????本次实验的要求在网络环境,使用编程语言实现捕获网络中的IP数据包,解析数据包的内容,将结果显示在标准输出上,并同时写入日志文件。
程序的具体要求如下:
????①:在标准输出和日志文件中写入捕获的IP包的版本、头长度、服务类型、数据包总长度、数据包标识、分段标志、分段偏移值、生存时间、上层协议类型、头校验和、源IP地址和目的IP地址等内容。
????②:可扩展分析其他协议包。
第二章?系统分析设计
2.1:系统分析
实现网络抓包的方法有很多,下面介绍四种:
????①:原始套接字
????套接字是网络应用编程接口。应用程序可以使用它进行网络通信而不需要知道底层发生的细节。有时需要自己生成一些定制的数据包或者功能并希望绕开Socket?提供的功能,原始套接字(?Raw?Socket)?满足了这样的要求。原始套接字能
够生成自己的数据报文,?包括报头和数据报本身的内容。通过原始套接字,?可以更加自如地控制Windows?下的多种协议,?而且能够对网络底层的传输机制进行控制。可以用原始套接字来发送和接收IP?层以上的原始数据包,?如ICMP,?TCP,?UDP,?而且能够对网络底层的传输机制进行控制。Raw?Socket?的作用主要有三个方面:?(?1)?接收发向本机的ICMP,?IGMP?协议包,?或者发送这些协议包;?(?2)?接收发向本机的IP?包;?(?3)?发送自定义的IP?包。
????②:LibPca?p
????可以从http:?/?/?ee.?lbl.?gov/?找到并下载LibPcap,?它是一个广泛应用的系统抓包库。LibPcap?是一种与系统无关,?采用分组捕获机制的分组捕获函数库,?用于访问数据链路层,?它在不同的平台上采用统一的编程接口,?使用LibPcap?编写的程序可自由的跨平台使用。同时LibPcap?是一个独立于系统接口的用户级的抓包库,?它为底层网络监听提供了可移植框架。它的应用包括网络统计集合、安全监听、网络调试等。
????③:WinPca?p
????可以从http:?/?/winPcap.?polito.?it?/?找到WinPcap。WinPcap是LibPcap?的Windows?版本,?它是一个基于Win32?的捕获数据包和网络分析的体系结构,?它包括一个内核级的包过滤器,?一个底层的动态链接库(?Packet.?dll)?,?一个高层并且与系统无关的库(?WPcap.?dll,?基于LibPcap0.?6.?2?版本)?。WinPcap?是集成于Windows95,?98,?ME,?NT,?2000?和XP?操作系统的设备驱动程序,?它可以从网卡捕获或者发送原始数据,?同时能够过滤并且存储数据包。开发WinPcap?这个项目的目的在于为Win32?应用程序提供访问网络底层的能力。它提供了以下四项功能:
(?1)?捕获原始数据报,?包括共享网络上各主机发送/?接收的以及相互之间交换的数据报;
(?2)?在数据报发往应用程序之前,?按照自定义的规则将某些特殊的数据报过滤掉;
(?3)?在网络上发送原始的数据报;
(?4)?收集网络通信过程中的统计信息。
????④:JP?ca?p
可以从http:?/?/?netresearch.?ics.?uci.?edu?/?kfujii?/?jpcap?/?doc?/index.?html?找到JPcap。JPcap?是一个能够捕获、发送网络数据包的Java?类库包。这个包用到了LibPcap?和原始套接字API。目前JPcap?在FreeBSD?3.?x,?Linux?RedHat?6.?1,?Solaris?和MicrosoftWindows?2000?/XP?系统上已经做过测试,?并且支持Ethernet,?IPv4,?IPv6,?ARP/RARP,?TCP,?UDP,?ICMPv4?协议。JPcap是一个Java?类集合,?它为网络数据包的捕获提供接口和系统支持。其最初版本是2000?年6?月发布的JPcap0.?01?版,?此后几经修改,?到2003?年4?月发布了最新的JPcap0.4?版。
由于本程序采用Java编程语言,所以使用第四种方法,即JPca?p来实现抓包。
现在选定了抓包工具,我们还得分析一下所获包的结构,只有弄清楚结构,才能很好的分析捕获包。
我们知道,网络软件是由多个协议层次组成的,在每一层里面都有自己的数据封装,以便实现每个层的功能。OSI参考模型中定义了7层,从低到高分别是物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。TCP/IP参考模型中定义得比较少:互联网层(网络层)、传输层、应用层、主机至网络层(空白,可以理解为跟OSI模型一致)。而且我们知道,高层协议整个协议包是封装到低层协议的数据段中的,所以整体是一个嵌套的结构,如下图所示:
数据链路帧格式如下(以太帧):
网络层协议有IP、ICMP、ARP等:
IP分为IPv4和IPv6,这里介绍IPv4
IPv4协议格式如下:
ICMP用于控制,每一种控制有独特的格式,由于格式太多,这里不介绍,详情可参考RFC792?-?Internet?Control?Message?Protocol。
ARP协议格式如下:
传输层协议有TCP、UDP:
TCP协议格式如下:
UDP协议格式如下:
基于TCP的应用层协议主要有HTTP:
HTTP协议格式如下(具体数据会不同,这里供参考):
①:HTTP请求:
GET?请求:
POST请求:
②:HTTP响应:
基于UDP的应用层协议主要有DNS:
DNS协议格式如下:
以上这些协议是本程序所能分析出来的,由于网络协议有上千种,不可能都去分析,所以其他的协议在此忽略。
既然找到抓包工具,弄清协议格式,现在就开始系统设计吧。
2.2:系统设计
环境搭建:
设计少不了的一项工作就是环境搭建,以下是环境搭建的步骤:
①:jre安装(最好是最新版本——jre6)
②:Myeclipse或者Eclipse安装
③:下载并安装winpcap(可以下载最新版本)。
④:配置Jpcap路径:这一步也是最重要的一步。具体路径为,把Jpcap文件夹下lib文件夹里的Jpcap.dll复制到"C:\Program?Files\Java\jre1.6.0_07\bin"文件夹里面(复制到你机器JRE文件夹放到bin文件夹里面就可以了,其中JRE的版本一定要与Eclipse配置的版本一致),再把Jpcap文件夹下lib文件夹里的Jpcap.jar复制到"C:\Program?Files\Java\jre1.6.0_07\lib\ext"文件夹里面(复制到你机器JRE文件夹->lib->ext放到ext文件夹里面就可以了)。
⑤:配置Eclipse的JRE环境,(一定需要),选择Window->preferences->Java->Installed?JREs,在Installed?JREs选择框中选择相应的JRE版本,点Edit,
选择Add?External?JARs…,选择你的Jpcap.jar包("C:\Program?Files\Java\jre1.6.0_07\lib\ext"文件夹里),在Finish就配置全部完成了。
????
????
????在本程序中,采用图形化界面,根据用户的相关配置进行抓包,具体过程参考下面实现过程。
第三章?系统实现
3.1:实现过程
当环境搭建好后,一起都会显得很简单了,这里说一下原理,在安装winpcap时,其实就是利用第三方编写好的程序,他们已经实现了底层和网卡的交互,数据捕获,并把数据封装好,然后对上层用户提供API,现在我们就利用他们提供的API,即JPca?p来处理他们封装好的数据。
所以在环境搭建中,必须安装winpcap和导入JPca?p库函数。
下面是获取包的几个关键步骤:
①:获得网卡接口
通过调用JPca?p库中JpcapCaptor的静态方法getDeviceList()得到网卡接口数组。
?②:获得某个网卡接口的连接
通过调用JPca?p库中JpcapCaptor的静态方法openDevice()得到某个网卡接口的连接实例。
?③:调用实例的processPacket()开始抓包。
④:将抓获的包交给实例的receivePacket()方法进行分析处理。
以上就是整个抓包过程。
当然,在上面的那些方法中,都有一些特定的参数,上面没有给出,这些参数都是用于配置抓包的,程序采用图形化界面,所以这些参数可以在界面上根据用户的选择,然后传入相应方法中,最终获得用户所需的信息。
采用图形化界面,要解决的一个问题就是界面的刷新,通常是后台程序运行,产生结果,界面中要及时显现变化,即界面内容因后台结果而变。
在这个前台(界面)和后台都要兼顾的前提下,必须使用线程来解决这个问题,界面是根据后台而变的,所以可以为界面分配较高优先级,当界面显示内容不再变化,程序才会去执行较低优先级的后台抓包程序,而当抓包结果产生时,程序马上又能调用较高优先级的前台程序显示出来。?
至此,前台和后台都能兼顾运行。
这里要说明的一点是,由于采用线程抓包,所以所抓获的包不是连续通过网卡的包,我们获得的,只是某些时刻的包。
3.2:采用技术
①:JPca?p库函数运用
②:Swing组件运用
③:线程技术运用
④:托盘技术运用(托盘图标,用于图形化界面,没有抓包方面的知识)
⑤:文件操作技术运用(分析结果保存于文件和文件打开)
3.3:结果界面???
①:开始界面(欢迎界面)
②:菜单选项
File菜单:?????????????Capture菜单:
??
Tool菜单:???Help菜单:?
??
③:网卡信息
④:配置抓包
⑤:开始抓包
⑥:保存文件(自定义后缀为?.sto)
⑦:打开以前保存的文件
点击打开后,会在界面上显示保存的结果
⑧:相关链接
Wireshake?链接(本程序就是参考此程序的)
注:要链接此程序,必须安装wireshake于本地机器上,目录为安装默认目录。
Check?network?card?factory(网卡厂商查询)链接
注:通过此链接,可跳转到国外的一个查询网站,输入前3位16进制(即前24位二进制)网卡地址查询。
⑨