最近用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);
我的防火墙要求很简单,阻止客户机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);
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货