Acl.h
上传用户:zhuzhu0204
上传日期:2020-07-13
资源大小:13165k
文件大小:2k
开发平台:

Visual C++

  1. ///////////////////////////////////////////////
  2. // Acl.h文件
  3. #include "../common/PMacRes.h"
  4. /*
  5. PMacRes.h 中定义了MyFireWall主模块和LSP模块的常量,全部是#define *** ***
  6. */
  7. #include "../common/TypeStruct.h"
  8. /*
  9. TypeStruct.h 中定义的结构体有:
  10. 1、用户层过滤规则 struct RULE_ITEM
  11. 2、文件头结构 struct RULE_FILE_HEADER
  12. 3、文件结构 struct RULE_FILE
  13. 4、会话 struct SESSION
  14. 5、询问会话 struct QUERY_SESSION
  15. 6、LSP的IO控制结构 struct LSP_IO_CONTROL
  16. 7、DLL导出函数 typedef int  (__stdcall * PFNLSPIoControl)(LSP_IO_CONTROL *pIoControl, int nType);
  17. */
  18.  
  19. class CAcl
  20. {
  21. /* 
  22. 为每个套节字创建一个Session
  23. 负责跟踪应用程序中的会话,判断是否允许会话上的网络活动
  24. */
  25. public:
  26. CAcl();
  27. ~CAcl();
  28. // 套节字的创建与关闭,对应着Session的创建与关闭
  29. void CheckSocket(SOCKET s, int af, int type, int protocol);
  30. void CheckCloseSocket(SOCKET s);
  31. void CheckBind(SOCKET s, const struct sockaddr *addr);
  32. // 查看会话是否允许(会话的远程服务信息)
  33. int CheckAccept(SOCKET s, SOCKET sNew, sockaddr FAR *addr);
  34. int CheckConnect(SOCKET s, const struct sockaddr FAR *addr);
  35. int CheckSendTo(SOCKET s, const SOCKADDR *pTo);
  36. int CheckRecvFrom(SOCKET s, SOCKADDR *pFrom);
  37. private:
  38. // 设置会话的属性
  39. void SetSession(SESSION *pSession, USHORT usRemotePort, ULONG ulRemoteIP, UCHAR ucDirection);
  40. // 向应用程序通知一个会话
  41. void NotifySession(SESSION *pSession, int nCode);
  42. // 返回特定会话的访问权限
  43. int GetAccessInfo(SESSION *pSession);
  44. // 从工作模式返回访问权限
  45. int GetAccessFromWorkMode(SESSION *pSession);
  46. // 在规则文件中查找指定程序的过滤规则
  47. int FindRule(TCHAR *szAppName, int nStart);
  48. // 返回索引
  49. int CreateSession(SOCKET s, int nProtocol);
  50. // 删除会话
  51. void DeleteSession(SOCKET s);
  52. // 初始化会话
  53. void InitializeSession(SESSION *pSession);
  54. // 根据套接字句柄查找特定会话的索引
  55. int FindSession(SOCKET s);
  56. //成员变量
  57. SESSION *m_pSession;
  58. int m_nSessionCount;
  59. int m_nSessionMaxCount;
  60. static UCHAR QueryAccess(SESSION *pSession);
  61. static BOOL IsLocalIP(DWORD dwIP);
  62. };