ipconfig /flushdns 清除系统DNS缓存
??????? 1、ipconfig /flushdns的作用
??????? ipconfig /flushdns 這是清除DNS緩存用的。
??????? 當訪問一個站點時系統將從DNS緩存中讀取該域名所相應的IP地址。當查找不到時就會到系統中查找hosts文件,假設還沒有那么才會向DNSserver請求一個DNS查詢,DNSserver將返回該域名所相應的IP。在你的系統收到解析地址以后將使用該IP地址進行訪問,同一時候將解析緩存到本地的DNS緩存中。? ? ? ? 假設DNS地址無法解析,或者是DNS緩存中的地址錯誤,一般才會使用ipconfig/flushdns來清除全部的DNS緩存。
?????? 2、通過調用API函數來實現該命令行命令的運行
??????? 通過該命令的組成形式就可以得知,/flushdns應該是作為參數傳給ipconfig.exe可運行程序的。假設要實現該命令的運行,能夠使用system()函數。將ipconfig /flushdns作為參數來傳入,該函數的運行受環境變量的影響,實際使用時可能存在問題。也能夠考慮使用ShellExecute啟動ipconfig.exe,并將/flushdns作為參數傳遞進來。但這樣做也有問題,比方可能會遭到殺毒軟件的攔截,對于Win7、Win8系統,可能會由于UAV權限問題被警告。
??????? 所以要看看有沒有相應的API函數可供使用。直接調用API則最有效最安全。于是到MSDN中嘗試著搜索。可是找不到相關的函數。
既然是傳遞/flushdns參數運行ipconfig.exe,那嘗試著使用VC自帶的Depends工具看看是否能找到相應的接口。
結果發現了其依賴的DNSAPI.DLL中有叫做DnsFlushResolverCache函數,例如以下圖所看到的:
這個函數應該是非公開的API函數,那能夠使用LoadLibrary顯示載入,并用GetProcess得到函數指針,直接調用之就可以。
通過搜索,得到該函數的原型聲明:
BOOL WINAPI DnsFlushResolverCache(VOID);從DNSAPI.DLL動態庫中顯式載入調用DnsFlushResolverCache的代碼例如以下所看到的:
BOOL __stdcall DnsFlushResolverCache() {BOOL bRet = FALSE;typedef BOOL (WINAPI *PfuncDnsFlushResolverCache)(VOID);HMODULE hDnsModule = LoadLibrary( _T("dnsapi.dll") );if ( hDnsModule != NULL ) {PfuncDnsFlushResolverCache pFlushFun = GetProcAddress( hDnsModule, "DnsFlushResolverCache" );if ( pFlushFun != NULL ){pFlushFun();bRet = TRUE;}FreeLibrary( hDnsModule );}return bRet; }????? 3、通過調用API函數來實現該命令行命令的運行
??????? 今天由于系統出現問題,終端一直無法登錄到平臺。為了解決該問題。將平臺的網絡由聯通的網絡切換到電信的網絡,結果就出現了部分終端可以登錄,部分終端不能登錄的情況。
考慮到可能是系統DNS緩存引起的。終端側將域名解析出來的地址一直是之前的聯通地址(即緩存中的地址),所以一直無法登錄。于是使用ipconfig /flushdns命令清理了一下系統的DNS緩存就可以正常登錄了。為了規避這樣由網絡切換和DNS緩存引起的問題,可以考慮在多次登錄失敗后自己主動去清理系統的DNS緩存。直接運行上面找到的DnsFlushResolverCache函數就可以。
轉載于:https://www.cnblogs.com/clnchanpin/p/6992203.html
總結
以上是生活随笔為你收集整理的ipconfig /flushdns 清除系统DNS缓存的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 英特尔 AMT 漏洞比任何人想象的还要严
- 下一篇: java信息管理系统总结_java实现科