关于Win Filter Api的使用方法修正

类别:编程语言 点击:0 评论:0 推荐:

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);

希望对大家能够有所帮助!

本文地址:http://com.8s8s.com/it/it22457.htm