java毕业设计——基于java+Winpcap的局域网监听软件设计与实现(毕业论文+程序源码)——局域网监听软件

基于java+Winpcap的局域网监听软件设计与实现(毕业论文+程序源码)

大家好,今天给大家介绍基于java+Winpcap的局域网监听软件设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。需要下载开题报告PPT模板及论文答辩PPT模板等的小伙伴,可以进入我的博客主页查看左侧最下面栏目中的自助下载方法哦

文章目录:

1、项目简介

  1. 网络监听软件是提供给网络安全管理人员进行安全管理的工具,可以用来监视网络的状态、数据流动情况网络上传输的信息,以获取有用信息。作为黑客来说,通过网络监听可以获取其所需信息(比如密码等);对黑客活动和其他网络犯罪进行侦察、取证时,可以使用网络监听技术来获取必要的信息。因此,在目前研究和使用网络监听技术及相关工具,对于防护网络安全、打击网络犯罪具有重要的现实意义。
  2. 本局域网监听软件主要利用Winpcap和Jpcap等工具进行开发,使用Java语言在Eclipse 3.2环境下进行开发。软件主要实现了对网络上的数据进行监听,并分析出每一协议层的传输数据和协议层上主要字段的数据,然后将其显示出来,同时进行动态更新;另外,添加了一些附加功能(指定对象监听、饼状图显示、界面选择等)。经过测试与分析,说明了该软件运行稳定、可靠,具有一定的实际应用价值。

2、资源详情

项目难度:中等难度
适用场景:相关题目的毕业设计
配套论文字数:18680个字36页
包含内容:整套源码+完整毕业论文


3、关键词

局域网;网络监听;协议层;数据传输;对象监听

4、毕设简介

提示:以下为毕业论文的简略介绍,项目源码及完整毕业论文下载地址见文末。

引言
1.1 课题背景
网络监听,在网络安全上一直是一个比较敏感的话题,作为一种发展比较成熟的技术,网络监听在协助网络管理员监测网络传输数据,排除网络故障等方面具有不可替代的作用,因而一直倍受网络管理员的青睐。然而,在另一方面网络监听也给以太网安全带来了极大的隐患,许多的网络入侵往往都伴随着以太网内网络监听行为,从而造成口令失窃,敏感数据被截获等等连锁性安全事件。

随着互联网技术的迅猛发展,网络给人们带来了很多便利,但是网络在给人们带来许多便利的同时,也给人们带来了最担忧的网络安全问题。保证网络及应用系统的安全也成了人们最为关心的问题。

网络监听技术就是提供给网络安全管理人员进行管理的工具,可以用来监视网络的状态、数据流动情况以及网络上传输的信息,以获取有用的信息。作为黑客来说,通过网络监听可以获取其所需的信息(比如密码等);对黑客活动和其他网络犯罪进行侦察、取证时,可以使用网络监听技术来获取必要的信息。因此,在目前研究和使用网络监听技术及相关工具,对于防护网络安全、打击网络犯罪具有重要的现实意义。

1.2 本课题研究的意义
省略

1.3 本课题的研究方法
本毕业设计的目的主要是为了检查对以前所学知识(包括以前所学的一些关于网络技术、编程技术、网络与信息安全等知识)综合运用的能力,设计开发一个局域网监听软件。

在本系统的开发使用Eclipse 3.2开发工具,利用Java语言来编写一个具备数据包统计和分析功能的局域网监听软件。

由于核心Java API不能访问底层的网络数据,因此在使用Java编写网络监听程序时就必须借助一些工具。本设计借助Winpcap和Jpcap这两个工具来对网络底层进行访问,帮助实现网络监听程序。

