基于C++ WinPcap 的网络抓包软件【100010867】

您所在的位置:网站首页 所有网络协议有哪些内容 基于C++ WinPcap 的网络抓包软件【100010867】

基于C++ WinPcap 的网络抓包软件【100010867】

2023-05-21 20:53| 来源: 网络整理| 查看: 265

基于 WinPcap 的网络抓包软件 概要设计 一、概述 项目名称:网络抓包软件设计项目描述:目前,有许多流行的网络抓包软件可以获取流经网卡的数据包(ethereal, sniffer),这个题目要求学生利用 winpcap 库设计并实现一个网络抓包的原型系统。项目目标:实现一个网络抓包系统项目功能 搜索并显示所有的网卡设备根据所选网卡进行抓包操作,并显示数据包的基本 信息,eg:类型、时间、IP 地址等信息对数据包进行详细分析,显示数据内容 二、系统结构设计

三、接口设计 用户界面

模块间的接口

详细设计 控制部分 CMainFrame 主框架类 BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 此函数创建了包含 3 个视图的分隔窗体void CMainFrame::OnSelectstart() 点击了"开始"工具栏按钮, 弹出 CDevSelector 选中设备进行抓包void CMainFrame::OnEndcatch() 点击了"终止"工具栏按钮, pcap_breakloop 正在监听的设备void CMainFrame::OnTExit(int exitNum) 得到线程退出前发出的 WM_TEXIT 消息, 可以安全地释放各种资源了void CMainFrame::OnUpdateXXX(CCmdUI* pCmdUI) 开始、终止、打开、保存、另存为 按钮/菜单 的使能转换 CDevSelector 网卡设备选择 void CDevSelector::InitWinPcap() CDevSelector 初始化的时候获取设备列表BOOL CDevSelector::OnInitDialog() 对话框初始化时调用 InitWinPcapvoid CDevSelector::OnOK() 点击了对话框的"确定"按钮, pcap_open 选中的设备 CSimpleSnifferApp 主程序类 void CSimpleSnifferApp::startCatch() 启动线程, 开始抓包 CSimpleSnifferDoc 文档类 void CSimpleSnifferDoc::Serialize(CArchive& ar) 串行化中实现 保存/打开 逻辑 抓包线程 UINT ThreadProc(LPVOID param) 抓包线程体,用 pcap_loop 循环抓包static void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data) pcap_loop 捕获到一个包后将包数据复制一份 并 发出 WM_TCATCH 消息class ThreadParam 封装传给线程的参数 分隔视图 CInfoView 包信息列表 void CInfoView::OnTCatch(struct pcap_pkthdr *header, u_char *pkt_data) 处理抓包线程抓到包的事件, pkt_data 是抓到的包void CInfoView::OnClick(NMHDR* pNMHDR, LRESULT* pResult) 点击列表中某行后, 显示它的包类型、16 进制形式的包数据void CInfoView::clearList() 清空列表, 开始新的抓包前调用这个这个函数 CPackInfo 各层协议单元详细信息 void CPackInfo::ShowPackInfo(const CString& info) 在编辑区中显示一段字符串 Hex 提供 16 进制显示的接口 virtual void ShowHexText(char *data, int len)=0; 以十六进制形式显示 data 之后的 len 个字节 CHexView Hex 接口的实现 void CHexView::ShowHexText(char *data, int len) 显示十六进制信息 解析包

class Head_Super 解析包的类,所有包都派生自这个类 class Head_Super{ public: // 指向更高层协议 Head_Super* next; // 从 pkt_data 中抽取出这层协议 PDU 的信息 virtual void analysis(u_char *pkt_data)=0; // 将这层协议的详细信息以一个字符串表现出来 virtual CString my_print()=0; }; class Info 保存了抓到的一个包的所有信息 class Info{ public: struct pcap_pkthdr *header; //抓包所得数据包一些信息(时间、长度) u_char pkt_data; //抓包所得数据包内容头指针 Head_Super m_Head; //最底层协议的 PDU }; class Head_XXX Head_Super 具体于某种协议的实现

测试文档

相关截图

相关截图 无网络活动的 启动 和 终止

有网络活动的 启动 和 终止

♻️ 资源

在这里插入图片描述

大小: 659KB ➡️ 资源下载:https://download.csdn.net/download/s1t16/87453202 注:如当前文章或代码侵犯了您的权益,请私信作者删除!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3