#include "stdafx.h"
#include "xpktfilter.h"
#include "xpktfilterDlg.h"
#include ".\xpktfilterdlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
#pragma comment(lib,"iphlpapi.lib")
// CxpktfilterDlg 对话框
CxpktfilterDlg::CxpktfilterDlg(CWnd* pParent /*=NULL*/)
: CDialog(CxpktfilterDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CxpktfilterDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CxpktfilterDlg, CDialog)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDOK, OnBnClickedOk)
ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1)
END_MESSAGE_MAP()
// CxpktfilterDlg 消息处理程序
BOOL CxpktfilterDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE);// 设置大图标
SetIcon(m_hIcon, FALSE);// 设置小图标
ShowWindow(SW_MINIMIZE);
// TODO: 在此添加额外的初始化代码
return TRUE; // 除非设置了控件的焦点,否则返回 TRUE
}
// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。
void CxpktfilterDlg::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
{
CDialog::OnPaint();
}
}
//当用户拖动最小化窗口时系统调用此函数取得光标显示。
HCURSOR CxpktfilterDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
void CxpktfilterDlg::OnBnClickedOk()
{
PfCreateInterface(0,
PF_ACTION_DROP,//PF_ACTION_FORWARD,
PF_ACTION_DROP,//PF_ACTION_FORWARD,
FALSE,
TRUE,
&hInterface);
// 绑定需要网络包过滤的IP地址
BYTE localIp[]={127,0,0,1};
/********************************************************************
这里可以用代码实现自动获得本机IP,由于时间关系,留下这个问题给读者自己研究,
不便之处请原谅。
*********************************************************************/
PfBindInterfaceToIPAddress(hInterface, PF_IPV4, localIp);
// 现在我们开始过滤HTTP协议的的接口
// 填充过滤包的规则结构
PF_FILTER_DESCRIPTOR inFilter;
inFilter.dwFilterFlags = FD_FLAGS_NOSYN; //一直添这个值
inFilter.dwRule = 0; //一直添这个值
inFilter.pfatType = PF_IPV4; //用 ipV4 地址
inFilter.SrcAddr = localIp; //设置本地IP地址
inFilter.wSrcPort = FILTER_TCPUDP_PORT_ANY; //任意来源端口
inFilter.wSrcPortHighRange = FILTER_TCPUDP_PORT_ANY;
inFilter.DstAddr = 0; //任意目标地址
inFilter.DstMask = 0;
inFilter.wDstPort = FILTER_TCPUDP_PORT_ANY; //任意目标端口
inFilter.wDstPortHighRange =FILTER_TCPUDP_PORT_ANY;
inFilter.dwProtocol = FILTER_PROTO_TCP; // 过滤的协议,可选FILTER_PROTO_ICMP
// 加入一个过滤接口
PfAddFiltersToInterface(hInterface, 1, &inFilter, 0, NULL, &fHandle);
}
void CxpktfilterDlg::OnBnClickedButton1()
{
PfRemoveFilterHandles(hInterface, 1, &fHandle);
PfUnBindInterface(hInterface);
PfDeleteInterface(hInterface);
}
分享到:
相关推荐
VC++描述数据包捕获 VC++描述数据包捕获 VC++描述数据包捕获 VC++描述数据包捕获 VC++描述数据包捕获
Linux平台下数据包过滤防火墙的研究与实践.pdf
实现数据包的过滤。包过滤方式是一种通用、廉价和有效的安全手段.它不是针对各个 具体的网络服务采取特殊的处理方式,适用于所有网络服务。所以,在节约成本并保证 安全的前提下设计一个简单有效的包过滤防火墙,...
5.6 防火墙的发展趋势 1、新型防火墙技术 2、包过滤防火墙存在以下缺陷 3、状态监测防火墙(Stateful inspection) 4、自适应代理技术(Adaptive proxy) 5、选择防火墙的原则 1、解决安全性、效率和功能方面的矛盾 ...
NDIS驱动,捕获过滤数据包,防火墙 好东西,分享
Linux网络防火墙Netfilter的数据包传输过滤原理.pdf
网络数据包截获程序 数据包 截获 防火墙 WpdPack Libnids 数据包 截获 防火墙 WpdPack Libnids
在分析数据包过滤原理基础上,对如何制定过滤规则以建立有效的过滤型防火墙进行探讨
我的构架::::用包过滤技术实现个人防火墙
基于过滤器钩子驱动的数据包过滤研究与实现,防火墙开发资料,使用系统API
主要研究如何通过基于Windows操作系统内核的包过滤防火墙系统来实现网络安全 ...首先介绍了包过滤防火墙的基本结构和原理,然后在剖析操作系统内核的基础上,研究并设计了 基于Windows操作系统内核的包过滤防火墙系统。
防火墙的一个源代码,用Vc++开发.实现了对本机的监控和对网络数据包的过滤.
在Linux环境下用Iptables建立包过滤型防火墙.pdf
用c#实现的包过滤防火墙,可根据IP地址过滤数据包,很实用,运行环境vs2008
用c#写的,通过添加条件过滤数据包,达到禁网的效果,
中间层数据包过滤可以辅助实现个人防火墙及通信内容监控的功能。
经过对现有网络安全技术...存在很多类似的地方,如包过滤防火墙系统、基于规则匹配的IDS系统及流量分 析系统等等,都是基于规则进行检测的系统;而且,这些不同的应用系统匹配的 对象都是一致的,匹配对象为IP数据包。
VC++ 局域网网络数据包分析
VC++做的简单包过滤防火墙,可以通过IP地址、协议(TCP、UDP、ICMP)对包进行过滤,包过滤防火墙是用一个软件查看所流经的数据包的包头(header),由此决定整个包的命运。它可能会决定丢弃(DROP)这个包,可能会...
用c#实现的关于包过滤的防火墙,功能是能根据IP地址过滤掉一些自己不想获取的数据包