1.4 本论文主要工作
本文主要介绍局域网监听软件设计与开发。在进行设计之前,必需了解一些必要的相关知识,所以本文先从基础知识开始介绍,然后一步一步地深入,最后开发出具有一定功能的网络监听软件。
本文的第二章对网络监听软件的设计有一个全面的需求分析,在写需求分析的时候,主要是对本软件的实现目标、运行环境和功能做一个具体的规划,其次对本软件的发展方向也做了一定的要求。
在第三章中,首先对网络监听的原理进行简单的介绍,了解到在网络中的数据是怎样的进行传输的、每一层的协议的作用等等。然后再就本次开发所必需的辅助工具(Winpcap和Jpcap)和它们在局域网监听软件中所起的作用,以及它们的使用方法做了一定的介绍。
具备了一定的基础知识后,在第四章中对局域网监听软件的设计做了一个整体的规划,对本次设计的进程有了一个初步的框架,然后再综合所学知识进行具体的设计。
在第五章中,开始介绍具体的设计步骤,首先将编写三个不同的包,每一个包完成的功能有所不同,但又互相联系,然后再编写主类和一些能将每个包,每个类联系起来的类,让其实现预期的效果,最终完成初步的设计。
第六章的主要工作是介绍如何测试所编写的程序是否能正常运行,确保所设计的程序能完成相关的功能,不断的对软件进行完善。测试完毕后,将所有代码进行封装打包,完成本次设计。
在本文的最后一章,主要介绍的是如何使用该软件,附带一些软件运行时的图片,对用户做一个具体的介绍。

2 需求分析
2.1 需求分析概述
需求分析是指理解用户需求,就软件功能与客户达成一致,估计软件风险和评估项目代价,最终形成开发计划的一个复杂过程。从广义上理解:需求分析包括需求的获取、分析、规格说明、变更、验证、管理的一系列需求工程。图1为需求分析的具体步骤。
在这里插入图片描述

图1 需求分析步骤
需求分析之所以重要,就因为它具有决策性,方向性,策略性的作用,在软件开发的过程中具有举足轻重的地位。在一个大型软件系统的开发中,他的作用要远远大于程序设计。

2.2本软件的需求分析
2.2.1 本软件实现的目标
虽然计算机网络给人们带来了巨大的便利,但互联网是一个面向大众的开放系统,对信息的保密和系统的安全考虑得并不完备,存在着安全隐患,网络的安全形势日趋严峻。

因此,在Internet安全隐患中扮演重要角色之一的网络监听软件受到越来越大的关注,大多数的黑客为了探测内部网上的主机并取得控制权,甚至有些黑客为了控制整个网络,从而安装特洛伊木马和后门程序,并清除记录。他们经常使用的手段是安装网络监听软件。

在黑客和违法人员进行一些非法的操作(例如,盗取用户的密码和相关信息等)时,执法人员也可以利用同样的方法对其进行侦察和取证,并对其进行相关的处置,达到保护用户的重要资料和维护用户的个人利益,并保证网络的正常运行和预防一些违法操作。

本软件的设计就是为了达到基本的维护网络安全的作用,对网络上传输的数据进行捕获,然后从中得到有用的信息,以此来判断是否是恶意的信息,并对其进行过滤等相关操作,起到保护网络安全的作用。

2.2.2 本软件的运行环境要求
省略

2.2.3 本软件的功能要求
对于这个程序,开发人员希望它达到以下几个功能:
(1)能够截取本网段中传输的数据包;
(2)运用不同TCP/IP体系层次的协议解析类,将数据包逐步分解;
(3)将分析结果显示出来(协议字段、数据内容等);
(4)对截获的数据包的数量和大小进行统计(饼状图等);
(5)对指定的IP地址进行单独监听;
(6)可以进行界面选择。

2.2.4 本软件功能的扩充
完成了以上功能,只是初步达到了现有阶段的要求,在以后的操作中,可能会遇到许多更为复杂的问题,为此,在设计软件的同时,也应该根据系统的性能来分析将来很可能会提出来的要求,这样做的目的是在设计过程中对系统将来可能的扩充和修改预做准备,以便一旦需要时能比较容易地进行一些扩充和修改。

本软件虽然能够捕获到本网段的数据,并可以对捕获的数据进行简单的分析,还可以进行指定对象的监听和将结果显示出来等功能,但在实际的运用中,用户肯定会遇到更多的问题,以下是对本软件的扩充性能的一些初步预计:
(1)自动获取本机和网关的IP和MAC地址;
(2)监视所有主机的收发邮件记录收发邮件的Email地址、日期、主题等;
(3)对捕获到的数据进一步分析,得到非法数据;
(4)可以对局域网内的计算机进行一些简单的操作。

