首页
社区
课程
招聘
[原创]一个简单基于WFP模型的防火墙设计实现
发表于: 2013-6-19 12:07 63627

[原创]一个简单基于WFP模型的防火墙设计实现

2013-6-19 12:07
63627
enum
{
    AnyAddr=0,
    UniqueAddr,
    RangeAddr,
    UnknownAddr
};
enum
{
    RulesDirectionAny=0,
    RulesDirectionUp,
    RulesDirectionDown,
    RulesDirectionUnknown
};
enum
{
    RulesProtocolAny = 0
};
union{
        UINT32   u32;
        struct
        {
            UINT32  RemoteAddrType :2;  //取值为AnyAddr,UniqueAddr,RangeAddr
            UINT32  LocalAddrType :2;   //取值为AnyAddr,UniqueAddr,RangeAddr
            UINT32  RemotePortType :2;  //取值为AnyAddr,UniqueAddr,RangeAddr
            UINT32  LocalPortType :2;   //取值为AnyAddr,UniqueAddr,RangeAddr
            UINT32  ProtocolType :8;//网络协议类型,和RFC文档的代码保持一致
            UINT32  Direction :2;//00:任意方向01:上行 10:下行 11:未定义
            UINT32  Access  :1;//是否允许访问,1为允许
            UINT32  IcmpType :5;
            UINT32  IcmpCode :5;
            UINT32  Reserved :3;
        }Bits;
}rule;
void 
NTAPI
WallALEConnectClassify(
   IN const FWPS_INCOMING_VALUES* inFixedValues,
   IN const FWPS_INCOMING_METADATA_VALUES* inMetaValues,
   IN OUT void* layerData,
   IN const void* classifyContext,
   IN const FWPS_FILTER* filter,
   IN UINT64 flowContext,
   OUT FWPS_CLASSIFY_OUT* classifyOut
   )
void 
NTAPI
WallALERecvAcceptClassify(
   IN const FWPS_INCOMING_VALUES* inFixedValues,
   IN const FWPS_INCOMING_METADATA_VALUES* inMetaValues,
   IN OUT void* layerData,
   IN const void* classifyContext,
   IN const FWPS_FILTER* filter,
   IN UINT64 flowContext,
   OUT FWPS_CLASSIFY_OUT* classifyOut
   );
packet = (PWALL_PENDED_PACKET)listEntry;
        if( gbBlockAll )
            packet->authConnectDecision = FWP_ACTION_BLOCK;
        else if( gbEnableProcessMonitor && !WallIsProcessTrafficPermit(packet))
            packet->authConnectDecision = FWP_ACTION_BLOCK;
        else if ( gbEnableIpMonitor && !WallIsIpTrafficPermit(packet))
            packet->authConnectDecision = FWP_ACTION_BLOCK;
        else if( gbEnableDnsMonitor && !WallIsDnsTrafficPermit( packet ))
            packet->authConnectDecision = FWP_ACTION_BLOCK;
        else
            packet->authConnectDecision = FWP_ACTION_PERMIT;
