Как очистить / очистить кэш DNS в Win32 API - PullRequest
0 голосов
/ 24 августа 2018

Я ищу способ программно очистить / очистить локальный кэш win32 dns (эквивалент вызова "ipconfig /flushdns").

Были способы сделать это с помощью скрытого API в winsock.dllно winsock.dll больше не является частью Windows, и поэтому этот метод больше не будет работать.

Кто-нибудь знает, как это сделать сейчас?

1 Ответ

0 голосов
/ 24 августа 2018
  • Проверено ipconfig.exe зависимости с использованием Зависимость Walker
  • Найдено dnsapi.dll среди них
  • Проверил экспортированные функции и обнаружил DnsFlushResolverCache
  • Мелко просматривал веб-страницу и нашел свою подпись (только на официальном сайте были найдены ссылки, подобные этой: [MS.Docs]:Наборы API для Windows 8 ), то есть не общедоступный, поэтому полагающееся на него программное обеспечение не является надежным )
  • Создана небольшая тестовая программа

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) и заметил параметр:)
Он работает (кэш сильно обновлен, и я вижу различия до и после запуска программы) !!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...