3 理论基础与相关工具介绍
3.1 网络监听原理介绍
Ethernet协议(以太网协议)的工作方式是将要发送的数据包发往连接在一起的所有主机。在包头中包括有应该接收数据包的主机的正确地址,因为只有与数据包中目标地址一致的那台主机才能接收到数据包,但是当主机工作在监听模式下,不管数据包中的目标物理地址是什么,主机都将可以接收到。

数据包并不能在协议栈的高层直接发送出去,要发送的数据包必须从TCP/IP协议的IP层交给网络接口,也就是所说的数据链路层。网络接口不会识别IP地址的。因此,在网络接口由IP层传输过来的带有IP地址的数据包将增加了一部分以太帧的帧头的信息。在帧头中,有两个域分别为只有网络接口才能识别的源主机和目的主机的物理地址,这是一个48位的地址,这个48位的地址是与IP地址相对应的,换句话说就是一个IP地址也会对应一个物理地址。
传输数据时,包含物理地址的帧从网络接口(网卡)发送到物理的线路上,如果局域网是由一条粗缆或细缆连接而成,则数字信号在电缆上传输,能够到达线路上的每一台主机。当使用集线器时,由集线器再发向连接在集线器上的每一条线路,数字信号也能到达连接在集线器上的每一台主机。当数字信号到达一台主机的网络接口时,正常情况下,网络接口读入数据帧,进行检查,如果数据帧中携带的物理地址是自己的或者是广播地址,则将数据帧交给上层协议软件,也就是IP层软件,否则就将这个帧丢弃。对于每一个到达网络接口的数据帧,都要进行这个过程。

当连接在同一条电缆或集线器上的主机被逻辑地分为几个子网的时候,那么要是有一台主机处于监听模式,它还将可以接收到发向与自己不在同一个子网(使用了不同的掩码、IP地址和网关)的主机的数据包,在同一个物理信道上传输的所有信息都可以被接收到。
以太网上的数据帧主要涉及TCP/IP协议,针对以下几个协议的分析:IP,ARP,RARP,IPX,其中重点在于IP和 ARP协议,这两个协议是多数网络协议的基础。

在本软件的监听过程中,将监听到的数据包利用工具和所编写的方法进行逐层分析,并解析出每一层、每一协议、每一字段的数据,从中得到自己想要的信息,最后将其显示出来,并进行动态的更新。

3.2 TCP/IP的层次结构
3.2.1 OSI 与 TCP/IP体系结构的比较
OSI(Open System Interconnect)是开放式系统互联,为了解决不同体系结构的网络的互联问题,国际标准化组织ISO于1981年制定了开放系统互连参考模型(Open System Interconnection Reference Model,OSI/RM)。OSI把网络通信的工作分为7层,它们由低到高分别是物理层(Physical Layer),数据链路层(Data Link Layer),网络层(Network Layer),传输层(Transport Layer),会话层(Session Layer),表示层(Presen tation Layer)和应用层(Application Layer)。每层完成一定的功能,每层都直接为其上层提供服务,并且所有层次都互相支持。

TCP/IP协议(Transmission Control Protocol/Internet Protocol)是传输控制/网际协议,这个协议是Internet国际互联网络的基础。TCP/IP通讯协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。这4层分别为:
(1)应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等;
(2)传输层:在此层中,它提供了节点间的数据传送服务,如传输控制协议(TCP)、用户数据报协议(UDP)等,TCP和UDP给数据包加入传输数据并把它传输到下一层中,这一层负责传送数据,并且确定数据已被送达并接收;
(3)互连网络层:负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机(但不检查是否被正确接收),如网际协议(IP);
(4)网络接口层:对实际的网络媒体的管理,定义如何使用实际网络(如Ethernet、Serial Line等)来传送数据。
TCP/IP各层的描述如表1所示。

表1 TCP/IP各层描述
在这里插入图片描述