typedef struct _PROCESS_RULES_ELEM
{
    UINT32   crcPath;
    UINT32   rule;      //32位值,各个位的功能参看下边的宏定义
}PROCESS_RULES_ELEM,*PPROCESS_RULES_ELEM;
typedef struct _PROCESS_RULES_TABLE
{
    UINT8                count;
    PROCESS_RULES_ELEM  rules[ MAX_PROCESS_RULES_NUM ];
}PROCESS_RULES_TABLE,*PPROCESS_RULES_TABLE;
NTSTATUS
AddProcessRule( IN UINT32 crcPath,IN UINT32 rule )
{
    UINT8   xorsum = 0;
    UINT32  key,i;
    LOG("into\n");
    if( gProcessRulesTable.count >= MAX_PROCESS_RULES_NUM )
        return STATUS_PROCESS_RULES_FULL;
    if ( IsProcessRuleExist( crcPath ))
        return STATUS_PROCESS_RULES_EXISTED;
    if( crcPath == 0 )crcPath = ZERO_CRC_VALUE;
    key = crcPath;
	//哈希函数
    for( i = 0;i < 32;i++)
    {
        xorsum ^= key & 0xff;
        key >>= 1;
    }
	//处理哈希冲突
    for( i = xorsum;;i = (i + 1 ) % MAX_PROCESS_RULES_NUM )
    {
        if( gProcessRulesTable.rules[i].crcPath == 0 )
            break;
    }
    gProcessRulesTable.rules[i].crcPath = crcPath;
    gProcessRulesTable.rules[i].rule = rule;
    gProcessRulesTable.count++;
    return STATUS_SUCCESS;
}

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 9
支持
分享
最新回复 (74)
雪    币: 6723
活跃值: (1199)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
Thanks for share!
2013-6-19 12:39
0
雪    币: 88
活跃值: (45)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
多谢分享,
2013-6-19 12:42
0
雪    币: 81
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
3Q
2013-6-19 12:50
0
雪    币: 134
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
感谢分享 我有个同学就是做的这个 帮他下了
2013-6-19 13:00
0
雪    币: 371
活跃值: (72)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
6
感谢分享
2013-6-19 13:18
0
雪    币: 268
活跃值: (443)
能力值: ( LV9,RANK:375 )
在线值:
发帖
回帖
粉丝
7
感谢分享
2013-6-19 14:08
0
雪    币: 24893
活跃值: (1028)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
支持一下,这块的资料不多,大部分的都是MSDN上的。
2013-6-19 14:09
0
雪    币: 9
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
fkt
9
感谢分享 收藏
2013-6-19 14:22
0
雪    币: 1689
活跃值: (379)
能力值: ( LV15,RANK:440 )
在线值:
发帖
回帖
粉丝
10
刚上传了初始规则的注册表配置文件,里边有些常用的垃圾域名……
2013-6-20 05:09
0
雪    币: 73
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
这方面的资料不好找啊,谢谢分享了
2013-6-20 09:21
0
雪    币: 437
活跃值: (78)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
谢谢分享
2013-6-20 09:40
0
雪    币: 2271
活跃值: (2160)
能力值: (RANK:400 )
在线值:
发帖
回帖
粉丝
13
多谢分享~
2013-6-20 17:18
0
雪    币: 27
活跃值: (127)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
14
thanks for your share~
2013-6-20 22:31
0
雪    币: 435
活跃值: (1277)
能力值: ( LV13,RANK:388 )
在线值:
发帖
回帖
粉丝
15
感谢lz无私分享,
2013-6-20 22:45
0
雪    币: 167
活跃值: (68)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
thanks for share
2013-6-21 11:48
0
雪    币: 13
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
好东西好东西~~~感谢楼主分享
2013-6-21 11:51
0
雪    币: 14
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
谢谢楼主分享,文档写的不错
2013-6-21 12:39
0
雪    币: 224
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
19
lz分享了代码  也分享了优秀品质  哈哈  下面的继续夸
2013-6-21 16:43
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
楼主的分享精神值得称赞!下载下来学习
2013-6-21 22:53
0
雪    币: 1689
活跃值: (379)
能力值: ( LV15,RANK:440 )
在线值:
发帖
回帖
粉丝
21
分享精神倒是谈不上,主要原因是还没被包养……
代码一分钱不值,送给大家也许还有点儿用。
2013-6-22 18:45
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
感谢楼主的分享,以及作出的贡献
2013-10-21 14:33
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
感谢分享,收藏备用
2013-12-3 23:30
0
雪    币: 12
活跃值: (767)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
收藏,感谢分享~~
2013-12-4 17:38
0
雪    币: 65
活跃值: (112)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
25
“WFP被用于取代以前的NDIS过滤”
这话说的。。。。WFP的东西能替代ndis的东西?笑话。。。二者完全是不同层级上的东西,用途及适用场合都各自不同,何来替代一说
2013-12-4 17:56
0
游客
登录 | 注册 方可回帖
返回
//