嗅探器实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于JPCAP的网络嗅探器

实验报告

学号:1106840229

姓名:陆凯

一、平台和情况简述

本实验是用java实现的网络抓包程序。

操作系统环境为windows 7和8 64位。

必要软件为winpcap4.0,jpcapx64,eclipse

二、JPCAP简介

(以下来自百度百科)众所周知,JAVA语言虽然在TCP/UDP传输方面给予了良好的定义,但对于网络层以下的控制,却是无能为力的。JPCAP扩展包弥补了这一点。JPCAP实际上并非一个真正去实现对数据链路层的控制,而是一个中间件,JPCAP调用WINPCAP给JAVA语言提供一个公共的接口,从而实现了平台无关性。

三、程序整体设计

从实际操作使用的角度上来讲,整个程序由三个.JAVA文件组成,其中两个文件都可以生成Jframe框架。也就是说程序只有两个界面,一个主界面和一个选择网卡的Dialog界面。摘取三个文件中的类和方法:

1.MainProgram.java:

public class MainProgram extends JFrame implements ActionListener:(1)public static void main(String[] args) 主函数

(2)public MainProgram()

(3)private void initGUI() 界面设计

(4)public void actionPerformed(ActionEvent event) 菜单事件响应

(5)public void dealPacket(Packet packet) 包处理

(6)public String output(Packet p) 十六进制显示

2.Jcapturedialog.java

Public class Jcapturedialog extends JDialog implements ActionListener:

(1)public Jcapturedialog(JFrame frame) 构造

(2)public void actionPerformed(ActionEvent evt) 按键响应

(3)public static JpcapCaptor getJpcap(JFrame parent)

3.Jcaptor.java

public class Jcaptor:

(1)public void setJFrame(MainProgram frame)

(2)public void capturePacketsFromDevice() 抓包

(3)private void startCaptureThread() 开线程

(4)public void stopCapture() 关闭线程

从整个的抓包流程来讲,用JPCAP类中的函数(形参已省略)来表达,可以表达为:

1.通过JpcapCaptor.getDeviceList()获取网卡列表

2.通过jpcap.setFilter()设置过滤器

3.通过JpcapCaptor.openDevice()打开相应的网卡

4.在线程中采用jpcap.processPacket()来抓包

5.通过自己编写的dealPacket()针对抓得的包按照不同的协议来分析并产生表格中的数据

四、程序编写过程中的问题解决

1.JAVA.SWING的使用(界面编写)

因为是网工专业,所以在课程中接触JAVA仅仅是大二一门两个学分的专业选修课,在编写这个嗅探器之前完全不知道如何在JAVA中设计界面以及各个组件的方法。通过自学掌握了简单的组件比如JMenu、JTable、JPanel等等,算是勉强做出一个可以看的界面。

ng.NoSuchMethodError

在试验最简单功能的时候就出现了这个问题。因为看到红字就感觉怪怪的,一心想要解决,百度也没找到有用的办法,定下心来才了解到这是因为调用了JPCAP而没有将它的源代码放入,并不影响程序的运转。

3.各个协议的分析

虽然学习过TCP/IP这门课程,但是对于各个协议的了解依然停留在一个比较基本的阶段,幸好JPCAP中各个PACKET包,比如ICMPPACKET中所包含的内容足够丰富,通过ECLIPSE的提示,很方便就可以找出目的IP,MAC地址等内容。

4.十六进制显示

不管是WIRESHARK还是SNIFFER,在点击每一个抓包记录的时候都可以看到十六进制码,如何显示成类似的形式成为了一大困扰。后来通过阅读功能完善的JAVA嗅探器JDUMPER 中的源代码,找到了这一部分的转化方法,“拿来主义”略作修改,问题解决。

5.鼠标点击事件的监听

由于表格显示内容有限,十六进制的代码和数据段无法全部显示,所以想在表格下方设置一块区域来显示鼠标点击的部分。仔细阅读文档,最终通过mousePressed()解决。

五、程序界面和运行图示

运行程序后,弹出如下界面:

点击菜单中的“开始”,弹出另外一个界面:

设置成如下格式:

点击确认后可看到,已经开始抓并且过滤成仅有UDP包:

点击菜单中的“停止”,然后继续点“开始”回到设置页面,清除捕获过滤器中内容。在运行中输入cmd打开命令提示符,输入一个ping命令(为了获得ICMP包):

最后的结果如下:

六、心得与体会

这次的嗅探器实验我个人感觉不是很满意,但是过程中收获颇丰。打算走保研这条路,所以想尽可能利用好课设这类动手的机会去提高自己的写代码能力。但是确实因为种种原因,距离写出范例中优秀程序那样的水准还差得远。基础不够扎实,有一些课程比如J2EE网工专业也并没有开设,之前我也没有自学,对于JAVA 的认识仅仅停留在一门两学分的课程上。从完全不会做开始动手,JPCAP,多线程操作,十六进制形式的显示,FRAME之间的通信以及一些细节都是通过自学和网上搜索范例,还有看相关的博客,研究别人的复杂程序才做出来。总体上讲感觉学到很多,也又一次认清了差距。路漫漫其修远兮。

相关文档
最新文档