You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用WFP阻止特定端口时出现0x80320002错误求助

解决WFP阻止特定端口时出现0x80320002错误的问题

错误0x80320002对应FWP_E_FILTER_CONDITION_NOT_FOUND,原因是你在ALE_AUTH_CONNECT层使用了不属于该层的条件常量:FWPM_CONDITION_IP_DESTINATION_PORT是传输层(如FWPM_LAYER_OUTBOUND_TRANSPORT_V4)的条件,并不适用于ALE(应用层强制)层。ALE层有专属的端口条件常量。

修正步骤

1. 使用ALE层的远程端口条件

将条件字段替换为FWPM_CONDITION_ALE_REMOTE_PORT,这才是ALE层匹配目标端口的正确常量。

2. (推荐)添加传输协议条件

端口依赖传输层协议(TCP/UDP),添加协议条件可以精确控制要阻止的协议类型(比如只阻止TCP 443,而非所有协议的443端口)。

修正后的完整代码示例

#include <Windows.h>
#include <fwpmu.h>
#include <stdio.h>

#pragma comment(lib, "Fwpuclnt")

int main() {
    HANDLE hEngine = NULL;
    DWORD status = FwpmEngineOpen(nullptr, RPC_C_AUTHN_DEFAULT, nullptr, nullptr, &hEngine);
    if (status != ERROR_SUCCESS) {
        printf("FwpmEngineOpen failed: 0x%X\n", status);
        return 1;
    }

    FWPM_FILTER filter = {0};
    WCHAR filterName[] = L"Block outbound TCP 443 port";
    filter.displayData.name = filterName;
    filter.action.type = FWP_ACTION_BLOCK;
    filter.weight.type = FWP_UINT8;
    filter.weight.uint8 = 0x80; // 设置权重,确保优先级合理

    // 配置筛选器条件:远程端口443 + TCP协议
    FWPM_FILTER_CONDITION conditions[2] = {0};

    // 条件1:远程端口等于443
    conditions[0].fieldKey = FWPM_CONDITION_ALE_REMOTE_PORT;
    conditions[0].matchType = FWP_MATCH_EQUAL;
    conditions[0].conditionValue.type = FWP_UINT16;
    conditions[0].conditionValue.uint16 = 443;

    // 条件2:协议为TCP(6),如果要阻止UDP则改为17
    conditions[1].fieldKey = FWPM_CONDITION_ALE_IP_PROTOCOL;
    conditions[1].matchType = FWP_MATCH_EQUAL;
    conditions[1].conditionValue.type = FWP_UINT8;
    conditions[1].conditionValue.uint8 = 6;

    filter.filterCondition = conditions;
    filter.numFilterConditions = 2;

    // 添加IPv4筛选器
    filter.layerKey = FWPM_LAYER_ALE_AUTH_CONNECT_V4;
    status = FwpmFilterAdd(hEngine, &filter, nullptr, nullptr);
    if (status != ERROR_SUCCESS) {
        printf("FwpmFilterAdd (IPv4) failed: 0x%X\n", status);
    }

    // 添加IPv6筛选器
    filter.layerKey = FWPM_LAYER_ALE_AUTH_CONNECT_V6;
    status = FwpmFilterAdd(hEngine, &filter, nullptr, nullptr);
    if (status != ERROR_SUCCESS) {
        printf("FwpmFilterAdd (IPv6) failed: 0x%X\n", status);
    }

    FwpmEngineClose(hEngine);
    return 0;
}

额外注意事项

  • 运行程序需要管理员权限,WFP操作属于系统级配置,普通权限无法完成。
  • 记得添加错误检查,方便排查后续问题(原代码未处理API返回值,调试时很重要)。
  • 如果需要阻止所有协议的443端口,可以移除协议条件,但这种场景很少见,通常建议明确指定协议。

内容的提问来源于stack exchange,提问作者Jaymba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 19:40:05