MFC+WinPcap编写一个嗅探器之五(过滤模块)
这一节主要介绍如何获设置捕获过滤,这里的过滤是指在捕获前过滤
设置捕获过滤主要是在CFilterDlg中完成,也就是对应之前创建的设置过滤规则对话框,如图:

首先要根据用户的选择来生成一个合法的过滤规则字符串,根据WinPcap的要求,合法的过滤规则可以是如下几种:
1) 表达式支持逻辑操作符,可以使用关键字 and、or、not对子表达式进行组合,同时支持使用小括号。
2) 基于协议的过滤要使用协议限定符,协议限定符可以为ip、arp、rarp、tcp、udp等。
3) 基于MAC地址的过滤要使用限定符ether(代表以太网地址)、当该MAC地址仅作为源地址时表达式为ether src mac_addr,仅作为目的地址时,表达式为ether dst mac_addr,既作为源地址又作为目的地址时的表达式为ether host mac_addr。此外应注意mac_addr应该遵从00:E0:4C:E0:38:88的格式,否则编译过滤器时会出错。
4) 基于IP地址的过滤应该使用限定符host(代表主机地址)。当该IP地址仅作为源地址时过滤表达式应为 src host ip_addr,仅作为目的地址时的表达式为 dst host ip_addr,既作为源地址又作为目的地址时表达式为 host ip_addr。
5) 基于端口的过滤应使用限定符 port。例如仅接收80端口的数据包则表达式为port 80。
下边给出两个例子:
例1:只捕获arp或icmp数据包。
过滤表达式:arp or (ip and icmp)
例2:捕获主机192.168.1.23与192.168.1.28之间传递的所有UDP数据包。
过滤表达式:(ip and udp)and( host 192.168.1.23 or host 192.168.1.28)
这样可以用以下代码来生成一个合法的过滤规则:首先生成一个点击确定的触发函数,之后添加如下代码
void CFilterDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
if ( == m_tcp.GetCheck())
{
filtername += _T("(tcp and ip) or ");
}
if ( == m_udp.GetCheck())
{
filtername += _T("(udp and ip) or ");
}
if ( == m_arp.GetCheck())
{
filtername += _T("arp or ");
}
if ( == m_rarp.GetCheck())
{
filtername += _T("rarp or ");
}
if ( == m_icmp.GetCheck())
{
filtername += _T("(icmp and ip) or ");
}
if ( == m_igmp.GetCheck())
{
filtername += _T("(igmp and ip) or ");
} filtername = filtername.Left(filtername.GetLength()-); //注意去掉最后多余的" or ",否则过滤规则不成立 CDialogEx::OnOK(); }
这里想补充一点关于单选框和复选框的判断是否选择的问题
判断按钮是否选中:
复选:1 == m_tcp.GetCheck()
单选和复选:不能用GetCheck()可以用通用的if (((CButton *)GetDlgItem(IDC_RADIO1))->GetCheck())用按钮ID来选择
在默认设置时两者也有区别:
复选:m_tcp.SetCheck(1)
单选和复选:CheckDlgButton(IDC_RADIO1, 1)
也就是说复选和单选都可以通过按钮的ID来设置,而复选又多了自己的一个专门函数用来设置。
回到程序,在生成一段合法的字符串后将filtername返回给主窗口,设置和编译过滤规则的函数也在主窗口中处理,这些内容在下一节介绍吧
下一节 MFC+WinPcap编写一个嗅探器之六(分析模块)
MFC+WinPcap编写一个嗅探器之五(过滤模块)的更多相关文章
- MFC+WinPcap编写一个嗅探器之四(获取模块)
这一节主要介绍如何获取设备列表,比较简单 获取设备列表主要是在CAdpDlg中完成,也就是对应之前创建的选择适配器模块,如图: 当打开选择适配器对话框后,在列表视图控件中显示当前主机所有适配器及适配器 ...
- MFC+WinPcap编写一个嗅探器之六(分析模块)
这一节是程序的核心,也是最复杂的地方 首先需要明白的一点是,一般对于一个有界面的程序来说,往往需要多线程.本程序中除了界面线程外,抓包需要另外创建一个新的线程.在写抓包函数之前,首先要将前面两个模块的 ...
- MFC+WinPcap编写一个嗅探器之三(WinPcap)
介绍程序模块前,这一节再复习一下WinPcap WinPcap开发一个嗅探器的主要步骤如下: (1)获取嗅探设备 WinPcap提供了pcap_findalldevs_ex() 函数来实现这个功能: ...
- MFC+WinPcap编写一个嗅探器之一(准备)
知识准备: MFC:http://www.jizhuomi.com/software/257.html WinPcap:http://www.ferrisxu.com/WinPcap/html/ind ...
- MFC+WinPcap编写一个嗅探器之七(协议)
这一节是本系列教程的结尾了,内容也比较简单,主要是对网络协议进行分析,其实学过计算机网络的同学完全可以略过 在整个项目中需要有一个头文件存放各层协议的头部定义,我把它们放在了head.h中,这个头文件 ...
- MFC+WinPcap编写一个嗅探器之零(目录)
零零散散写了三天,完成了编写嗅探器的文章,旨在让自己加深印象,是初学者少走一些弯路.因为先前未接触MFC,之后也不打算精通,完全是0基础,所以文章技术含量不高,但难点基本上都都包括了,凑合这看吧,接下 ...
- MFC+WinPcap编写一个嗅探器之二(界面)
选择新建->项目->MFC应用程序->基于对话框完成,这里文件名为sniffer 打开资源视图中的Dialog列表,打开项目总默认创建的话框,将对话框中的所有控件删除,之后按照最终效 ...
- 从头开始编写一个Orchard网上商店模块(6) - 创建购物车服务和控制器
原文地址: http://skywalkersoftwaredevelopment.net/blog/writing-an-orchard-webshop-module-from-scratch-pa ...
- 从头开始编写一个Orchard网上商店模块(5) - 创建和渲染ProductCatalog的内容类型
原文地址: http://skywalkersoftwaredevelopment.net/blog/writing-an-orchard-webshop-module-from-scratch-pa ...
随机推荐
- elk定时清理日志
#!/bin/bash shijian=`date +%Y.%m.%d -d "5 days ago"` #echo $shijian curl -XDELETE "10 ...
- Spring @Transactional注解不回滚不起作用无效
原文地址:http://www.cnblogs.com/wuxiaofeng/p/6819209.html 这几天在项目里面发现我使用@Transactional之后,抛了异常居然不回滚.后来终于 ...
- Shell中eval的用法示例
功能说明:告知shell取出eval的参数,重新运算求出参数的内容. 语 法:eval [参数]补充说明:eval可读取一连串的参数,然后再依参数本身的特性来执行. 参 数:参数不限数目,彼此之间用分 ...
- .Net多线程之线程安全
ConcurrentDictionary是.net4.0推出的一套线程安全集合里的其中一个,和它一起被发行的还有ConcurrentStack,ConcurrentQueue等类型,它们的单线程版本( ...
- 美轮美奂!9款设计独特的jQuery/CSS3全新应用插件(下拉菜单、动画、图表、导航等)
今天要为大家分享9款设计非常独特的jQuery/CSS3全新应用插件,插件包含菜单.jQuery焦点图.jQuery表单.jQuery图片特效等.下面大家一起来看看吧. 1.jQuery水晶样式下拉导 ...
- Flash数据的采集方法-搜房房价走势采集
一般来说flash中的数据是不能被现有技术很容易采集到的,但是也不能谈flash色变,要具体问题具体分析,有些flash是可以通过一些分析发现背后的数据.然后采集就变得很容易了. 具体案例:搜房房价走 ...
- FPGA基础知识8(FPGA静态时序分析)
任何学FPGA的人都跑不掉的一个问题就是进行静态时序分析.静态时序分析的公式,老实说很晦涩,而且总能看到不同的版本,内容又不那么一致,为了彻底解决这个问题,我研究了一天,终于找到了一种很简单的解读办法 ...
- virtual Box在Centos 7上的安装
1.首先,我们需要在oracle官网下载virtual Box的centos7版本: 下载地址为:http://download.virtualbox.org/virtualbox/5.0.12/Vi ...
- gnome桌面无法使用笔记本的触摸板
原来使用ubuntu的时候,升级了gnome之后触摸板就不能用了,不能说不能用了,应该是自己不会配置然后不好用了,具体状况如是,可以在登录界面gdm使用触摸板以及点击,但是进入桌面之后就不能点击了.后 ...
- 【codeforces】【比赛题解】#960 CF Round #474 (Div. 1 + Div. 2, combined)
终于打了一场CF,不知道为什么我会去打00:05的CF比赛…… 不管怎么样,这次打的很好!拿到了Div. 2选手中的第一名,成功上紫! 以后还要再接再厉! [A]Check the string 题意 ...