Red de conocimiento informático - Conocimiento del nombre de dominio - Cómo usar ipconfig para borrar el caché de DNS

Cómo usar ipconfig para borrar el caché de DNS

1. La función de ipconfig /flushdns

ipconfig /flushdns Esto se utiliza para borrar el caché de DNS.

Al visitar un sitio web, el sistema leerá la dirección IP correspondiente al nombre de dominio de la caché DNS. Si no se puede encontrar, buscará el archivo de hosts en el sistema. existe, solicitará al DNS El servidor solicita una consulta de DNS y el servidor DNS devolverá la IP correspondiente al nombre de dominio. Después de que su sistema reciba la dirección de resolución, utilizará la dirección IP para acceder y almacenará en caché la resolución en el. caché DNS local.

Si la dirección DNS no se puede resolver o la dirección en el caché DNS es incorrecta, generalmente se usa ipconfig/flushdns para borrar todos los cachés DNS.

2. Ejecute el comando de línea de comando llamando a la función API

Se puede saber por la composición del comando que /flushdns debe pasarse a ipconfig.exe como parámetro ejecutable programa. Si desea ejecutar este comando, puede usar la función system() y pasar ipconfig /flushdns como parámetro. La ejecución de esta función se ve afectada por las variables de entorno y puede haber problemas en el uso real. También puede considerar usar ShellExecute para iniciar ipconfig.exe y pasar /flushdns como parámetro, pero hay problemas con esto. Por ejemplo, puede ser interceptado por software antivirus. Para los sistemas Win7 y Win8, es posible que reciba una advertencia. a problemas de permisos de UAV.

Por lo tanto, debe ver si hay funciones API correspondientes disponibles. Llamar a la API directamente es lo más efectivo y seguro. Intenté buscar en MSDN, pero no pude encontrar la función relevante. Dado que está pasando el parámetro /flushdns para ejecutar ipconfig.exe, intente usar la herramienta Depende que viene con VC para ver si puede encontrar la interfaz correspondiente. Resulta que hay una función llamada DnsFlushResolverCache en el DNSAPI.DLL del que depende, como se muestra en la siguiente figura:

Esta función debe ser una función API no pública. Puede usar LoadLibrary para mostrar. la carga y use GetProcess para obtener el puntero de función directamente.

Mediante la búsqueda se obtiene la declaración prototipo de la función:

[cpp] ver copia simple

BOOL WINAPI DnsFlushResolverCache(VOID

De DNSAPI.DLL); biblioteca dinámica El código que carga y llama explícitamente a DnsFlushResolverCache es el siguiente:

[cpp] ver copia simple

BOOL __stdcall DnsFlushResolverCache()

{

BOOL bRet = FALSE;

typedef BOOL (WINAPI *PfuncDnsFlushResolverCache)(VOID);

HMODULE hDnsModule = LoadLibrary( _T("dnsapi.dll") ); /p >

if ( hDnsModule != NULL )

{

PfuncDnsFlushResolverCache pFlushFun = GetProcAddress( hDnsModule, "DnsFlushResolverCache"

if ( pFlushFun ); != NULL )

{

pFlushFun();

bRet = TRUE

}

Biblioteca libre; ( hDnsModule );

}

return bRet;

}

3. Ejecute el comando de línea de comando llamando a la función API

El día de hoy, debido a un fallo del sistema, el terminal no ha podido iniciar sesión en la plataforma. Para resolver este problema, la red de la plataforma se cambió de la red de China Unicom a la red de China Telecom. Como resultado, algunos terminales pudieron iniciar sesión y otros no. Teniendo en cuenta que puede deberse al caché DNS del sistema, la dirección resuelta por el nombre de dominio en el lado del terminal es siempre la dirección anterior de China Unicom (es decir, la dirección en el caché), por lo que no he podido iniciar sesión. Entonces utilicé el comando ipconfig /flushdns para borrar el caché DNS del sistema e iniciar sesión normalmente. Para evitar estos problemas causados ​​por el cambio de red y el caché de DNS, puede considerar borrar automáticamente el caché de DNS del sistema después de varios inicios de sesión fallidos.