资源下载地址:https://download.csdn.net/download/sheziqiong/85946428
资源下载地址:https://download.csdn.net/download/sheziqiong/85946428
IP数据报捕获与分析
一、实验要求介绍
本实验要求利用WinPcap提供的功能获取网络接口设备列表和各接口的详细信息,同时可以对任意一块网络接口卡进行IP数据报进行校验和验证。
实验环境:以太网环境
实验方法:利用WinPcap或LibPcap编写捕获与分析程序
实验目的:
-
学习网络数据包捕获方法;
-
初步掌握网络监听与分析技术的实现过程;
-
利用WinPcap编写数据报捕获程序,要求能够解析以太网帧的源地址、目的地址和类型/长度域。
二、实验编译运行环境
本程序编译环境是:Visual Studio 2012;系统环境是:Windows 8(64 位);
三、编写IP数据报捕获与分析软件
运行效果程序最终界面如下:
程序正常捕获数据报界面如下:
使用过滤条件时如下(这里以只筛选出ARP报文为例):
下面就程序各部分详细功能简单介绍:
接口区:
此部分显示当前运行机器上具有的网卡接口列表,并且可以已通过单击选中接口,并且在右侧的“捕获接口的详细信息”区域显示当前选中的接口的详细信息。当点击“捕获报文”按钮进行捕获之后,此部分变成失效状态,即不可更改。
接口信息区:
此部分会显示在“本机具有的以太网接口”区域选中的接口的详细信息,会显示网卡接口的描述信息、IP地址信息、地址掩码、广播地址。并且会随着接口区选定的接口的改变而改变。
按钮区:
此部分具有“捕获报文”、“停止捕获”、“返回”三个按钮。负责捕获数据报和停止返回的功能。
其中当点击“捕获报文”后就不可以更改网卡接口,并且会将经由该网卡接口的所有数据报逐条捕获显示特定信息在屏幕上。
当点击“停止捕获”按钮后,会停止捕获选定网卡接口的数据报。
当点击“返回”按钮后,会清空在“截获数据报”区域的数据报信息,并且此时可以更改接口列表。
过滤区:
此部分可以输入一个大于等于0的整数,默认是0的话就会显示所有捕获选定网卡接口的数据报,如果是其他整数的话就会只显示该帧类型的数据报截获信息。
截获数据包区:
此部分会逐条显示捕获数据报,会显示时间、帧长度、目的地址、源地址、帧类型。
四、程序实现步骤及代码
程序主要使用了winpcap编写捕获与分析程序,首先使用pcap_findalldevs_ex()函数获取本机的接口设备,然后使用当用户选定一个接口时首先使用AfxBeginThread()创建一个工作者线程,然后使用自定义消息进行捕获数据报线程与显示对话框数据报线程通信,在工作者线程UINT Capturer(LPVOID pParm)里面,使用pcap_open()函数打开网络接口,然后循环调用 pcap_next_ex来接受数据报,并且利用窗口的PostMessage函数发送消息; 另外在消息处理函数OnPacket(WPARAM wParam, LPARAM lParam)里面处理捕获到的数据包,并且将其以一定格式显示显示在“截获数据包区域”Listbox控件中。程序用到了全局变量有:
pcap_t* afx_adhandle; //当前打开的网络接口
struct pcap_pkthdr *afx_header; //截获帧头部
const u_char *afx_pkt_data; //截获帧数据
程序创建的数据结构有:
typedef struct Data_t //包含帧首部和IP首部的数据包
typedef struct FrameHeader_t //帧首部
typedef struct IPHeader_t //IP首部
程序创建的全局函数有:
UINT Capturer(LPVOID pParm); //线程函数的定义
程序的逻辑结构图如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NbWDdDbQ-1657180430535)(https://www.writebug.com/myres/static/uploads/2022/4/5/3730fac371eed08a069d43dd6dc7c569.writebug)]
程序具体代码如下:
构造函数:CCapturePacketDlg(CWnd* pParent )
初始化函数: OnInitDialog()
接口区域选定状态发生改变函数:OnSelchangeInterfaceList()
更新捕获接口的详细信息Update_Message()
点击“开始捕获”按钮OnClickedCatch()
点击“停止捕获”按钮OnClickedStop()
点击“返回”按钮OnClickedReturn()
数据包捕获工作者线程UINT Capturer(LPVOID pParm)
消息处理函数
LRESULT CCapturePacketDlg::OnPacket(WPARAM wParam, LPARAM lParam)
资源下载地址:https://download.csdn.net/download/sheziqiong/85946428
资源下载地址:https://download.csdn.net/download/sheziqiong/85946428