ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:21.90KB ,
资源ID:10245048      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10245048.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(计算机网络课程设计实验报告.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

计算机网络课程设计实验报告.docx

1、计算机网络课程设计实验报告中南大学课程设计报告课程:计算机网络课程设计 题目:基于Winpcap的网络流量统计分析指导教师:张伟第1章 总体设计 1、实体类设计 -P32、功能类设计 -P33、界面设计 -P3第2章 详细设计 1、实体类实现 -P42、功能类实现 -P43、界面实现 -P5第3章 源代码清单及说明 一、CaptureUtil.java -P7 二、MyPcapPacketHandler.java -P9 三、PacketMatch.java -P9 四、Windows.java -P13第4章 运行结果 -P19第五章 心得体会 -P21第1章 总体设计1、实体类设计TCP、

2、UPD、ICMP、ARP、广播数据包五个包的数据结构设计2、功能类设计(1)网卡获取(2)包的抓捕(3)包的处理3、界面设计(1)布局(2)按钮功能连接第2章 第二章 详细设计一、实体类实现TCP、UPD、ICMP、ARP、广播数据包五个包的数据结构设计。本程序采用Java编写,基于win10pcap。Win10pcap是winpcap在win10系统上的适用版本。Java对于winpcap使用jnetpcap进行支持。对于TCP、UPD、ICMP、ARP、广播数据包五种类型的包,在jnetpcap的jar包中大部分已经封装好了相关的实体类型。对应如下:ARP 实体类:UPD 实体类:IP 实

3、体类:TCP 实体类:UDP 实体类: 而对于其中的广播数据包,其判断我利用捕获到的IP包的目的地址进行判断,若其目的地址为,则认为其为广播数据包。2、功能类实现(1)网卡获取电脑上的包的发送与接受都得通过网卡来进行,所以为了完成局域网数据包的捕获和统计,我首先要做的是获取到电脑上的网卡列表,然后选择一个网卡进行包的捕获。而相关代码在jnetpcap的官网的示例代码1中可以找到,从中可以学习到的是jnetpcap的各种使用方法。在我电脑上可以捕获到三个网卡,一个是本机自身的物理网卡,另外两个是虚拟机模拟出的虚拟网卡。(2)包的抓捕Jnetpcap中包的抓捕也是有着固定的格式的,这在官网的示例代

4、码中也是可以找到的,只要设置好相关的参数,就可以进行抓捕具体方法如下,利用Pcap对象的loop方法。就是实例化一个Pcap对象,然后调用其loop方法。第一个参数arg0 代表循环次数,第二个参数就是传入一个PcapPaketHandler或其子类的对象,这个对象类型是要由我们自己编写的对包处理的方法。(3)包的处理在这里对捕获的包的处理我是编写了一个PcapPacketHandler的子类,然后重写了nextPacket()方法。在这个方法里我把捕获到的包当作参数传递个具体的处理方法packetMatch.handlePacket(packet)。packetMatch.handlePac

5、ket(packet)方法是由我自己编写的。handlePacket是packetMatch的一个静态方法,可以直接调用。在这个方法里面,它会把捕获到的包的包头和TCP、UPD、ICMP、ARP、广播数据包五种类型的包的包头进行一一比较,以确认是否抓到了了相对应的包。这儿还用到的就是jnetpcap的内部的一个方法,就是packet.hasHeader(arg0),通过在arg0传入已在jnetpcap里封装好的包的类型的实例,可以很好的判断该包是属于什么包类型的,是TCP、UPD、ICMP、ARP还是广播数据包。然后内部对于各种包的信息的输出也有很好的支持,可以直接使用相应的toString

6、方法,就可以输出各种相关信息。(4)网络流量统计对于各个捕获到的包,分别针对各种类型的包设计了一个Double变量用于统计其传送过来相应包头的大小,并在停止抓包后将统计的数据输出在最下方的TextArea里面。3、界面实现本程序在设计GUI时使用了Java的一个很好的插件WindowBuilder。(1)布局一开始使用Border Layout布局,安排好各个按钮位置,文本框位置。后来采用Absolute layout,并将窗口大小固定化。在布局的最上方是一个JToolBar的实例对象,其中放置有选择网卡、开始抓包、停止抓包、清空记录等四个选项,中间是两个带滚动条的多行文本框,左边的用于显示捕

7、获的包的列表,右边用于显示左边的我们选中的包的具体信息。最下方会在停止抓包按钮生效后输出总的抓包情况。(2)按钮功能连接在布局的最上方是一个JToolBar的实例对象,其中放置有选择网卡、开始抓包、停止抓包、清空记录等四个选项,其中选择网卡的功能具体由JComboBox(多文本选择框)上的选项决定,这个多文本选择框监听着 网卡获取的方法,它会从该方法获得一个网卡列表,然后将其文本输出。开始抓包的方法所对应的事件是抓包的事件,并且该抓包事件是个并发的进程。因为如果不将其设置为并发进程,其会使其它事件一直阻塞,甚至连停止抓包都做不到。停止抓包的事件其实是改变了开始抓包中的一个标志位,让其为假。该标

8、志为为真,抓包程序会一直进行,该标志为为假,抓包停止。下方两个文本框,左边的文本框监听的是开始抓包这个事件,当这个事件开始,这个事件会向文本框传输捕获到的包的列表,然后让其显示。而右边的文本框监听的是左边文本框我们选中的内容的相应事件。因为对于我们捕获到的包我进行了编号,当我们在左边的文本框选中了一个包之后,左边的文本框对应的包的序号会被右边的文本框获取,用于在一个列表中根据序号查找到相对应的包的详细内容,然后将其输出。统计功能的实现是在每个包的具体处理时,在处理包的方法类中已经有定义好几个静态变量用于计数,每个包具体处理时,将相对应的包类型数量加一即可。还定义了其它的变量用于统计流量大小,也

9、是在每个包具体处理时,将相对应的包的大小加到相对应的静态变量上即可。第3章 源代码清单及说明CaptureUtil.java/该类负责网卡列表的获取、包的捕获、抓包程序的停止package util;importimportimportimportimport entity.Windows;public class CaptureUtil extends Thread private static boolean flag=true; public static int number=2; private static StringBuilder errbuf = new StringBuil

10、der(); / 用于存储任何错误信息 /此方法用于获取设备上的网卡设施 public static ArrayList CaptureNet() CaptureUtil.flag=false; /下面有部分代码来自jnetpcap官网的实例 ArrayList alldevs = new ArrayList(); / 用于存储搜索到的网卡 /取得设备列表 int r = Pcap.findAllDevs(alldevs, errbuf); if (r = Pcap.NOT_OK | alldevs.isEmpty() JOptionPane.showMessageDialog(null,er

11、rbuf.toString(),错误,JOptionPane.ERROR_MESSAGE); return null; return alldevs; /此方法用于选取网卡并捕获包 public static void CapturePacket(ArrayList alldevs) CaptureUtil.flag=true; PcapIf device = alldevs.get(number); .getDescription();*/ /打开选中的设备 int snaplen = Pcap.DEFAULT_SNAPLEN;/ 默认长度为65535 int flags = Pcap.MO

12、DE_PROMISCUOUS; / 混杂模式,扑获所有类型的包 int timeout = 10 * 1000; / 10 seconds in millis Pcap pcap = Pcap.openLive(device.getName(), snaplen, flags, timeout, errbuf); if (pcap = null) JOptionPane.showMessageDialog(null,errbuf.toString(),错误,JOptionPane.ERROR_MESSAGE); return; PacketMatch packetMatch = PacketM

13、atch.getInstance(); MyPcapPacketHandler myhandler = new MyPcapPacketHandler(); while(CaptureUtil.flag) pcap.loop(1, myhandler, /njnetpcap); pcap.close(); public void run() CaptureUtil.CapturePacket(CaptureUtil.CaptureNet(); public static void StopCapturePacket() CaptureUtil.flag=false; public static

14、 void ClearPacket() PacketMatch.numberOfPacket=0; PacketMatch.hm.clear(); Windows.lItems.clear(); PacketMatch.numberOfArp=0; PacketMatch.numberOfTcp=0; PacketMatch.numberOfUdp=0; PacketMatch.numberOfIcmp=0; PacketMatch.numberOfWideSpread=0; MyPcapPacketHandler.java/该类是PcapPacketHandler的子类,重写了nextPac

15、ket方法package util;importimportpublic class MyPcapPacketHandler implements PcapPacketHandler Override public void nextPacket(PcapPacket packet, Object arg1) PacketMatch packetMatch = PacketMatch.getInstance(); packetMatch.handlePacket(packet); PacketMatch.java/该类是包处理package util;import entity.Windows

16、;public class PacketMatch public static HashMap hm=new HashMap(); public static int numberOfPacket=0; private static PacketMatch pm; private Icmp icmp = new Icmp(); private Tcp tcp = new Tcp(); private Udp udp = new Udp(); private Arp arp= new Arp(); private Ip4 ip4=new Ip4(); public static double t

17、otalOfIcmp=0; public static double totalOfTcp=0; public static double totalOfUdp=0; public static double totalOfArp=0; public static double totalOfSpread=0; public static double totalOfIp=0; public static int numberOfWideSpread=0; public static int numberOfUdp=0; public static int numberOfTcp=0; pub

18、lic static int numberOfIcmp=0; public static int numberOfArp=0; public static PacketMatch getInstance() if (pm = null) pm = new PacketMatch(); return pm; public void handlePacket(PcapPacket packet) /以下四个包都已可以正确捕获 PacketMatch.totalOfIp+=packet.getTotalSize()/(1024.0*1024.0); if (packet.hasHeader(icmp

19、) handleIcmp(packet); if (packet.hasHeader(arp) handleArp(packet); if (packet.hasHeader(tcp) handleTcp(packet); if (packet.hasHeader(udp) handleUdp(packet); /广播数据包的捕获 if (packet.hasHeader(ip4) handleIp4(packet); /*以下为实验IP地址的获取 packet.getHeader(ip4); byte destinations=new byte4; ip4.destinationToByte

20、Array(destinations); byte sources=new byte4; ip4.sourceToByteArray(sources); */ private void handleIp4(PcapPacket packet) packet.getHeader(ip4); /这是一个广播数据包 hm.put(numberOfPacket, 这是一个广播数据包!); numberOfWideSpread+; totalOfSpread+=ip4.getLength()/1024.0; numberOfPacket+; private void handleUdp(PcapPack

21、et packet) packet.getHeader(udp); hm.put(numberOfPacket, udp.toString(); numberOfUdp+; totalOfUdp+=udp.getLength()/1024.0; numberOfPacket+; private void handleTcp(PcapPacket packet) packet.getHeader(tcp); hm.put(numberOfPacket, tcp.toString(); numberOfTcp+; totalOfTcp+=tcp.getLength()/1024.0; number

22、OfPacket+; private void handleIcmp(PcapPacket packet) packet.getHeader(icmp); hm.put(numberOfPacket, icmp.toString(); numberOfIcmp+; totalOfIcmp+=icmp.getLength()/1024.0; numberOfPacket+; private void handleArp(PcapPacket packet) packet.getHeader(arp); hm.put(numberOfPacket, arp.toString(); numberOf

23、Arp+; totalOfArp+=arp.getLength()/1024.0; numberOfPacket+; /以下函数将Int类型转化为Ip地址 public static String intToIp(int ipInt) return new StringBuilder().append(ipInt24)&0xff).append(.).append (ipInt16)&0xff).append(.).append (ipInt8)&0xff).append(.).append (ipInt&0xff).toString(); Windows.java/该类是GUI界面设计pac

24、kage entity;import util.CaptureUtil;import util.PacketMatch;public class Windows extends JFrame private JPanel contentPane; private final Action action = new SwingAction(); private final Action action_1 = new SwingAction_1(); private final Action action_2 = new SwingAction_2(); public static Default

25、ListModel lItems=new DefaultListModel(); private JList list = new JList(lItems); private final Action action_3 = new SwingAction_3(); private JScrollPane jsp1=new JScrollPane(list); private JTextArea textArea = new JTextArea(); private JScrollPane jsp2=new JScrollPane(textArea); private JTextArea te

26、xtArea_1 = new JTextArea(); /* * Launch the application. */ public static void main(String args) EventQueue.invokeLater(new Runnable() public void run() try Windows frame = new Windows(); frame.setVisible(true); catch (Exception e) e.printStackTrace(); ); /* * Create the frame. */ public Windows() s

27、etTitle(u6293u5305); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 692, 477); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5); setContentPane(contentPane); contentPane.setLayout(null); this.setResizable(false); JToolBar toolBar = new JToolBar(); to

28、olBar.setBounds(5, 5, 666, 23); contentPane.add(toolBar); JButton button = new JButton(u9009u62E9u7F51u5361); toolBar.add(button); final JComboBox comboBox = new JComboBox(); comboBox.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) String net=(String)comboBox.getSel

29、ectedItem(); ArrayList alldevs=CaptureUtil.CaptureNet(); int i=0; for (PcapIf device : alldevs) if(net.equals(device.getDescription() CaptureUtil.number=i; CaptureUtil.StopCapturePacket(); i+; ); comboBox.addItemListener(new ItemListener() public void itemStateChanged(ItemEvent arg0) ); toolBar.add(

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

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