如果按照標題的概念來看,其實網卡的 DNS 設定錯誤,仍然是可以上網的…
But…
所有的連線都要轉成 ip 位址的方式。
But…
不會有人去記住要使用的網站 ip 吧!
好,就算記住了,Android 系統的相關連線服務也還是靠 DNS 才能正確連線使用阿…所以還是來知道一下怎麼處理吧!
不過,會遭遇這種情境是比較弔詭點,通常是本身電腦環境的外在網路環境設定有大改變,才會發生這種抓取 DNS 錯誤的情況。
例如:
已經在電腦上安裝好 Android 的模擬器,或是因為開發 App 需要安裝 Android 的開發環境而設定的 Android 模擬器。
然後這台電腦環境的以外的網路環境設定改變,像是 DHCP 硬體升級/異動、Route 軟硬體升級/異動…或甚至是較為極端的該組織是使用還原系統的電腦。
可能都會遇到類似這樣的問題。
最顯而易見的結果如下:
開啟 Android 模擬器後其實就發現有網路不通的小圖示,但若仍不死心開啟 Chorme 瀏覽器試試看。
最後測試的結果,就是顯示網頁讀取失敗,而錯誤訊息中也透露出端倪,將問題指向是 DNS 設定錯誤的方向,這樣就比較知道如何解決。
在 Android 的模擬器中打開 WiFi 的設定:
就可以很明顯地看到 DNS 跟 DHCP 抓到的設定,完全不同。
所以,只好請出 Android 的 Adb 管理工具來處理了,正常來說 Android Adb 應該都位在 Android SDK 的安裝路徑底下的 platform-tools 資料夾中。
如果是 Visual Studio 的使用者
可以在 "工具" → "Android" → "Android Adb 命令提示字元" 來啟動。
進到命令提示字元後,首先使用 "adb root" 取得 adb 的管理者權限。
在透過 "adb shell" 進入 Android 模擬器的指令管理。(此時要更改的 Android 模擬器要是保持開著的狀態)。
接著再繼續輸入 "setprop net.eth0.dns1 1.1.1.1"。
其中:
setprop 是 adb shell 的指令。
net.eth0.dns1 是裝置的名稱,可以透過 "getprop | grep eth0" 看到有關 eth0 的所有網路設定。
1.1.1.1 是實際存在的 DNS 服務主機的 ip 位址,像是 Google 的 8.8.8.8 or 8.8.4.4 也都可以使用。
接著再回到 Android 模擬器中,關閉 WiFi 再開啟,進行重新連線一次。
再次進入到 WiFi 設定中確認,看到 DNS 已經變更成剛剛設定的 ip 位址。
當然,透過 adb shell 還可以透過指令,設置 Android 模擬器的很多不同設定,有興趣可以參考
https://adbshell.com/
參考資料:
Android shell 命令设置(获取)IP地址、网关、dns
https://blog.csdn.net/liuqz2009/article/details/52094154
I'm a Microsoft MVP - Developer Technologies (From 2015 ~).
I focus on the following topics: Xamarin Technology, Azure, Mobile DevOps, and Microsoft EM+S.
If you want to know more about them, welcome to my website:
https://jamestsai.tw
本部落格文章之圖片相關後製處理皆透過 Techsmith 公司 所贊助其授權使用之 "Snagit" 與 "Snagit Editor" 軟體製作。