# 基于 WinPcap 的网络抓包软件
## 概要设计
### 一、概述
* 项目名称:网络抓包软件设计
* 项目成员:刘乔羽(03091445)杨延中(03091388)周旭(03091356)
* 项目描述:目前,有许多流行的网络抓包软件可以获取流经网卡的数据包(ethereal, sniffer),这个题目要求学生利用 winpcap 库设计并实现一个网络抓包的原型系统。
* 项目目标:实现一个网络抓包系统
* 项目功能
1. 搜索并显示所有的网卡设备
2. 根据所选网卡进行抓包操作,并显示数据包的基本
信息,eg:类型、时间、IP 地址等信息
3. 对数据包进行详细分析,显示数据内容
### 二、系统结构设计
![](https://www.writebug.com/myres/static/uploads/2021/11/24/dafb8c3e68c0d962669771e5b57647a9.writebug)
### 三、接口设计
#### 用户界面
![](https://www.writebug.com/myres/static/uploads/2021/11/24/1c8748109e7acd533876755f400be8f5.writebug)
#### 模块间的接口
![](https://www.writebug.com/myres/static/uploads/2021/11/24/5dc6a480772496d57c6a858143d1220f.writebug)
## 详细设计
### 控制部分
* 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(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 具体于某种协议的实现
## 测试文档
![](https://www.writebug.com/myres/static/uploads/2021/11/24/7d310d8ec772fdc654835808d753f72f.writebug)
### 相关截图
![](https://www.writebug.com/myres/static/uploads/2021/11/24/a77af0b300522615e9878302a83f0327.writebug)
---
![](https://www.writebug.com/myres/static/uploads/2021/11/24/eb3e1e6f26c934a845f0d1cb3a64093b.writebug)
### 相关截图
#### 无网络活动的 启动 和 终止
![](https://www.writebug.com/myres/static/uploads/2021/11/24/0824fded2af1a52cbcf160952e64f912.writebug)
![](https://www.writebug.com/myres/static/uploads/2021/11/24/d74c9aa08b9e3f60f199a292219181f7.writebug)
#### 有网络活动的 启动 和 终止
![](https://www.writebug.com/myres/static/uploads/2021/11/24/c8ba1c1bb879903da1ade3690158531d.writebug)
![](https://www.writebug.com/myres/static/uploads/2021/11/24/5212b2d940c0e52c7146d34fade60f06.writebug)
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
项目描述:目前,有许多流行的网络抓包软件可以获取流经网卡的数据包(ethereal, sniffer),这个题目要求学生利用 winpcap 库设计并实现一个网络抓包的原型系统。 项目目标:实现一个网络抓包系统 项目功能 搜索并显示所有的网卡设备 根据所选网卡进行抓包操作,并显示数据包的基本 信息,eg:类型、时间、IP 地址等信息 对数据包进行详细分析,显示数据内容
资源推荐
资源详情
资源评论
收起资源包目录
基于C++ WinPcap 的网络抓包软件【100010867】 (134个子文件)
Toolbar.bmp 598B
SimpleSniffer.clw 3KB
Server.clw 2KB
Client.clw 2KB
breakloop.clw 1KB
Head.cpp 11KB
InfoView.cpp 7KB
ServerDlg.cpp 6KB
ClientDlg.cpp 6KB
breakloopDlg.cpp 6KB
SimpleSniffer.cpp 5KB
MainFrm.cpp 5KB
loop.cpp 3KB
SimpleSnifferDoc.cpp 3KB
HexView.cpp 3KB
DevSelector.cpp 3KB
Client.cpp 2KB
Server.cpp 2KB
breakloop.cpp 2KB
PackInfo.cpp 2KB
LSock.cpp 1KB
Thread.cpp 954B
WCSock.cpp 925B
alldevs.cpp 846B
thread.cpp 488B
StdAfx.cpp 207B
StdAfx.cpp 203B
StdAfx.cpp 200B
StdAfx.cpp 200B
SimpleSniffer.dsp 5KB
alldevs.dsp 4KB
loop.dsp 4KB
breakloop.dsp 4KB
Server.dsp 4KB
Client.dsp 4KB
CS.dsw 678B
SimpleSniffer.dsw 503B
breakloop.dsw 495B
alldevs.dsw 491B
loop.dsw 485B
.gitignore 47B
.gitignore 40B
.gitignore 40B
.gitignore 40B
.gitignore 40B
.gitignore 34B
.gitignore 34B
.gitignore 8B
bpf.h 28KB
Packet32.h 16KB
remote-ext.h 14KB
pcap.h 14KB
ip6_misc.h 6KB
sll.h 5KB
bittypes.h 4KB
Win32-Extensions.h 4KB
namedb.h 3KB
usb.h 3KB
pcap-stdinc.h 3KB
Head.h 3KB
pcap-bpf.h 2KB
pcap.h 2KB
SimpleSniffer.h 2KB
vlan.h 2KB
pcap-namedb.h 2KB
bluetooth.h 2KB
MainFrm.h 2KB
LSock.h 2KB
InfoView.h 2KB
breakloopDlg.h 2KB
HexView.h 1KB
ClientDlg.h 1KB
ServerDlg.h 1KB
SimpleSnifferDoc.h 1KB
PackInfo.h 1KB
Resource.h 1KB
DevSelector.h 1KB
breakloop.h 1KB
Client.h 1KB
Server.h 1KB
WCSock.h 1KB
StdAfx.h 1KB
StdAfx.h 1KB
Resource.h 1KB
StdAfx.h 1KB
resource.h 1KB
StdAfx.h 1KB
Resource.h 801B
Thread.h 421B
Info.h 355B
Hex.h 164B
thread.h 156B
SimpleSniffer.ico 1KB
SimpleSnifferDoc.ico 1KB
Client.ico 1KB
Server.ico 1KB
breakloop.ico 1KB
gui.jpg 137KB
wireshark.jpg 88KB
network2.jpg 79KB
共 134 条
- 1
- 2
资源评论
- 不可说4502023-07-17超赞的资源,感谢资源主分享,大家一起进步!
- doudouhgts2023-07-22发现一个超赞的资源,赶紧学习起来,大家一起进步,支持!
神仙别闹
- 粉丝: 2674
- 资源: 7640
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功