当前位置:文档之家› 网络抓包实验

网络抓包实验

《网络信息与安全》
实验名称:
网络流量分析和监测程序的实现。

指导老师:
张兰萍
设计学生:许欣学号:07202123
班级:07行知网络
日期:2010.11.30
实验要求:
学会利用编程工具进行网络数据包的捕获并析出报文信息。

结出所实现程序的功能结构图:
给出程序设计的思想:
网络层上有各种各样的数据包,它们以不同的帧格式在网络层上进行传输,但是在传输时它们都遵循相同的格式,即有相同的长度,如果一种协议的帧格式达不到这种长度,就让其补齐,以达到我们的要求。

我的这个网络抓包程序是图形化操作界面,在菜单栏点击抓包按钮后选择网卡和过滤字还有最长字长,点击开始,然后就可以开始抓包了,在主界面中就会显示出一行又一行的数据,这些数据就是抓获到的数据包。

捕获Java程序中的网络包,是需要一些辅助工具,因为核心Java API不能访问底层的网络数据。

Jpcap是一种提供在Windows或UNIX系统上进行这种访问的Java API。

在程序设计之初就下载
了该包。

Jpcap使用一个事件模型来处理包,首先创建一个执行接口jpcap.JpcapHandler的类。

为了捕获包,需要告诉Jpcap你想用哪个网络设备来监听。

API 提供了jpcap.Jpcap.getDeviceList()方法以满足这一目的。

这个方法返回一列字符串。

选择一个设备之后,通过Jpcap.openDevice()方法打开它。

openDevice()方法需要四个参数:即将打开的设备名,从设备上一次读取的最大字节数,说明是否将设备设为混杂模式的Boolean值,和以后调用processPacket()方法要使用到的超时值。

如果调用processPacket(),那么Jpcap将一直捕获包,直到超过openDevice中规定的时限或达到了规定的最大包数。

loopPacket()则将一直捕获包,直到达到最大包数,如果没有最大数限制,它将永远运行下去。

关键程序说明:
抓包程序package netcap;
import java.io.File;
import java.util.Vector;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import jpcap.JpcapCaptor;
import jpcap.PacketReceiver;
import jpcap.JpcapWriter;
import jpcap.packet.Packet;
public class Netcaptor {
JpcapCaptor jpcap = null;
JFrameMain frame;
public void setJFrame(JFrameMain frame){
this.frame=frame;
}
public void capturePacketsFromDevice() {
if(jpcap!=null)
jpcap.close();
jpcap = Jcapturedialog.getJpcap(frame);
if (jpcap != null) {
startCaptureThread();
}
}
private Thread captureThread;
private void startCaptureThread(){
if(captureThread != null)
return;
captureThread = new Thread(new Runnable(){
public void run(){
while(captureThread != null){
jpcap.processPacket(1, handler);
}
}
});
captureThread.setPriority(Thread.MIN_PRIORITY);
captureThread.start();
}
void stopcaptureThread(){
captureThread = null;
}
public void stopCapture(){
System.out.println(2);
stopcaptureThread();
}
private PacketReceiver handler=new PacketReceiver(){
public void receivePacket(Packet packet) {
//System.out.println(packet);
frame.dealPacket(packet);
}
};
}
定义一个抓包对象JpcapCaptor jpcap = null;但点击开始时调用private void startCaptureThread()方法开始抓包,jpcap.processPacket(1, handler);语句能够反复调用handler所指向的方法,这个方法中定义的packet就是网络上抓到的数据包,经过frame.dealPacket(packet);就可以显示在主界面上。

给出实验验证结果:
基本实现JA V A程序数据包流量的时间变化,程序结构清晰,运行结果正确,输出用较为直观的统计图表示出来。

基本达到试验设计目的。

实验总结:
经过长期的不断尝试,终于完成了数据包的抓捕实验。


程比较艰辛,在把数据包进行抓捕析出阶段更是本次实验的难点,查阅了很多资料在同学的帮助下才共同完成了实验。

随后,为了直观的观察出数据包流量的时间变化,我们还加入了动态的统计图表对,对流量加以监视。

虽然很艰难,但是确实学到了不少知识,让我掌握了如何抓包析出,进行流量分析统计,乐在其中。

相关主题