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函数就可以。

ipconfig /flushdns 清除系统DNS缓存的更多相关文章

  1. Vista/Win7以上系统查看和清除本地DNS缓存新方法

    你是否因修改网站DNS解析后,却因本机DNS缓存而需要等待... 你是否遇到修改了本机的hosts文件后,必须重起firefox和ie才起作用... 其实只要清空DNS缓存这些问题都可以解决. 查看D ...

  2. 如何清除本地DNS缓存 windows

    在您的网站迁移服务器时需要对域名所指向的IP进行更改,这时候在本机访问网站时就需要清除本地的DNS缓存信息,那么怎样清除呢? 首先我们应该明白清除DNS缓存信息的原理:当计算机对域名访问时并不是每次访 ...

  3. 清理dns缓存

    dns缓存是什么? DNS缓存指DNS返回了正确的IP之后,系统就会将这个结果临时储存起来.并且它会为缓存设定一个失效时间 (例如N小时),在这N小时之内,当你再次访问这个网站时,系统就会直接从你电脑 ...

  4. 易语言Dns缓存

    一些与DNS解析有关的命令: ipconfig/displaydns   -查看被缓存的域名解析 ipconfig/flushdns     -清空DNS缓存 .版本 .DLL命令 DnsFlushR ...

  5. windows查看与清理dns缓存

    1.windows下在命令行输入  ipconfig /flushdns 清理本地dns缓存查看dns缓存   ipconfig/displaydns2.Mac OSX下在命令行输入  lookupd ...

  6. DNS缓存失败怎么解决?

    DNS的中文名是域名系统,是域名和IP地址相互映射的一个分布式数据库.有了DNS,我们上网时直接输入网站域名(即网址)即可,而不用输入网站的IP地址访问网站,对于用户来说比较方便记忆和访问. 每次当我 ...

  7. 浏览器的DNS缓存

    通过设置hosts文件可以强制指定域名对应的IP,当修改hosts文件,想要浏览器生效,最直接的方法关闭浏览器后重新开启:如果不想重启浏览器,只需要清空浏览器的DNS缓存即可.清空DNS缓存在chro ...

  8. 刷新本地的DNS缓存数据

    ipconfig /flushdns”执行,刷新本地的DNS缓存数据. ipconfig /displaydns      查看本地DNS缓存记录的命令为:ipconfig /displaydns.你 ...

  9. 修改Hosts为何不生效,是DNS缓存?

    Update: 如果浏览器使用了代理工具,修改 Hosts 也不会生效.这里是因为,浏览器会优先考虑代理工具(如添加 pac 文件.SwitchySharp等)的代理,建议调试的时候先关闭这些代理. ...

随机推荐

  1. win7 下使用cygwin

    http://cygwin.com/index.html      还是看官网! 很多用windows的朋友不习惯于用linux的开发环境.虽然很乐意尝试一下,但是往往怕 linux系统打乱了自己的正 ...

  2. Windows 编程之 对话框总结

    关于对话框 1 对话框种类 对话框也是一种资源,Windows中对话框分为模态的和非模态的,以及Windows系统中已经定义好的那些通用对话框,比方打开文件,目录,调色板,字符串查找等. 2 模态对话 ...

  3. Java加入背景音乐

    近期有几个师妹找我给她们的Java期末作业加入背景音乐,非常久不琢磨Java的我花费整晚才搞定,羞愧.在博客中记录下来.警示自己.也帮助一下大家. Java中能够通过AudioClip类来实现音乐播放 ...

  4. Introduction to Probability (三) Independence

    两个事件独立性的定义是:事件A的发生对事件B的发生毫无影响,即从A的发生与否.我们不能猜測出B是否发生. 从概率等式的表示来看就是B在A发生的情况下发生的概率等于B发生的概率本身. 进而引出了A与B同 ...

  5. 福州大学第十届校赛 & fzu 2128最长子串

    思路: 对于每个子串,求出 母串中 所有该子串 的 开始和结束位置,保存在 mark数组中,求完所有子串后,对mark数组按 结束位置排序,然后 用后一个的结束位置 减去 前一个的 开始 位置 再 减 ...

  6. 12306 Android客户端的libcheckcode.so解密及修复

    源:http://blog.csdn.net/justfwd/article/details/45219895  这篇文章纯粹属于安全分析研究,请勿用于非法用途.如有侵犯到厂家,请告知作者删除 123 ...

  7. Ubuntu通过源代码编译安装Octave 4.0

    本教程/笔记,意在指导在Ubuntu及其它Linux系统上怎样通过源代码安装Octave. Octave简单介绍 Octave是GNU旗下取代matlab的数学工具软件,语法与matlab高度兼容.而 ...

  8. Greenplum同步到Oracle

    开发提出须要从Greenplum同步到Oracle的解决方式,写了个脚本用于定时调度处理. #!/bin/sh #copy_gp_2_ora.sh if [ $# -ne 1 ]; then     ...

  9. HttpSession具体解释

    session的机制 http是无状态的协议,客户每次读取web页面时,server都打开新的会话,并且server也不会自己主动维护客户的上下文信息,那么要怎么才干实现会话跟踪呢?session就是 ...

  10. Swift - 分段选择控件(UISegmentedControl)的用法

    1,选择控件的创建,并监听控件选择值 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 class ViewController: UIVie ...