网学网为需要计算机其他语言的朋友们搜集整理了关于网络数据包捕获工具的程序设计相关资料,希望对各位网友有所帮助!
客服咨询,网学网竭诚为您服务,本站永久域名:myeducs.cn |
目 录
1.1 设计方案 在多方参考的情况下打算采用Winpcap和Winsock中的一种来实现抓包等相应的功能。参考了《网络安全开发包详解》和《Windows防火墙和网络封包截获技术》这两本书后决定采用Winpcap来实现代码。Winpcap中封装了许多的功能,只需要直接调用,就像java中封装好的类一样,使用起来非常方便。 通过Microsoft Visual C++6.0 MFC来实现可视化编程,通过一个简单的界面来实现对于捕获网卡信息、本机IP地址、广播地址和子网掩码等信息的获取显示。设置开始/停止按钮来实现对于抓包函数的调用的控制。在界面上获取并显示系统当前时间,通过设置定时器每隔一秒钟触发一次获取当前系统时间来实现一个时间显示。在开始/停止按钮中添加循环判断语句,并且设置一个bool型变量来控制是否开启抓包函数的调用。如果执行抓包函数,那么将捕获到的数据包的信息保存并解析处里面的信息返回到list表中插入显示出来。如果点击停止按钮则调用pcap_close()函数来实现关闭winpcap操作。大体的一个设计思路就是这样子的,具体的各个功能实现在软件编码部分会详细讲解。 下面部分,为了方便大家形象的理解其中的一些东西,会适当的结合一些图片和代码来分类详细描述。 下面的图4是开发初期的大体界面框架。 图4 MFC控制界面 1.2 功能描述 制作的这个软件的最主要也是最核心的功能就是对于网络数据包的捕获,对于捕获到的网络数据包显示和简单的分析,分析数据包的协议类型(是TCP、UDP还是ICMP等),还有数据包的源IP、目的IP还有端口号、时间戳和包长等最后并将这些信息显示出来。实质是主要实现一个网络实时监听的功能,然后将捕捉到的数据包保存下来以便进一步的分析使用。图5中为系统初始化后加载各个模块的流程图。具体功能在后面章节中会分别详细说明。 图5 功能模块图 1.3 系统流程图 下图6是程序流程图 图6 程序流程图 根据流程图可以清楚明白的看到每一步的流程,程序是怎么样执行下去的,有助于理解程序。 2 编码实现 2.1 Winpcap环境设置 配置环境首先需要安装Winpcap,所使用的是Winpcap_3_1.exe,这个是必须安装的,它是所有基于Winpcap的应用程序运行所必须的。还有就是wpdpack.zip文件的解压了放在D:\毕业设计-KNIGHTG\WPDPACK中,它是Winpcap开发包文件,是设计基于Winpcap的应用程序的开发文件。该文件包括开发用的头文件和静态链接库文件,是开发者要用到的。解压后会有几个文件夹。其中,Include文件夹中的是Winpcap的一些头文件,编程时必须把此文件夹的路径包含到Visual C++的包含头文件的路径中;文件夹Lib中是开发程序时用刀的静态链接库,编程时此文件夹也必须包含到Visual C++库文件路径中。 VC环境下安装配置过程如下: 1、添加路径: 工具(Tools)->选择(Options)->目录(Directories)同下图图7进行设置。 图7 Winpcap环境配置1 这里添加路径要注意自己Winpcap安装时的WPCAP和Include的文件夹的位置,要不然在代码编译和连接的时候都会报:Cannot open include file: ''pcap.h'': No such file or directory。刚开始写代码的时候就吃了这方面的亏,对于这个Winpcap的环境配置不来,教程和相应的参考书籍里面写的非常的模糊,当时配置起来选项和栏目又多不知道该要填在哪儿,对于一个Winpcap的初学者来说实在时有一定的难度,后来在MSDN论坛上面求教后才明白该怎么弄,所以在论文中特别将这点加入进来。 添加路径时要注意这里不仅要添加头文件相关的路径,还要加入Libpcap的的路径。否则编译过了,连接时也会报错:cannot open file "wpcap.lib"。 图8 Winpcap环境设置2 2、设置工程参数 新建一个工程后, 工程(Project)->设置(Settings) 选择C/C++;在预处理程序定义(Preprocessor definition)里面添加 图9 Winpcap环境设置3 WPCAP即可。 同理设置link,如下图图10: 图10 Winpcap环境配置4 2.2 MFC控件相关 通过设置不同的按钮来实现不同的控制功能,还可以通过设置list表来显示信息。其中这里主要说下关于list表的问题。其他的控件都比较简单就不在这里多说了。 将list的属性中的style里查看选项改成了report格式,然后通过插入语句来实现对表项中每一列显示信息种类的设置。 //设置监听状况表项 m_list1.InsertColumn( 0, _T("协议类型"), LVCFMT_LEFT, 60); m_list1.InsertColumn( 1, _T("时间"), LVCFMT_LEFT, 70); m_list1.InsertColumn( 2, _T("包头长"), LVCFMT_LEFT, 60); m_list1.InsertColumn( 3, _T("源IP地址"), LVCFMT_LEFT, 125); m_list1.InsertColumn( 4, _T("目的IP地址"), LVCFMT_LEFT, 125); m_list1.InsertColumn( 5, _T("源端口号"), LVCFMT_LEFT, 60); m_list1.InsertColumn( 6, _T("目的端口号"), LVCFMT_LEFT, 80); 设置第一列为协议类型,然后第二到七列分别为捕获到数据包的时间戳、包头长度、源IP、目的IP、源端口号和目的端口号。 然后在抓包函数执行后得到我们需要的信息后执行和列的插入来将数据返回界面并显示出来。 row=m_list1.GetItemCount(); row=m_list1.InsertItem(row,ip_header_proto); //协议类型 m_list1.SetItemText(row,1,time1); //捕获数据包的时间戳 m_list1.SetItemText(row,2,bag_header_len); //包头长度 m_list1.SetItemText(row,3,sourceip); //源IP m_list1.SetItemText(row,4,desip); //目的IP m_list1.SetItemText(row,5,sourceport); //源端口号 m_list1.SetItemText(row,6,desport); //目的端口号 其中数据包的显示是通过定时器每隔一秒钟触发调用一次将捕捉到的数据包信息返回插入到list表中 2.3 定时器和系统时间的获得 SetTimer(1,1000,NULL); //设置定时器,1000ms触发一次 … … CDialog::OnTimer(nIDEvent); // 获得系统当前时间 SYSTEMTIME tNow; GetLocalTime(&tNow); m_tc.Format("%2d:%2d:%2d",tNow.wHour,tNow.wMinute,tNow.wSecond); UpdateData(false); 其中设置定时器放在程序的初始化里边,通过控件显示定时器每个一秒触发一次获取当前时间函数所得到的时间。定时器的设置在捕获网络数据包函数还将会使用到,后面会详细说明。 2.4 捕获并显示本机信息 int getnetworkcardinfo() //捕获网卡信息函数 pcap_findalldevs(&alldevs, errbuf); // 获得设备列表 Description=d->description; //将网卡描述传递到Description中 IP_Address=iptos(((structsockaddr_in*)a->addr)->sin_addr.s_addr); Submask=iptos(((structsockaddr_in*)a->netmask)->sin_addr.s_addr); 通过下面的函数把u_long型的数据转换可读的IP地址和子网掩码
|
本站发布的计算机毕业设计均是完整无错的全套作品,包含开题报告+程序+论文+源代码+翻译+答辩稿PPT |
本文选自计算机毕业设计http://myeducs.cn |