最近用API中的PF_FILTER_DESCRIPTOR写了一个简单的过滤器,发现了一个奇怪的问题,网上也有人问但没有答案,期望大牛们不吝赐教啊!
我的防火墙要求很简单,阻止客户机B向本机A的指定端口连接。我在infilter的srcIP里填充B的IP地址,dstIP里填充本机A的IP地址,执行
PfAddFiltersToInterface(hInterface, 1, &inFilter, 0, NULL, &fHandle)后,B连不上A了,但是A的一切网络连接也被阻塞了,
(上不了网,ping不通)。然后我试了一下,不管我怎么设置源目的IP以及端口,A都会网络阻塞,我记得一开始做的时候没有这个问题,可能
代码那里出错了,请大家帮忙看一下~~~有些变量的定义没贴,但全声明了,类型也肯定没问题if(NO_ERROR!=PfBindInterfaceToIPAddress(hInterface, PF_IPV4,localIp))
MessageBox("bind error");
    FILTER_HANDLE fHandle;
    // 填充过滤包的规则结构
    PF_FILTER_DESCRIPTOR inFilter;
    inFilter.dwFilterFlags = FD_FLAGS_NOSYN; //一直添这个值
    inFilter.dwRule = 0; //一直添这个值
    inFilter.pfatType = PF_IPV4; //用 ipV4 地址
//从IP控件读取并转换为unlong的ulsrip和uldsip inFilter.SrcAddr =(PBYTE)&ulsrIP;
inFilter.DstAddr =(PBYTE)&uldsIP;
inFilter.wSrcPort = 80;
inFilter.wDstPort = 80; //目标端口 80(http 服务) inFilter.wSrcPortHighRange = inFilter.wSrcPort;
        inFilter.wDstPortHighRange = inFilter.wDstPort;
        inFilter.dwProtocol = FILTER_PROTO_TCP; // 过滤的协议
         inFilter.SrcMask = (PBYTE)"\xff\xff\xff\xff"; //设置本地子网掩码
inFilter.DstMask = 0;
    // 加入一个过滤接口
    PfAddFiltersToInterface(hInterface, 1, &inFilter, 0, NULL, &fHandle); //PfAddFiltersToInterface(hInterface, 0, NULL, 1, &inFilter, &fHandle);
    // 设置一个调试断点
    // 移除过滤接口
    PfRemoveFilterHandles(hInterface, 1, &fHandle);
    PfUnBindInterface(hInterface);
    PfDeleteInterface(hInterface);