Acl.h
上传用户:zhuzhu0204
上传日期:2020-07-13
资源大小:13165k
文件大小:2k
- ///////////////////////////////////////////////
- // Acl.h文件
- #include "../common/PMacRes.h"
- /*
- PMacRes.h 中定义了MyFireWall主模块和LSP模块的常量,全部是#define *** ***
- */
- #include "../common/TypeStruct.h"
- /*
- TypeStruct.h 中定义的结构体有:
- 1、用户层过滤规则 struct RULE_ITEM
- 2、文件头结构 struct RULE_FILE_HEADER
- 3、文件结构 struct RULE_FILE
- 4、会话 struct SESSION
- 5、询问会话 struct QUERY_SESSION
- 6、LSP的IO控制结构 struct LSP_IO_CONTROL
- 7、DLL导出函数 typedef int (__stdcall * PFNLSPIoControl)(LSP_IO_CONTROL *pIoControl, int nType);
- */
-
- class CAcl
- {
- /*
- 为每个套节字创建一个Session
- 负责跟踪应用程序中的会话,判断是否允许会话上的网络活动
- */
- public:
- CAcl();
- ~CAcl();
- // 套节字的创建与关闭,对应着Session的创建与关闭
- void CheckSocket(SOCKET s, int af, int type, int protocol);
- void CheckCloseSocket(SOCKET s);
- void CheckBind(SOCKET s, const struct sockaddr *addr);
- // 查看会话是否允许(会话的远程服务信息)
- int CheckAccept(SOCKET s, SOCKET sNew, sockaddr FAR *addr);
- int CheckConnect(SOCKET s, const struct sockaddr FAR *addr);
- int CheckSendTo(SOCKET s, const SOCKADDR *pTo);
- int CheckRecvFrom(SOCKET s, SOCKADDR *pFrom);
- private:
- // 设置会话的属性
- void SetSession(SESSION *pSession, USHORT usRemotePort, ULONG ulRemoteIP, UCHAR ucDirection);
- // 向应用程序通知一个会话
- void NotifySession(SESSION *pSession, int nCode);
- // 返回特定会话的访问权限
- int GetAccessInfo(SESSION *pSession);
- // 从工作模式返回访问权限
- int GetAccessFromWorkMode(SESSION *pSession);
- // 在规则文件中查找指定程序的过滤规则
- int FindRule(TCHAR *szAppName, int nStart);
- // 返回索引
- int CreateSession(SOCKET s, int nProtocol);
- // 删除会话
- void DeleteSession(SOCKET s);
- // 初始化会话
- void InitializeSession(SESSION *pSession);
- // 根据套接字句柄查找特定会话的索引
- int FindSession(SOCKET s);
- //成员变量
- SESSION *m_pSession;
- int m_nSessionCount;
- int m_nSessionMaxCount;
- static UCHAR QueryAccess(SESSION *pSession);
- static BOOL IsLocalIP(DWORD dwIP);
- };