嗅探器实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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之间的通信以及一些细节都是通过自学和网上搜索范例,还有看相关的博客,研究别人的复杂程序才做出来。总体上讲感觉学到很多,也又一次认清了差距。路漫漫其修远兮。