OSI模型与TCP/IP协议的区别如下:
(1)TCP/IP一开始就考虑到多种异构网的互联问题,并将网际协议IP作为TCP/IP的重要组成部分。但ISO和CCITT最初只考虑到全世界都使用一种统一的标准公用数据网将各种不同的系统互连在一起。后来,ISO认识到了网际协议IP的重要性,然而已经来不及了,只好在网络层中划分出一个子层来完成类似TCP/IP中的IP的作用;
(2)TCP/IP一开始就对面向连接服务和无连接服务并重,而OSI在开始只强调面向连接这一种服务。一直到很晚OSI才开始制定另一种无连接服务的有关标准;
(3)TCP/IP较早就有较好的网络管理功能,而OSI到后来才开始考虑这个问题。
OSI 与 TCP/IP体系结构的比较如图2所示。
在这里插入图片描述

3.2.2 TCP/IP 四层协议的表示方法举例
在这里插入图片描述

在许多文献中,也常见到TCP/IP的四层协议的表示方法。例如,在讨论两个主机通过两个网络用路由器连在一起时,可以使用如图3所示的层次关系。图3中的逻辑链路控制和物理层都简化为网络接口层。实际上,现在插在主机中的网络接口板上的硬件和软件就是实现了数据链路层和物理层这两层的功能。应当注意的是,在网络互连中起重要作用的路由器则没有应用层和运输层,其数据链路层和物理层也是在网络接口板上实现的。

3.2.3 使用TCP/IP进行通信的示意图
在TCP/IP的应用层协议使用的是客户-服务器方式。客户(Client)和服务器(Server)都是指通信中所涉及的两个应用进程。客户-服务器方式所描述的是进程之间服务和被服务的关系。当A进程需要B进程的服务时就主动呼叫B进程,在这种情况下,A是客户而B是服务器。这里最重要的特征就是:客户是服务请求方,服务器是服务提供方。
客户与服务器的通信关系一旦建立,通信就可是双向的,客户和服务器都可以发送和接收信息,如图4所示。
在这里插入图片描述

图4 客户进程和服务器进程使用TCP/IP协议进行通信

3.3 Winpcap简介
Winpcap(windows packet capture)是Windows平台下一个免费,公共的网络访问系统。开发Winpcap这个项目的目的在于为win32应用程序提供访问网络底层的能力。它提供了以下的各项功能:
(1)捕获原始数据报,包括在共享网络上各主机发送/接收的以及相互之间交换的数据报;
(2)在数据报发往应用程序之前,按照自定义的规则将某些特殊的数据报过滤掉;
(3)在网络上发送原始的数据报;
(4)收集网络通信过程中的统计信息。

Winpcap的主要功能在于独立于主机协议(如TCP/IP)而发送和接收原始数据报。也就是说,Winpcap不能阻塞、过滤或控制其他应用程序数据报的发收,它仅仅只是监听共享网络上传送的数据报。因此,它不能用于服务质量QoS调度程序或个人防火墙。目前,Winpcap开发的主要对象是Windows NT/2000/XP,这主要是因为在使用Winpcap的用户中只有一小部分使用Windows 95/98/Me,并且微软也已经放弃了对win9x的开发。其实Winpcap中的面向9x系统的概念和NT系统的非常相似,只是在某些实现上有点差异,比如说9x只支持ANSI编码,而NT系统则提倡使用Unicode编码。
省略

3.4 Jpcap简介
由于核心Java API不能直接访问网络底层,因此需要借助一种工具来为Java和网络底层提供一个桥梁。Jpcap就是一种提供在Windows或UNIX系统上进行网络底层访问的Java API。Jpcap不是一种纯粹的Java解决方案,它依赖本地库的使用。在Windows 或 UNIX上,用户必须有必要的第三方库,分别是WinPcap或libpcap。
省略

4 设计思路
4.1 设计框架图
经过对Winpcap和Jpcap的了解,知道了如何截获数据包并进行处理,现在就要编写代码,将这些步骤嵌入到一个框架中,将数据包的处理结果显示出来,根据本软件所要实现的功能,本设计所需要实现的类结构如图5所示。
在这里插入图片描述

