Filter 的使用参考 http://blog.csdn.net/amh/archive/2004/11/09/173560.aspx 经过实践发现,其文中,功能看似达到了,但有一部分是不正确的. DWORD err = NO_ERROR; // 一个创建网络包过滤接口 INTERFACE_HANDLE hInterface; PfCreateInterface(0, PF_ACTION_FORWARD,//PF_ACTION_DROP,原文中使用了屏蔽所有包 PF_ACTION_FORWARD,//PF_ACTION_DROP,原文中使用了屏蔽所有包 //如果屏蔽所有,那么看似屏蔽成功了,但程序运行之后,后面的过滤规则的设定也就没有任何意义了; FALSE, TRUE, &hInterface); // 绑定需要网络包过滤的IP地址 BYTE localIp[] = {xx,xx,xx,xx}; BYTE DestIp[] = {xx,xx,xx,xx}; PfBindInterfaceToIPAddress(hInterface, PF_IPV4, localIp); // 现在我们开始过滤HTTP协议的的接口 FILTER_HANDLE fHandle; // 填充过滤包的规则结构 PF_FILTER_DESCRIPTOR inFilter; inFilter.dwFilterFlags = FD_FLAGS_NOSYN; //一直添这个值 inFilter.dwRule = 0; //一直添这个值 inFilter.pfatType = PF_IPV4; //用 ipV4 地址 inFilter.SrcAddr = localIp; //设置本地IP地址 inFilter.SrcMask = (PBYTE)"\xff\xff\xff\xff"; //设置本地子网掩码 inFilter.wSrcPort = FILTER_TCPUDP_PORT_ANY; //任意来源端口 inFilter.wSrcPortHighRange = FILTER_TCPUDP_PORT_ANY; inFilter.DstAddr = DestIp; inFilter.DstMask = (PBYTE)"\xff\xff\xff\xff"; inFilter.wDstPort = 80; inFilter.wDstPortHighRange = 80; inFilter.fLateBound = LB_SRC_ADDR_USE_DSTADDR_FLAG|LB_DST_ADDR_USE_DSTADDR_FLAG;
inFilter.dwProtocol = FILTER_PROTO_ANY; // 加入一个过滤接口,加在包过滤的出口上面,在原文中加到了入口上,所以是不会有效果的 // OutFilter才是关于本机的包过滤规则的正确放置位置 PfAddFiltersToInterface(hInterface, 0, NULL,1, &inFilter, &fHandle); if(err != NO_ERROR) { TRACE("PfAddFiltersToInterface is Wrong\n"); return ; } //在这个地方弹出对话框中断程序,测试是否运行成功
MessageBox("Filter Enabled!"); // 移除过滤接口 PfRemoveFilterHandles(hInterface, 1, &fHandle); PfUnBindInterface(hInterface); PfDeleteInterface(hInterface);
希望对大家能够有所帮助! 
|