c++ - 使用 WFP 过滤器允许端口和 ip 对
问题描述
我希望有防火墙将我的设备与网络隔离,但我希望允许的少数端口/ip 对除外。
例如,为了允许某些端口(对于所有 IP 地址),我使用以下过滤器:
FWPM_FILTER_CONDITION0 条件[2];
conditions[0].fieldKey = FWPM_CONDITION_IP_REMOTE_PORT;
conditions[0].conditionValue.type = FWP_UINT16;
conditions[0].conditionValue.uint16 = port;
conditions[1].fieldKey = FWPM_CONDITION_IP_PROTOCOL;
conditions[1].conditionValue.type = FWP_UINT8;
conditions[1].conditionValue.uint32 = 0;
conditions[1].matchType = FWP_MATCH_GREATER_OR_EQUAL;
Filter.subLayerKey = myGUID;
Filter.displayData.name = L"myFirewall";
Filter.action.type = FWP_ACTION_PERMIT;
Filter.weight.type = FWP_UINT64;
uint64 weightvalue = 0x102;
Filter.weight.uint64 = &weightvalue;
Filter.flags = FWPM_FILTER_FLAG_PERSISTENT;
Filter.filterCondition = conditions;
Filter.layerKey = FWPM_LAYER_OUTBOUND_TRANSPORT_V4
Filter.numFilterConditions = 2;
此过滤器允许具有单个目标端口的数据包,而不管其 ip。如何将特定 ip 添加到过滤条件?
谢谢
解决方案
匹配远程 IP 地址的过滤条件
conditions[1].fieldKey = FWPM_CONDITION_IP_PROTOCOL;
conditions[1].conditionValue.type = FWP_V4_ADDR_MASK;
conditions[1].conditionValue.v4AddrMask = new FWP_V4_ADDR_AND_MASK;
conditions[1].conditionValue.v4AddrMask->addr = ip;
conditions[1].conditionValue.v4AddrMask->mask = VISTA_SUBNET_MASK;
conditions[1].matchType = FWP_MATCH_EQUAL;
推荐阅读
- sql - 多表信息的条件比较
- swift - 我是在创建两个单例对象还是只是一个参考?
- kubernetes - K8s http Liveness 探测仅在 1 个工作节点上失败
- php - Laravel 基于数组从数据库中选择相关数据
- python - 如何从一个 .txt 文件中提取一堆行并将它们添加到另一个文件中?
- javascript - 我可以使用哪个正则表达式在标签内查找电子邮件地址?
- elixir - 如何在我的本地机器上运行 mozilla 集线器?
- pdf - 有没有办法使用 MS Graph API 对我们的 WOPI 主机提供的文档进行操作?
- javascript - 如何在 Javascript 中获取日期时间选择器引导程序的值
- makefile - 在带有变量的makefile中使用word函数