图5 类结构
4.2 设计步骤
4.2.1 整体规划
现在对程序进行如下设计:
(1)使用Eclipse 3.2开发的基于J2SE Swing的图形用户界面程序;
(2)允许多个窗口同时运行,因此用向量来存储已创建的窗口。为了使各个窗口间的监听不相互干扰,因此为每一个监听过程都开辟一个新的线程,在线程中完成从截获数据包到分析数据包到最后将结果显示出来的全部过程。
(3)将所有截获的数据包用向量存储,当然定义了数量上限。预计监听结果的显示如下:使用JTable组件显示每条分析完后的数据包,并进行动态更的新;若选中表格中的某一条记录时,则在JTree组件中将它所具有的全部协议显示出来,父结点为协议名,子结点为协议字段名,叶子结点为字段取值,同时将数据包的内容转换为字符串显示在JTextArea组件中。

4.2.2 程序运行流程
(1)程序的开始
程序主类为JSniffer,整个程序由此类中的main()函数进入,进行初始化,出现主界面,即JDFrame类的实例,然后等待主界面中的事件响应。
(2)准备监听
当主界面中执行开始监听事件时,创建JDCaptor类实例,这个类实际上就是数据包截获器。JDCaptor类首先调用JDCaptureDialog类,这是一个选择设备对话框,在JDCaptureDialog中使用Jpcap.getDeviceList()和Jpcap.getDeviceDescription()获取设备,根据界面选择设备,然后使用openDevice函数打开设备,返回Jpcap对象给调用它的JDCaptor实体。
(3)截获数据包
JDCaptor类开启一条线程,用来进行截获数据包处理。在此线程中使用刚才得到的Jpcap对象的processPacket()函数截获数据包。
(4)分析数据包
使用Jpcap类的包处理接口JpcapHandler handlePacket()进行截获的数据包的初步处理,每截获一个数据包都放入数据包向量packets中,则packets中存放的就是一次监听过程中所监听到的所有数据包。然后将packets传递给analyzer包中的所有类,即每截获一个数据包,就用所有已经定义的协议进行分析。
(5)分析结果显示
使用JTable控件来显示截获的数据包进过分析后的信息,每分析完一条,显示一条,至于显示哪些信息,由菜单中的“协议查看”下面的选项来决定。当执行选择table中某一行的事件时,用tree控件来显示此数据包对应于各层的协议,并用textarea控件将此数据包的内容转换为字符串完整的显示。
(6)流量统计
使用向量来存储每一个协议的所有的数据包,每分析完一个数据包后,在它所包含的协议的向量中加一。然后绘制每一层协议的饼状图,饼状图动态更新。
(7)数据更新
使用Timer类的start(),setRepeats()来进行动态更新,并通过此类中的事件响应来进行更新时的操作,即提示表格更新。
(8)指定对象监听
指定对象监听就是使用JSourceDialog来得到指定监听的主机的IP地址,监听内容是源IP为指定IP的数据包,如果符合条件则处理,不符合则丢弃。这个过滤处理在分析数据包JpcapHandler handlePacket()中完成。

5 具体实现步骤
5.1使用Eclipse创建项目
省略

5.2 analyzer包的设计
5.2.1 analyzer包的作用
analyzer包的作用是根据不同协议的结构格式设计相应的数据包解析类,然后对于传送给解析类的数据包进行相应协议结构的解析,即分析出协议中各个字段的内容。

在本程序中预计对8个协议进行解析,为此需要定义8个解析类再加上一个用于返回截获数据包信息(如截获时间,大小等)的类。
协议与类的对应关系如表2所示。
表2 协议与类的对应关系
在这里插入图片描述
在这里插入图片描述

5.2.2 analyzer包中各个类的作用与实现方式
在analyzer包中,针对不同的TCP/IP层次,编写不同的分析类,每一个类中都将每一协议的重要字段都进行定义,并将进行逐步分析,得到每一字段的数据值,下面将介绍在这个包中每个类的作用和编写思路:
省略

5.3 stat包的设计
5.3.1 stat包的作用
Stat的作用是完成对所截获的数据包按照不同的协议,不同的层次进行统计,并进行动态的更新,最后将其结果显示出来。
在数据包统计中,作者将所有截获的数据包按照所属协议的层次分别进行统计,则统计类的设计与层次的分类一致,如表3所示。
表3 统计类的设计与层次对照表
在这里插入图片描述

