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

Visual C++

  1. // WebSiteSettingPage.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "myfirewall.h"
  5. #include "WebSiteSettingPage.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. // CWebSiteSettingPage property page
  14. IMPLEMENT_DYNCREATE(CWebSiteSettingPage, CPropertyPage)
  15. CWebSiteSettingPage::CWebSiteSettingPage() : CPropertyPage(CWebSiteSettingPage::IDD)
  16. {
  17. //{{AFX_DATA_INIT(CWebSiteSettingPage)
  18. // NOTE: the ClassWizard will add member initialization here
  19. //}}AFX_DATA_INIT
  20. }
  21. CWebSiteSettingPage::~CWebSiteSettingPage()
  22. {
  23. }
  24. void CWebSiteSettingPage::DoDataExchange(CDataExchange* pDX)
  25. {
  26. CPropertyPage::DoDataExchange(pDX);
  27. //{{AFX_DATA_MAP(CWebSiteSettingPage)
  28. DDX_Control(pDX, IDC_WEBSITE_LIST, m_WebSiteList);
  29. //}}AFX_DATA_MAP
  30. }
  31. BEGIN_MESSAGE_MAP(CWebSiteSettingPage, CPropertyPage)
  32. //{{AFX_MSG_MAP(CWebSiteSettingPage)
  33. ON_BN_CLICKED(IDC_ADD_WEBSITE, OnAddWebsite)
  34. ON_BN_CLICKED(IDC_DELETE_WEBSITE, OnDeleteWebsite)
  35. ON_NOTIFY(NM_RCLICK, IDC_WEBSITE_LIST, OnRclickWebsiteList)
  36. //}}AFX_MSG_MAP
  37. ON_COMMAND(IDM_DEL_WEBSITE, OnDeleteWebsite)
  38. END_MESSAGE_MAP()
  39. /////////////////////////////////////////////////////////////////////////////
  40. // CWebSiteSettingPage message handlers
  41. BOOL CWebSiteSettingPage::OnInitDialog() 
  42. {
  43. CPropertyPage::OnInitDialog();
  44. // TODO: Add extra initialization here
  45. m_WebSiteList.InsertColumn(0,L"网站URL",LVCFMT_LEFT,150,-1);
  46. m_WebSiteList.InsertColumn(1,L"网站IP地址", LVCFMT_LEFT, 130, -1);
  47. m_WebSiteList.InsertColumn(2,L"描述",LVCFMT_LEFT,300,-1);
  48. m_WebSiteList.ModifyStyle(LVS_TYPEMASK,LVS_REPORT);
  49. m_WebSiteList.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
  50. return TRUE;  // return TRUE unless you set the focus to a control
  51.               // EXCEPTION: OCX Property Pages should return FALSE
  52. }
  53. void CWebSiteSettingPage::OnAddWebsite() 
  54. {
  55. // TODO: Add your control notification handler code here
  56. TCHAR szWebSiteURL[256];
  57. CString strWebSiteDescription;
  58. GetDlgItemText(IDC_WEBSITE_URL, szWebSiteURL, 256);
  59. GetDlgItemText(IDC_WEBSITE_DESCRIPTION, strWebSiteDescription);
  60. if (_tcscmp(szWebSiteURL, L"") == 0)
  61. {
  62. AfxMessageBox(L"请输入网站URL!");
  63. return ;
  64. }
  65. WSADATA WSAData;
  66. if(WSAStartup(MAKEWORD(2,2),&WSAData)!=0) //初始化套接字
  67. {
  68. AfxMessageBox(L"套接字初始化失败!");
  69. return ;
  70. }
  71. USES_CONVERSION;
  72. int nLen = strlen(W2A(szWebSiteURL));
  73. char *sURL = new char[nLen+1];
  74. strncpy(sURL, W2A(szWebSiteURL), nLen);
  75. sURL[nLen] = '';
  76. // 通过网站URL获取IP地址
  77. hostent *pHostent = gethostbyname(sURL);
  78. delete []sURL;
  79. if (NULL == pHostent)
  80. {
  81. AfxMessageBox(L"通过网站URL获取IP地址失败!rnrn可能原因:rn  1、网站URL拼写错误;rn  2、主机没有连接网络。");
  82. return ;
  83. }
  84. // 解析返回的hostent信息
  85. for (int i=0; pHostent->h_addr_list[i]!=NULL; i++)
  86. {
  87. sockaddr_in sockaddr;
  88. memcpy(&sockaddr.sin_addr.S_un.S_addr,pHostent->h_addr_list[i],pHostent->h_length);
  89. // 设置过滤规则
  90. PassthruFilter RuleItem;
  91. RuleItem.sourceIP        = 0;
  92. RuleItem.sourcePort      = 0;
  93. RuleItem.destinationIP   = ntohl(sockaddr.sin_addr.S_un.S_addr);
  94. RuleItem.destinationPort = 0;
  95. RuleItem.protocol = 0;
  96. _tcscpy(RuleItem.szWebSiteURL, szWebSiteURL);
  97. // if (i == 0) // 这样做是为了在 WebSiteList 中显示的时候只显示一个URL,因为一个URL可能对应多个IP
  98. {
  99. _tcscpy(RuleItem.szDescription, strWebSiteDescription);
  100. }
  101. RuleItem.bDrop = TRUE;
  102. // CString ss;
  103. // ss.Format(L"%s", A2W(inet_ntoa(sockaddr.sin_addr)));
  104. // AfxMessageBox(ss);
  105. // 增加过滤规则
  106. g_RuleFile.AddKerRules(&RuleItem, 1);
  107. }
  108. // 保存过滤规则
  109. g_RuleFile.SaveRules();
  110. // 将过滤规则应用到核心层
  111. theApp.ApplyKerRules();
  112. // 将该网址及其信息添加到 WebSiteList 中
  113. ::PostMessage(g_hMainWnd, UPDATE_WEBSITE_LIST, 0, 0);
  114. // 保存日志文件
  115. char szContent[256];
  116. sprintf(szContent, "添加一个恶意网站,URL:%s,描述:%s。", W2A(szWebSiteURL), W2A(strWebSiteDescription));
  117. SaveLogFile(szContent);
  118. // 清空两个编辑框
  119. SetDlgItemText(IDC_WEBSITE_URL, L"");
  120. SetDlgItemText(IDC_WEBSITE_DESCRIPTION, L"");
  121. }
  122. void CWebSiteSettingPage::OnDeleteWebsite() 
  123. {
  124. // TODO: Add your control notification handler code here
  125. // 获得选中的行号
  126. int nItem = m_WebSiteList.GetNextItem(-1,LVNI_ALL|LVNI_SELECTED);
  127. // 获得网站URL
  128. TCHAR szWebSiteURL[50];
  129. _tcscpy(szWebSiteURL, m_WebSiteList.GetItemText(nItem, 0));
  130. // 删除规则并保存
  131. g_RuleFile.DelKerRuleByURL(szWebSiteURL);
  132. // 将规则在 AccessCtrlList 控件上显示出来
  133. ::PostMessage(g_hMainWnd, UPDATE_WEBSITE_LIST, 0, 0);
  134. // 将规则应用到核心层模块
  135. theApp.ApplyKerRules();
  136. // 保存日志文件
  137. char szContent[256];
  138. USES_CONVERSION;
  139. sprintf(szContent, "删除恶意网站:%s。", W2A(szWebSiteURL));
  140. SaveLogFile(szContent);
  141. }
  142. void CWebSiteSettingPage::OnRclickWebsiteList(NMHDR* pNMHDR, LRESULT* pResult) 
  143. {
  144. // TODO: Add your control notification handler code here
  145. CMenu menu,*pSubMenu;
  146. menu.LoadMenu(IDR_WEBSITE_MENU);
  147. pSubMenu=menu.GetSubMenu(0);
  148. // 根据应用程序的状态来修改右键菜单的内容
  149. CPoint point;
  150. GetCursorPos(&point);
  151. pSubMenu->TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,this);
  152. *pResult = 0;
  153. }