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

♻️ 资源

大小: 659KB

➡️ 资源下载: https://download.csdn.net/download/s1t16/87453202

基于 WinPcap 的网络抓包软件

概要设计

一、概述

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

二、系统结构设计

三、接口设计

用户界面
模块间的接口

详细设计

控制部分

  • 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()
      对话框初始化时调用 InitWinPcap
    • void 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(NMHDRpNMHDR, 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 具体于某种协议的实现

测试文档

相关截图


相关截图

无网络活动的 启动 和 终止
有网络活动的 启动 和 终止
相关推荐
xiaoye-duck38 分钟前
《Linux 网络编程》深入理解 IP 协议(二):网段划分、私有 IP 与 NAT 地址转换
linux·网络·ip
汉克老师1 小时前
GESP2026年9月认证C++六级( 第三部分编程题(1、数组划分))精讲
c++·gesp·小学生·学c++编程
千里码aicood1 小时前
基于PLC与机器视觉的智能分拣控制系统设计
c++·自动化·plc
漂流瓶jz2 小时前
UVA-1442 洞穴 题解答案代码 算法竞赛入门经典第二版
c++·算法·题解·aoapc·算法竞赛入门经典·uva
朽棘不雕2 小时前
进一步了解模板
c++
广州宏帝箱包3 小时前
出口箱包的包装标准:防潮、防摔、运输安全的设计要点
大数据·网络
彧azz3 小时前
Linux 网络编程学习总结
linux·网络·笔记·学习·面试
updayday8544 小时前
离职域账号状态变更与Ping64操作记录核对
大数据·网络·数据库·安全·智能路由器
汉克老师5 小时前
CSP-J 2026 初赛试题解析(第一部分:选择题(8-15))精讲
c++·csp-j·小学生·学c++编程
安易算力5 小时前
PUE优化工程实践:从1.5到1.2的制冷架构与气流组织改造路径
网络·python·容器·架构·kubernetes