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

Visual C++

  1. // IPRulePage.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "myfirewall.h"
  5. #include "IPRulePage.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. extern CMyFireWallApp theApp;
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CIPRulePage property page
  14. IMPLEMENT_DYNCREATE(CIPRulePage, CPropertyPage)
  15. CIPRulePage::CIPRulePage() : CPropertyPage(CIPRulePage::IDD)
  16. {
  17. //{{AFX_DATA_INIT(CIPRulePage)
  18. // NOTE: the ClassWizard will add member initialization here
  19. //}}AFX_DATA_INIT
  20. }
  21. CIPRulePage::~CIPRulePage()
  22. {
  23. }
  24. void CIPRulePage::DoDataExchange(CDataExchange* pDX)
  25. {
  26. CPropertyPage::DoDataExchange(pDX);
  27. //{{AFX_DATA_MAP(CIPRulePage)
  28. DDX_Control(pDX, IDC_IP_RULE_LIST, m_IPRuleList);
  29. //}}AFX_DATA_MAP
  30. }
  31. BEGIN_MESSAGE_MAP(CIPRulePage, CPropertyPage)
  32. //{{AFX_MSG_MAP(CIPRulePage)
  33. ON_NOTIFY(NM_RCLICK, IDC_IP_RULE_LIST, OnRclickIPRuleList)
  34. //}}AFX_MSG_MAP
  35. ON_COMMAND(IDM_MODIFY_IPRULE, OnModifyIPRule)
  36. END_MESSAGE_MAP()
  37. /////////////////////////////////////////////////////////////////////////////
  38. // CIPRulePage message handlers
  39. BOOL CIPRulePage::OnInitDialog() 
  40. {
  41. CPropertyPage::OnInitDialog();
  42. // TODO: Add extra initialization here
  43. m_IPRuleList.InsertColumn(0,L"规则名称",LVCFMT_LEFT,120,-1);
  44. m_IPRuleList.InsertColumn(1,L"状态", LVCFMT_LEFT, 70, -1);
  45. m_IPRuleList.InsertColumn(2,L"对应协议", LVCFMT_LEFT, 70, -1);
  46. m_IPRuleList.InsertColumn(3,L"使用端口",LVCFMT_LEFT,70,-1);
  47. m_IPRuleList.InsertColumn(4,L"规则描述",LVCFMT_LEFT,238,-1);
  48. m_IPRuleList.ModifyStyle(LVS_TYPEMASK,LVS_REPORT);
  49. m_IPRuleList.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
  50. // 如果IP规则没有保存到文件中,则保存
  51. if (g_RuleFile.m_header.bIsIPRuleSaved == FALSE)
  52. {
  53. IPRule IPRuleItem[10];
  54. // Ping入
  55. IPRuleItem[0].bState = FALSE;
  56. _tcscpy(IPRuleItem[0].description, L"Ping入可以使攻击者获得您计算机的活动状态等信息");
  57. _tcscpy(IPRuleItem[0].name, L"Ping入");
  58. IPRuleItem[0].port = 0;
  59. IPRuleItem[0].protocol = 1; // 为1表示是ICMP,TCP:6,UDP:17
  60. // Ping出
  61. IPRuleItem[1].bState = TRUE;
  62. _tcscpy(IPRuleItem[1].description, L"Ping出可以使您获得对方计算机的活动状态等信息");
  63. _tcscpy(IPRuleItem[1].name, L"Ping出");
  64. IPRuleItem[1].port = 0;
  65. IPRuleItem[1].protocol = 1;
  66. // RPC
  67. IPRuleItem[2].bState = FALSE;
  68. _tcscpy(IPRuleItem[2].description, L"RPC可使攻击者远程控制您的计算机");
  69. _tcscpy(IPRuleItem[2].name, L"RPC(远程过程调用)");
  70. IPRuleItem[2].port = 135;
  71. IPRuleItem[2].protocol = 0;
  72. // DNS
  73. IPRuleItem[3].bState = TRUE;
  74. _tcscpy(IPRuleItem[3].description, L"DNS作用是将网站域名解析为IP地址");
  75. _tcscpy(IPRuleItem[3].name, L"DNS(域名系统)");
  76. IPRuleItem[3].port = 53;
  77. IPRuleItem[3].protocol = 17;
  78. // 局域网共享
  79. IPRuleItem[4].bState = FALSE;
  80. _tcscpy(IPRuleItem[4].description, L"局域网共享可使局域网中的其他用户访问您的计算机共享文件");
  81. _tcscpy(IPRuleItem[4].name, L"局域网共享");
  82. IPRuleItem[4].port = 139;
  83. IPRuleItem[4].protocol = 0;
  84. // 添加IP规则
  85. g_RuleFile.AddIPRules(IPRuleItem, 5);
  86. g_RuleFile.m_header.bIsIPRuleSaved = TRUE;
  87. // 保存IP规则
  88. g_RuleFile.SaveRules();
  89. // 将IP规则应用到核心层
  90. theApp.ApplyIPRules(-1); // 参数 -1 表示作用于所有的IP规则
  91. }
  92. int nPing = (int)g_RuleFile.m_pIPRules[0].bState *10 + (int)g_RuleFile.m_pIPRules[1].bState;
  93. // 设置Ping入和Ping出
  94. PtSetPing(&nPing);
  95. // 更新 IPRuleList 内容
  96. ::PostMessage(g_hMainWnd, UPDATE_IPRULE_LIST, 0, 0);
  97. return TRUE;  // return TRUE unless you set the focus to a control
  98.               // EXCEPTION: OCX Property Pages should return FALSE
  99. }
  100. void CIPRulePage::OnRclickIPRuleList(NMHDR* pNMHDR, LRESULT* pResult) 
  101. {
  102. // TODO: Add your control notification handler code here
  103. CMenu menu,*pSubMenu;
  104. menu.LoadMenu(IDR_IPRULE_MENU);
  105. pSubMenu=menu.GetSubMenu(0);
  106. // 根据应用程序的状态来修改右键菜单的内容
  107. CString strStatus;
  108. strStatus = m_IPRuleList.GetItemText(m_IPRuleList.GetNextItem(-1,LVNI_ALL|LVNI_SELECTED),1);
  109. if (strStatus == " 允许 ")
  110. {
  111. pSubMenu->ModifyMenu(IDM_MODIFY_IPRULE, MF_BYCOMMAND, IDM_MODIFY_IPRULE, L" 禁止 ");
  112. else
  113. {
  114. pSubMenu->ModifyMenu(IDM_MODIFY_IPRULE, MF_BYCOMMAND, IDM_MODIFY_IPRULE, L" 允许 ");
  115. }
  116. CPoint point;
  117. GetCursorPos(&point);
  118. pSubMenu->TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,this);
  119. *pResult = 0;
  120. }
  121. void CIPRulePage::OnModifyIPRule()
  122. {
  123. // 获得选中的项
  124. int nItem = m_IPRuleList.GetNextItem(-1,LVNI_ALL|LVNI_SELECTED);
  125. // 修改相应规则的状态
  126. g_RuleFile.m_pIPRules[nItem].bState = !g_RuleFile.m_pIPRules[nItem].bState;
  127. // 应用修改后的规则
  128. theApp.ApplyIPRules(nItem); // 参数 nItem 表示仅修改第 nItem 个IP规则
  129. // 更新 IPRuleList 显示内容
  130. ::PostMessage(g_hMainWnd, UPDATE_IPRULE_LIST, 0, 0);
  131. // 保存日志文件
  132. TCHAR szRuleItem[MAX_PATH];
  133. // 得到当前选中的进程路径
  134. _tcscpy(szRuleItem, m_IPRuleList.GetItemText(nItem,0));
  135. char szContent[256];
  136. USES_CONVERSION;
  137. if (g_RuleFile.m_pIPRules[nItem].bState == TRUE)
  138. {
  139. sprintf(szContent, "将IP规则“%s”的状态修改为:允许。", W2A(szRuleItem));
  140. else
  141. {
  142. sprintf(szContent, "将IP规则“%s”的状态修改为:禁止。", W2A(szRuleItem));
  143. }
  144. SaveLogFile(szContent);
  145. }