c++ - libcurl如何判断域名解析失败

 炫彩十字绣I_775 发布于 2022-11-07 21:21

默认使用libcurl请求域名的时候,如果域名解析失败会返回一个CURLE_COULDNT_RESOLVE_HOST (6)的错误

但是,如果当你的DNS被运营商劫持后,运营商会返回给你一个错误页面(联通的是wo.com.cn,电信的是114dns),所以这个时候curl获取的结果实际上是这个错误页面,而误认为是请求成功

为了解决这一问题,我尝试获取最终返回的URL地址 与请求的URL地址来进行对比,然后判断
,例如下面的代码

curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_URL, urlStr);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 5);
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION,1);
res = curl_easy_perform(curl);               
curl_easy_getinfo(curl,CURLINFO_EFFECTIVE_URL,&response_url);

然而事与愿违,最终得到的reponse_url仍然是我请求的url地址而非最终返回的URL地址,所以再次询问各位有没有好的解决方案?

1 个回答
  • 你可以先用nslookup解析一个不存在的域名,比如nslookup xxxxxxxx,如果电信做了DNS劫持,你会解析出一个IP地址,例如上海电信的假IP是180.168.41.175

    装一个dnsmasq作为你的DNS服务器,在dnsmasq的配置文件里写:

    server=223.5.5.5 # AliDNS server
    bogus-nxdomain=180.168.41.175
    

    然后把127.0.0.1配置成你的DNS服务器地址。

    经过如此配置后,dnsmasq会在上游DNS返回180.168.41.175时,给下游返回domain not exist响应,这样你就可以得到准确的错误信息了。

    2022-11-12 01:58 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有