我正在寻找一种以编程方式清除/刷新本地win32 dns缓存的方法(相当于调用“ ipconfig / flushdns”)。
有一些方法可以使用winsock.dll中的隐藏API来执行此操作,但是winsock.dll不再是Windows的一部分,因此该方法将不再起作用。
有人知道现在应该怎么做吗?
答案 0 :(得分:5)
test.c :
#include <stdio.h>
#include <Windows.h>
typedef BOOL (WINAPI *DnsFlushResolverCacheFuncPtr)();
int main() {
HMODULE dnsapi = LoadLibrary("dnsapi.dll");
if (dnsapi == NULL) {
printf("Failed loading module: %d\n", GetLastError());
return -1;
}
DnsFlushResolverCacheFuncPtr DnsFlushResolverCache = (DnsFlushResolverCacheFuncPtr)GetProcAddress(dnsapi, "DnsFlushResolverCache");
if (DnsFlushResolverCache == NULL) {
printf("Failed loading function: %d\n", GetLastError());
FreeLibrary(dnsapi);
return -2;
}
BOOL result = DnsFlushResolverCache();
if (result) {
printf("DnsFlushResolverCache succeeded\n");
} else {
printf("DnsFlushResolverCache succeeded: %d\n", GetLastError());
}
FreeLibrary(dnsapi);
return 0;
}
输出:
e:\Work\Dev\StackOverflow\q052007372>"c:\Install\x86\Microsoft\Visual Studio Community\2015\vc\vcvarsall.bat" x64 e:\Work\Dev\StackOverflow\q052007372>dir /b dnsapi_func_list.txt test.c e:\Work\Dev\StackOverflow\q052007372>cl /nologo test.c /link /OUT:test.exe test.c e:\Work\Dev\StackOverflow\q052007372>dir /b dnsapi_func_list.txt test.c test.exe test.obj e:\Work\Dev\StackOverflow\q052007372>test.exe DnsFlushResolverCache succeeded
注意:即使函数调用成功完成,我也不确定如何检查它是否完成了应该做的事情(或更妙的是:它的名字暗示它应该做的事情,这似乎可以满足您的需求)。
让我知道它是如何工作的。
@ EDIT0 :
感谢您的信息@TimJohnson!我急于查看ipconfig /?
([MS.Docs]: ipconfig)的输出(我在另一个 cmd 窗口:d中有此输出),并注意到该选项:)。
可以运行(缓存已大量更新,运行程序前后我可以看到差异)!