省略

5.4 ui包的设计
省略

5.5 外部类的设计
省略

6.2 测试的步骤
本软件的测试过程按4个步骤进行,即单元测试、集成测试、确认测试和系统测试。
(1)单元测试
单元测试是紧接在编码之后的,是集中对用源代码实现的每一个程序单元进行测试,检查各个程序模块是否正确地实现了规定的功能。
单元测试任务包括:
① 模块接口测试;
② 模块局部数据结构测试;
③ 模块边界条件测试;
④ 模块中所有独立执行通路测试;
⑤ 模块的各条错误处理通路测试。
省略

(2)集成测试
集成测试是把已测试过的模块组装起来,主要对与设计相关的软件体系结构的构造进行测试。
在这一部分的测试中,作者主要是对外部的类进行测试,比如主类(JSniffer.java)、数据包截获器类(JDCaptor.java)等。在对主类进行测试中,主要就是看它是否将每一个类,每一个包联系起来,让该软件达到用户要求的功能,并且有一个友好的界面等。
(3)确认测试
确认测试则是要检查软件是否满足了所规定的各种需求,以及软件配置是否完全、正确。
在对该软件地确认测试中,作者只是简单地进行了一些操作,比如在Eclipse 3.2下运行程序,执行各种操作,检查是否满足规定的所有功能和性能,是否令用户满意。
(4)系统测试
系统测试把已经经过确认的软件纳入到实际的运行环境中,与其它系统成份组合在一起进行测试。
经过了以上一系列的测试后,已经对软件进行了大部分的测试操作,确保了软件运行效果的正确性。下面还需将软件进行打包,并将其纳入到实际的运行环境下进行测试,在此测试部分,作者首先将软件所需要的运行环境配置正确,然后启动软件,进行一系列的测试操作,确定软件的完整性、健壮性等。

6.3 测试分析
经过单元测试、集成测试、确认测试和系统测试后,已经确保了本软件在正确的环境下可以正常的运行,实现了数据包统计和分析功能的网络监听软件,它可以仅通过局域网中任意一台主机的安装,达到监控整个局域网的目的。具体功能描述如下:
(1)局域网中任意一台连网主机都可以安装,对安装的环境没有任何限制。一机安装,全网监控。
(2)当安装的主机有多个网卡时,可以选择监视其中的一个网卡。
(3)分析出本网络中所有IP地址所传输数据的字段、捕获时间、长度等。
(4)指定IP地址监听。
(5)可以使用饼状图将其结果显示出来。
(6)可以进行界面选择。
省略

7.3 执行程序步骤
省略

结 论
经过近四个多月的努力,局域网监听软件终于完成了。在整个软件的开发过程中,本人经历了对Java开发环境的熟悉、网络基本知识的进一步熟悉、Jpcap和Winpcap等相关技术的学习和研究,对本软件开发方案的选择以及网络监听软件的相关知识的学习。

本次毕业设计完成了局域网监听软件的设计与开发,主要功能是对本网段的数据进行捕获,经过一系列的分析和统计,将其结果显示出来,可以通过饼状图查看每个协议的数据量,也可以通过输入指定的IP地址进行指定对象监听操作等等。

省略

参考文献
[1] 谢希仁.计算机网络(第四版)[M].北京:电子工业出版社,2003。
[2] Anonymous[美].网络最高安全技术指南[M].北京:机械工业出版社,1998。
[3] W.Richard Stevens[美].TCP/IP详解 卷1:协议[M].北京:机械工业出版社,2000。
[4] Douglas E.Comer[美].TCP/IP网络互连技术[M].北京:清华大学出版社,1998。
[5] BRUCE ECKEL[美].Java编程思想(第2版)[M].北京:清华大学出版社,2002。
[6] 张仕斌,谭三,易勇,蒋毅.网络安全技术[M].北京:清华大学出版社,2004。
[7] 耿祥义,张跃平.Java 2实用教程(第三版)[M].北京:清华大学出版社,2006。
[8] 耿祥义.Java 课程设计[M].北京:清华大学出版社,2004。
致 谢
省略


