我正在寻找一种方法来以编程方式清除/刷新本地win32 dns缓存(相当于调用“ipconfig / flushdns”)。
有一些方法可以使用winsock.dll中的隐藏API执行此操作,但winsock.dll不再是Windows的一部分,因此此方法将不再有效。
有谁知道现在应该怎么做?
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)并注意选项:)。
它确实有效(缓存大量更新,我可以看到运行程序之前和之后的差异)!