滴水逆向联盟

标题: VC++实现host文件读写 [打印本页]

作者: 大灰狼    时间: 2014-11-5 09:25
标题: VC++实现host文件读写

Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统再会将网址提交DNS域名解析服务器进行IP地址的解析。
现在让我们来看看Hosts在Windows中是怎么工作的。
我们知道在网络上访问网站,要首先通过DNS服务器把要访问的网络域名解析成XXX.XXX.XXX.XXX的IP地址后,计算机才能对这个网络域名作访问。
要是对于每个域名请求我们都要等待域名服务器解析后返回IP信息,这样访问网络的效率就会降低,因为DNS做域名解析和返回IP都需要时间。
为了提高对经常访问的网络域名的解析效率,可以通过利用Hosts文件中建立域名和IP的映射关系来达到目的。根据Windows系统规定,在进行DNS请求以前,Windows系统会先检查自己的Hosts文件中是否有这个网络域名映射关系。如果有,则调用这个IP地址映射,如果没有,再向已知的DNS服务器提出域名解析。也就是说Hosts的请求级别比DNS高。

下面我们来实现读写host文件

  1. void CtesthostDlg::OnBnClickedButton1()  
  2. {  
  3.   
  4.     CString strPath;  
  5.     CString strSystem, strWindows;  
  6.     ::GetSystemDirectory(strSystem.GetBuffer(MAX_PATH), MAX_PATH);  
  7.     ::GetWindowsDirectory(strWindows.GetBuffer(32), 32);  
  8.     TCHAR szDriver[5] = {0};  
  9.     RtlCopyMemory(szDriver, strWindows.GetBuffer(), 3*sizeof(TCHAR));  
  10.     szDriver[3] = 0;  
  11.     strPath.Format("%s\\drivers\\etc\\hosts", strSystem);     
  12.   
  13.     CStdioFile sf;     
  14.     CFileException e;   
  15.     CString strSign, strTemp, strFile;  
  16.     bool bOpen = sf.Open(strPath, CFile::typeText|CFile::modeRead, &e);  
  17.     if(bOpen)   
  18.     {         
  19.         int cnt = 0;  
  20.         while(sf.ReadString(strSign) != NULL)   
  21.         {  
  22.             cnt++;  
  23.             strFile += strSign;  
  24.             strFile += "\r\n";   
  25.             if(strSign.Trim().GetLength() == 0 || strSign.GetAt(0)=='#'|| strSign.GetAt(0)==';')  
  26.                 continue;            
  27.             strTemp.Format("%d", cnt);  
  28.   
  29.         }  
  30.         sf.Close();  
  31.     }  
  32.     MessageBox(strFile);  
  33.     if (strFile.GetLength()>5)  
  34.     {  
  35.   
  36.   
  37.     }   
  38.     else  
  39.     {  
  40.   
  41.   
  42.     }  
  43.   
  44.   
  45.   
  46.   
  47.     // TODO: 在此添加控件通知处理程序代码  
  48. }  
  49.   
  50. void CtesthostDlg::OnBnClickedButton2()  
  51. {  
  52.   
  53.     CString strPath;  
  54.     CString strSystem, strWindows;  
  55.     ::GetSystemDirectory(strSystem.GetBuffer(MAX_PATH), MAX_PATH);  
  56.     ::GetWindowsDirectory(strWindows.GetBuffer(32), 32);  
  57.     TCHAR szDriver[5] = {0};  
  58.     RtlCopyMemory(szDriver, strWindows.GetBuffer(), 3*sizeof(TCHAR));  
  59.     szDriver[3] = 0;  
  60.     strPath.Format("%s\\drivers\\etc\\hosts", strSystem);     
  61.       
  62.     CString str_MSBC="8588";   
  63.     CStringA str99 =(CStringA) str_MSBC;  
  64.     CString fileName;   
  65.     fileName=strPath;  
  66.     CStdioFile file;     
  67.     file.Open(fileName,CFile::modeCreate | CFile::modeWrite);   
  68.     file.SeekToEnd();  
  69.     file.Write( str99,str99.GetLength());   
  70.     file.Close();   
  71.       
  72.   
  73.     DWORD   dwAttrs=GetFileAttributes(strPath);   
  74.     dwAttrs==INVALID_FILE_ATTRIBUTES;  
  75.     if   (!(dwAttrs  &  FILE_ATTRIBUTE_READONLY))     
  76.     {     
  77.         SetFileAttributes(strPath, dwAttrs | FILE_ATTRIBUTE_READONLY);     
  78.     }     
  79.   
  80.   
  81.     // TODO: 在此添加控件通知处理程序代码  
  82. }  
复制代码







作者: OneTime    时间: 2014-11-11 11:24
C盘HOST文件好像主要是针对网络访问的




欢迎光临 滴水逆向联盟 (http://www.dtdebug.com/) Powered by Discuz! X3.2