MFC+WinPcap编写一个嗅探器之四(获取模块)

这一节主要介绍如何获取设备列表,比较简单

获取设备列表主要是在CAdpDlg中完成,也就是对应之前创建的选择适配器模块,如图:

当打开选择适配器对话框后,在列表视图控件中显示当前主机所有适配器及适配器的描述,当选中一个适配器时,在下方的编辑框中会显示当前选中的适配器,单击绑定会提示网卡绑定成功。

本节中代码都在AdpDlg.cpp中完成,当然变量的声明要在其对应的头文件中去做,这里就不再叙述。

首先要获取设备列表,在OnInitDialog函数中加入如下代码:

1 if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1)
2         return FALSE;

这样主机上的所有设备就放入alldevs这个链表中,我们将链表中的每个设备依次输出到列表视图控件中去:

1 for(d=alldevs; d; d=d->next)
2     {
3         m_list1.InsertItem(0,(CString)d->name);        //d->name的类型是char *,需要强制转换为CString才能在InsertItem中显示
4         m_list1.SetItemText(0,1,(CString)d->description);
5     }
6     d = NULL; //清空以便其他函数使用

注意在MFC中不接受char类型的字符串变量,所有字符串变量应该是用CString类型,类似与C++中的string类型。接下来我们想要在列表视图控件中选择一个设备,然后在下面的编辑框中显示,这时需要列表视图控件的一个触发函数。在属性也中选择对应列表视图空间的属性,选择控制事件(闪电),然后找到NM_CLICK,点击一下就会生成函数,在函数中添加如下代码:

 1 void CAdpDlg::OnNMClickList1(NMHDR *pNMHDR, LRESULT *pResult)
 2 {
 3     LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
 4     // TODO: 在此添加控件通知处理程序代码
 5     *pResult = 0;
 6
 7
 8     NMLISTVIEW *pNMListView = (NMLISTVIEW*)pNMHDR;
 9
10     if (-1 != pNMListView->iItem)        // 如果iItem不是-1,就说明有列表项被选择
11     {
12         // 获取被选择列表项第一个子项的文本
13         adpname = m_list1.GetItemText(pNMListView->iItem, 0);
14         // 将选择的语言显示与编辑框中
15         SetDlgItemText(IDC_EDIT1, adpname);
16     }
17 }

之后根据用户的选择返回获取的设备:

 1 //返回已选中设备
 2 pcap_if_t* CAdpDlg::GetDevice()
 3 {
 4     if(adpname)
 5     {
 6         for(d=alldevs; d; d=d->next)
 7             if(d->name == adpname)
 8                 return d;
 9     }
10     return NULL;
11 }

单击绑定时检查是否合法:

 1 void CAdpDlg::OnBnClickedOk()
 2 {
 3     // TODO: 在此添加控件通知处理程序代码
 4     d = GetDevice();
 5     if(d)
 6     {
 7         MessageBox(_T("网卡绑定成功!"));
 8         CDialogEx::OnOK();
 9     }
10     else
11         MessageBox(_T("请选择要绑定的网卡"));
12 }

这样获取模块就完成的差不多了

下一节 MFC+WinPcap编写一个嗅探器之五(过滤模块)

时间: 2024-08-29 13:26:36

MFC+WinPcap编写一个嗅探器之四(获取模块)的相关文章

MFC+WinPcap编写一个嗅探器之六(分析模块)

这一节是程序的核心,也是最复杂的地方 首先需要明白的一点是,一般对于一个有界面的程序来说,往往需要多线程.本程序中除了界面线程外,抓包需要另外创建一个新的线程.在写抓包函数之前,首先要将前面两个模块的结果返回到主对话框界面对应的类实现中,在SnifferDlg.cpp中,修改之前增加的两个模块的触发函数如下: 1 void CSnifferDlg::OnAdp() 2 { 3 // TODO: 在此添加命令处理程序代码 4 CAdpDlg adpdlg; 5 if(adpdlg.DoModal(

MFC+WinPcap编写一个嗅探器之五(过滤模块)

这一节主要介绍如何获设置捕获过滤,这里的过滤是指在捕获前过滤 设置捕获过滤主要是在CFilterDlg中完成,也就是对应之前创建的设置过滤规则对话框,如图: 首先要根据用户的选择来生成一个合法的过滤规则字符串,根据WinPcap的要求,合法的过滤规则可以是如下几种: 1) 表达式支持逻辑操作符,可以使用关键字 and.or.not对子表达式进行组合,同时支持使用小括号.2) 基于协议的过滤要使用协议限定符,协议限定符可以为ip.arp.rarp.tcp.udp等.3) 基于MAC地址的过滤要使用