5、资源下载

本项目源码及完整论文如下,有需要的朋友可以点击进行下载。如果链接失效可点击下方卡片扫码自助下载。

序号毕业设计全套资源(点击下载)
本项目源码基于java+Winpcap的局域网监听软件设计与实现(源码+文档)_java+Winpcap_局域网监听软件.zip
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是基于MFC+WinPcap网络嗅探器的实现步骤: 1. 创建MFC对话框应用程序。 2. 下载和安装WinPcap库,并将其添加到项目中。 3. 在对话框中添加一个列表框控件,用于显示捕获到的数据包。 4. 在对话框头文件中包含WinPcap库的头文件pcap.h,并定义一个pcap_t类型的变量用于打开网络适配器。 5. 在OnInitDialog()函数中初始化WinPcap库,并打开网络适配器。 6. 创建一个线程来捕获数据包,在线程函数中使用pcap_loop()函数来持续捕获数据包,并将捕获到的数据包添加到列表框中。 7. 在OnDestroy()函数中关闭网络适配器和WinPcap库。 以下是基于MFC+WinPcap网络嗅探器的代码示例: ```cpp #include "stdafx.h" #include "MySnifferDlg.h" #include "afxdialogex.h" #include <pcap.h> #ifdef _DEBUG #define new DEBUG_NEW #endif // CMySnifferDlg 对话框 CMySnifferDlg::CMySnifferDlg(CWnd* pParent /*=nullptr*/) : CDialogEx(IDD_MYSNIFFER_DIALOG, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CMySnifferDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_LIST_PACKETS, m_listPackets); } BEGIN_MESSAGE_MAP(CMySnifferDlg, CDialogEx) ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_WM_DESTROY() END_MESSAGE_MAP() // CMySnifferDlg 消息处理程序 BOOL CMySnifferDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != nullptr) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 // 初始化WinPcap库 char errbuf[PCAP_ERRBUF_SIZE]; pcap_t* pcapHandle = pcap_open_live("\\Device\\NPF_{E908B419-FF05-408B-B4F6-8E82FBC3D16D}", // 网络适配器名称 65536, // 数据包最大长度 1, // 混杂模式 1000, // 超时时间(毫秒) errbuf); // 错误信息缓冲区 if (pcapHandle == NULL) { AfxMessageBox(_T("打开网络适配器失败!")); return TRUE; } // 开始捕获数据包 AfxBeginThread(CaptureThreadProc, (LPVOID)pcapHandle); return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } void CMySnifferDlg::OnDestroy() { CDialogEx::OnDestroy(); // TODO: 在此处添加消息处理程序代码 // 关闭WinPcap库和网络适配器 pcap_t* pcapHandle = (pcap_t*)GetWindowLongPtr(GetSafeHwnd(), GWLP_USERDATA); pcap_close(pcapHandle); } void CMySnifferDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作区矩形中居中 int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // 绘制图标 dc.DrawIcon(x, y, m_hIcon); } else { CDialogEx::OnPaint(); } } HCURSOR CMySnifferDlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } UINT CMySnifferDlg::CaptureThreadProc(LPVOID lpParam) { pcap_t* pcapHandle = (pcap_t*)lpParam; // 定义捕获数据包时的回调函数 void packetHandler(u_char* userData, const struct pcap_pkthdr* pkthdr, const u_char* packetData) { CMySnifferDlg* pThis = (CMySnifferDlg*)userData; // 将捕获到的数据包添加到列表框中 CString strPacket; strPacket.Format(_T("Packet size: %d bytes"), pkthdr->len); pThis->m_listPackets.AddString(strPacket); } // 开始捕获数据包 pcap_loop(pcapHandle, 0, packetHandler, (u_char*)AfxGetApp()->m_pMainWnd); return 0; } ``` 注意:上述代码中的网络适配器名称需要根据实际情况修改。可以使用WinPcap提供的pcap_findalldevs()函数来获取可用的网络适配器列表。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

毕业设计方案专家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值