首页 > 编程知识 正文

ipconfig获取不到ip,清除dns缓存有什么用

时间:2023-05-04 00:15:22 阅读:109826 作者:4774

1、ipconfig /flushdns的作用

ipconfig /flushdns这是用于清除DNS缓存的。

访问网站时,系统会从DNS缓存中读取与域名对应的IP地址,如果找不到,则在系统中查找主机文件。 如果仍向DNS服务器请求DNS查询,则DNS服务器会返回与域名对应的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中获取函数指针并直接调用它。 通过搜索,得到函数的原型声明。

boolwinapidnsflushresolvercache (void );

要从DNSAPI.DLL动态库中显式加载调用DnsFlushResolverCache的代码,请执行以下操作:

bool _ _ stdcalldnsflushresolvercache ({ bool bret=false; 类型卷(winapi * pfuncdnsflushresolvercache ) ) VOID; hmodulehdnsmodule=loadlibrary (_ t ) (dnsapi.dll ); if(hdnsmodule!=空值(pfuncdnsflushresolvercachepflushfun=getprocaddress (hdnsmodule,' dnsflushresolvercache ' ) ); if(pflushfun!=null(pflushfun ); bRet=TRUE; }freelibrary(hdnsmodule ); }return bRet; }

3、通过调用API函数来实现该命令行命令的执行

今天因为系统故障,终端没能登录平台。 为了解决这个问题,将平台的网络从连通的网络切换到通信的网络,结果出现了一部分终端可以登录,一部分终端不能登录的情况。 由于终端端解析域名的地址可能是由系统的DNS缓存引起的,因此是以前的访问地址,也就是缓存中的地址,因此无法登录。 然后,使用ipconfig /flushdns命令清理系统的DNS缓存,即可成功登录。 为了避免这种网络切换或DNS缓存引起的问题,可能会在多次登录失败后自动清除系统的DNS缓存。 直接执行上面找到的DnsFlushResolverCache函数即可。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。