从头开始编写一个Orchard网上商店模块(6) - 创建购物车服务和控制器

原文地址: http://skywalkersoftwaredevelopment.net/blog/writing-an-orchard-webshop-module-from-scratch-part-6创建购物车服务和控制器 这是从头开始编写一个新的Orchard模块的教程的第6篇.对于本教程的概述,请参阅介绍. 在本篇,我们将使我们的用户可以添加商品到他们的购物车.要创建这样的功能,我们需要: 一个“添加到购物车”按钮,要被添加我们的产品目录上,将产品添加到购物车 某种购物车服务,以存储

从头开始编写一个Orchard网上商店模块(5) - 创建和渲染ProductCatalog的内容类型

原文地址: http://skywalkersoftwaredevelopment.net/blog/writing-an-orchard-webshop-module-from-scratch-part-5创建和渲染ProductCatalog的内容类型 这是从头开始编写一个新的Orchard模块的教程的第5篇.对于本教程的概述,请参阅介绍. 为了网站的访问者能够将产品添加到他们的购物车,我们需要一个产品目录.产品目录可以是一个简单的产品清单.然而,在本教程中,我们希望主题作者能够接管渲染(r

从头开始编写一个Orchard网上商店模块(3) - 创建Orchard.Webshop模块项目

原文地址:http://skywalkersoftwaredevelopment.net/blog/writing-an-orchard-webshop-module-from-scratch-part-3创建Orchard.Webshop模块项目 这是从头开始编写一个新的Orchard模块的教程的第3篇.对于本教程的概述,请参阅介绍. Orchard模块是一个真正的ASP.NET MVC的Area类库,同时遵循了ASP.NET MVC和Orchard的特定的规范.Orchard 规范提升了您的

手把手教你编写一个简单的PHP模块形态的后门

看到Freebuf 小编发表的用这个隐藏于PHP模块中的rootkit,就能持久接管服务器文章,很感兴趣,苦无作者没留下PoC,自己研究一番,有了此文 0×00. 引言 PHP是一个非常流行的web server端的script语言.目前很多web应用程序都基于php语言实现.由于php是个开源软件并易于扩展,所以我们可以通过编写一个PHP模块(module 或者叫扩展 extension)来实现一个Backdoor. 本文就简单介下如何一步步编写一个简单的php 动态扩展后门. 0×01. p

编写一个通用递归获取树形结构对象集合的方法

/// <summary> /// 通用递归获取树状子节点信息 /// </summary> /// <param name="item"></param> /// <param name="id"></param> /// <returns></returns> private List<T> getTreeListByPid<T, F>(Lis

【php】配合Ajax与Json,根据MVC思想,无插件,完美兼容IE6,编写一个获取动态系统

获取用户动态在一些论坛等社交网络中很常见,甚至可以说,就是一个微博嘛.其实这个系统很简单的,很容易就能写出来. 当然,你平时要做好准备,在你的后台数据库加一张动态表,在用户发帖.回帖等各个动作的执行时候,再加一条把用户的各个动作入库,记录到一张专门的动态表内.时刻收集好用户的动态,这样才能向用户的好友或者整个网站的用户展示好友动态. 现在举一个例子来说明,怎么编写一个获取动态系统,也就是微博. 一.基本目标 假设我们现在收集了16条用户动态在Testtable表里面,时间什么的具体数据居然有条1

Golang中使用heap编写一个简单高效的定时器模块

定时器模块在服务端开发中非常重要,一个高性能的定时器模块能够大幅度提升引擎的运行效率.使用Golang和heap实现一个通用的定时器模块,代码来自:https://github.com/xiaonanln/goTimer 也可以查看文档:http://godoc.org/github.com/xiaonanln/goTimer,下面是完整的代码,并进行适当的注释和分析. 从性能测试结果来看,基于heap的定时器模块在效率上并不会比时间轮(TimeWheel)的实现慢多少,但是逻辑上要简单很多.