// snifferDlg.cpp: 实现文件
//
#include "pch.h"
#include "framework.h"
#include "sniffer.h"
#include "snifferDlg.h"
#include "afxdialogex.h"
#include "RuleFilter.h"
#include <tchar.h>
#include "analysis.h"
#include "protocol.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
#include <vector>
#pragma comment(lib,"iphlpapi.lib")
// 用于应用程序“关于”菜单项的 CAboutDlg 对话框
class CAboutDlg : public CDialogEx
{
public:
CAboutDlg();
// 对话框数据
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_ABOUTBOX };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
DECLARE_MESSAGE_MAP()
};
// 构造函数
CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX)
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()
// CsnifferDlg 对话框
CsnifferDlg::CsnifferDlg(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_SNIFFER_DIALOG, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CsnifferDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_COMBO1, combox1);
DDX_Control(pDX, IDC_LIST1, list1);
DDX_Control(pDX, IDC_EDIT9, edit);
DDX_Control(pDX, IDC_TREE1, m_treeDetailInfo);
}
BEGIN_MESSAGE_MAP(CsnifferDlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_MESSAGE(M_MESSAGEWINPCAP, OnMessageWinPcap)// 参数是用户自定义的消息和处理消息的函数
ON_CBN_SELCHANGE(ID_WINDOW_TILE_VERT, &CsnifferDlg::OnCbnSelchangeWindowTileVert)
ON_BN_CLICKED(IDC_BUTTON1, &CsnifferDlg::OnBnClickedButton1)
ON_NOTIFY(TVN_SELCHANGED, IDC_TREE1, &CsnifferDlg::OnTvnSelchangedTree1)
ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST1, &CsnifferDlg::OnLvnItemchangedList1)
ON_NOTIFY(NM_CUSTOMDRAW, IDC_LIST1, &CsnifferDlg::OnNMCustomdrawList1)
ON_CBN_SELCHANGE(IDC_COMBO1, &CsnifferDlg::OnCbnSelchangeCombo1)
ON_CBN_DROPDOWN(IDC_COMBO1, &CsnifferDlg::OnCbnDropdownCombo1)
ON_BN_CLICKED(IDC_BUTTON3, &CsnifferDlg::OnBnClickedButton3)
ON_EN_CHANGE(IDC_EDIT9, &CsnifferDlg::OnEnChangeEdit9)
ON_BN_CLICKED(IDC_BUTTON2, &CsnifferDlg::OnBnClickedButton2)
ON_NOTIFY(NM_DBLCLK, IDC_LIST1, &CsnifferDlg::OnNMDblclkList1)
ON_EN_CHANGE(IDC_EDIT7, &CsnifferDlg::OnEnChangeEdit7)
ON_EN_CHANGE(IDC_EDIT1, &CsnifferDlg::OnEnChangeEdit1)
END_MESSAGE_MAP()
// CsnifferDlg 消息处理程序
BOOL CsnifferDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 将“关于...”菜单项添加到系统菜单中。
// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != nullptr)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
//*****************************************************************
// TODO: 在此添加额外的初始化代码
//combox1.SetWindowTextA("请选择要监听的网卡");// 初始化combox内文字为第0个字符串
// initialize ListEdit// 为列表视图控件添加全行选中和栅格风格LVS_EX_DOUBLEBUFFER
list1.SetExtendedStyle(list1.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_DOUBLEBUFFER);
LONG lStyle;
lStyle = GetWindowLong(list1.m_hWnd, GWL_STYLE);//获取当前窗口style
lStyle &= ~LVS_TYPEMASK; //清除显示方式位
lStyle |= LVS_REPORT; //设置style
SetWindowLong(list1.m_hWnd, GWL_STYLE, lStyle);//设置style
DWORD dwStyle = list1.GetExtendedStyle();
dwStyle |= LVS_EX_GRIDLINES;//网格线(只适用与report风格的listctrl)
//dwStyle |= LVS_EX_CHECKBOXES;
dwStyle |= LVS_OWNERDATA;//设置自绘风格
dwStyle |= LVS_EX_DOUBLEBUFFER;//内部双缓冲,防止界面闪烁VC6未定义LVS_EX_DOUBLEBUFFER宏,使用者可以自定义,#define LVS_EX_DOUBLEBUFFER 0x00010000
list1.SetExtendedStyle(dwStyle); //设置扩展风格
list1.InsertColumn(0, _T("序号"), LVCFMT_CENTER, 50);// 参数:索引,内容,对齐方式,列宽
list1.InsertColumn(1, _T("时间"), LVCFMT_LEFT, 120);
list1.InsertColumn(2, _T("源MAC地址"), LVCFMT_CENTER, 150);
list1.InsertColumn(3, _T("目的MAC地址"), LVCFMT_CENTER, 150);
list1.InsertColumn(4, _T("长度"), LVCFMT_CENTER, 70);
list1.InsertColumn(5, _T("协议"), LVCFMT_CENTER, 70);
list1.InsertColumn(6, _T("源IP:源端口号"), LVCFMT_LEFT, 160);
list1.InsertColumn(7, _T("目的IP:目的端口号"), LVCFMT_LEFT, 160);
// 表头不算第0行
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
void CsnifferDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialogEx::OnSysCommand(nID, lParam);
}
}
// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。 对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。
void CsnifferDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 使图标在工作区矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialogEx::OnPaint();
}
}
//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CsnifferDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
void CsnifferDlg::OnCbnSelchangeWindowTileVert()
{
// TODO: 在此添加控件通知处理程序代码
}
void CsnifferDlg::OnTvnSelchangedTree1(NMHDR* pNMHDR, LRESULT* pResult)
{
LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
*pResult = 0;
}
void CsnifferDlg::OnLvnItemchangedList1(NMHDR* pNMHDR, LRESULT* pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
*pResult = 0;
}
void CsnifferDlg::OnNMCustomdrawList1(NMHDR* pNMHDR, LRESULT* pResult)
{
}
void CsnifferDlg::OnCbnSelchangeCombo1()
{
// TODO: 在此添加控件通知处理程序代码
}
pcap_if_t* alldevsHead;// 保存链表头,保证在确定按钮中使用的是同一个链表
void CsnifferDlg::OnCbnDropdownCombo1()
{
// 清空下拉框中的网卡信息
combox1.ResetContent();
// 下拉框中添加网卡信息
pcap_if_t* alldevs = GetAllAdapter();// 获取网卡信息
alldevsHead = alldevs;// 保存链表头
while (alldevs) {
combox1.AddString((LPCTSTR)(CString)alldevs->description);// 将网卡描述添加到下拉框,不是名称!!!
alldevs = alldevs->next;
}
//释放内存空间
if (alldevs)
pcap_freealldevs(alldevs);
}
// 筛选对话框
void CsnifferDlg::OnBnClickedButton3()
{
// 弹出模态对话框
RuleFilter dlg;
dlg.DoModal();// 模态方式弹出
}
// click on button1
void CsnifferDlg::OnBnClickedButton1()
{
DWORD threadId;//线程id
bool threadExisted = false;
// 动态改变button中间的文字
CString str;
static int count = 1;//抓包第count项
GetDlgItemText(IDC_BUTTON1, str);
if (str == _T("开始"))
{
SetDlgItemText(IDC_BUTTON1, _T("停止"));
if(threadExisted == false){
// 找到下拉框中的对应设备结构体devsHead
int index = combox1.GetCurSel();// 获取下拉框的�
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
基于c++的网卡流量数据包分析源码.zip基于c++的网卡流量数据包分析源码.zip基于c++的网卡流量数据包分析源码.zip基于c++的网卡流量数据包分析源码.zip基于c++的网卡流量数据包分析源码.zip基于c++的网卡流量数据包分析源码.zip基于c++的网卡流量数据包分析源码.zip基于c++的网卡流量数据包分析源码.zip基于c++的网卡流量数据包分析源码.zip基于c++的网卡流量数据包分析源码.zip基于c++的网卡流量数据包分析源码.zip 【备注】 项目多为高分毕设,评审平均分达到95分以上,都经过本地验证,运行OK后上传,可直接运行起来。 主要针对计算机相关专业的正在做毕设的学生和需要项目实战的Java、JavaScript、c#、游戏开发、小程序开发学习者、深度学习等专业方向。 也可作为课程设计、期末大作业。包含:项目源码、数据库、项目说明等,该项目可以直接作为毕设、课程设计使用。 也可以用来学习参考借鉴!
资源推荐
资源详情
资源评论
收起资源包目录
基于c++的网卡流量数据包分析源码.zip (26个子文件)
sniffer
MyWinPcap.cpp 3KB
stdafx.h 2KB
protocol.h 6KB
sniffer.sln 1KB
snifferDlg.cpp 33KB
snifferDlg.h 3KB
.gitattributes 2KB
RuleFilter.cpp 2KB
resource.h 2KB
LICENSE 34KB
framework.h 1KB
sniffer.cpp 3KB
MyWinPcap.h 588B
res
sniffer.rc2 670B
sniffer.ico 66KB
sniffer.h 494B
pch.h 531B
sniffer.vcxproj 11KB
sniffer.vcxproj.filters 3KB
RuleFilter.h 843B
pch.cpp 153B
sniffer.rc 16KB
.gitignore 6KB
analysis.h 4KB
targetver.h 287B
项目说明.md 10KB
共 26 条
- 1
资源评论
Make程序设计
- 粉丝: 5623
- 资源: 3567
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功