首先大家要知道在瀏覽器上瀏覽虛擬主機,必須使用Hosts文件或功能變數名稱系統(DNS)實現主機名到IP地址的解析。在區域網中用Hosts文件或DNS都可以,在Internet上只能用DNS了。 1.當用戶輸入一個功能變數名稱以百度為例(www.baidu.com)。 2.首先會到C:\Windows\System ...
首先大家要知道在瀏覽器上瀏覽虛擬主機,必須使用Hosts文件或功能變數名稱系統(DNS)實現主機名到IP地址的解析。在區域網中用Hosts文件或DNS都可以,在Internet上只能用DNS了。
1.當用戶輸入一個功能變數名稱以百度為例(www.baidu.com)。
2.首先會到C:\Windows\System32\drivers\etc目錄中用Hosts文件去查詢相關的IP是否存在,如果存在就會訪問該IP地址。
3.不存在該功能變數名稱解析,那麼就會到公網DNS查找。
當你訪問功能變數名稱出現異常,可能Hosts文件被修改了或者DNS被挾持了。
解決方案:
1.首先檢查你的C:\Windows\System32\drivers\etc目錄下的Hosts文件查看是否存在功能變數名稱強制轉向IP的情況,有的話把這個選項去掉。找不到文件設置隱藏文件可見。
2.DNS被劫持或篡改了。你可以手動修改本地電腦的DNS,預設為空如下圖,你可以在首選設置為:114.114.114.114,備用設置為:114.114.115.115;並查殺一下病毒。或者你的路由器被篡改了(設置的密碼太弱),建議用修複工具修改。
上面介紹了網路正常功能變數名稱訪問出問題的原因,那麼下麵就帶大家使用C#搞一個Hosts修改工具(大家可以來研究,瞭解技術,但是不要用來惡搞他人):
private static void updateHosts(string ip,string domain) { string path = @"C:\WINDOWS\system32\drivers\etc\hosts"; //通常情況下這個文件是只讀的,所以寫入之前要取消只讀 File.SetAttributes(path, File.GetAttributes(path) & (~FileAttributes.ReadOnly));//取消只讀 //1.創建文件流 FileStream fs =ip==""? new FileStream(path, FileMode.Create): new FileStream(path, FileMode.Append); //2.創建寫入器 StreamWriter sw = new StreamWriter(fs, Encoding.UTF8); //3.開始寫入 bool result = false;//標識是否寫入成功 try { StringBuilder sb = new StringBuilder(); sb.Append(ip);//IP地址 sb.Append(" "); sb.Append(domain);//網址 sw.WriteLine(sb.ToString()); result = true; } catch (Exception ex) { result = false; } finally { //4.關閉寫入器 if (sw != null) { sw.Close(); } //5.關閉文件流 if (fs != null) { fs.Close(); } } if (result == true) { MessageBox.Show("成功!"); File.SetAttributes(path, File.GetAttributes(path) | FileAttributes.ReadOnly);//設置只讀 } else { MessageBox.Show("失敗!"); return; } }
在網址部分輸入www.baidu.com,之後添加試試看,你還能訪問百度嗎?
沒關係,之後你點清除,你又可以訪問了!
源碼地址:https://files.cnblogs.com/files/jiyuwu/HostsEdit.zip