c开发(使用ares库)--指定dns服务器查询域名主机

文章讲述了作者在实现网关防火墙和URL过滤时遇到的问题,即如何在嵌入式Linux环境下处理HTTPS报文。通过尝试nslookup和getaddrinfo,发现前者不支持IPv6,后者无法指定DNS服务器。最终,作者借助ares库的ares_gethostbyname方法解决了问题,但提到该方法的一个小问题是resolve_ip会记录所有查询结果,直到进程重启。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前遇到一个需求,要做网关的防火墙和url过滤,做完之后发现https的报文过滤不掉。

参考其他方案,是丢掉dns报文,让下挂设备无法解析域名,但还是不理想,当下挂设备dns缓存未清理时还是无法过滤

最后只能用一个笨方法,先去根据下挂设备的dns去查询url主机地址,再把目的地址为主机地址的报文都丢弃

问题转化为,找到一个方法:可以指定dns服务器查询主机,包括v4和v6

最先想到nslookup,在正常的ubuntu系统可以实现,但是嵌入式linux是才裁剪的nslookup,不支持v6,故而不采用

其次采用getaddrinfo() 接口,可以查询v6但无法指定dns服务器

最后使用ares库中的ares_gethostbyname()方法,可以解决需求,遗留一个小问题,ares_gethostbyname()方法的输出参数resolve_ip,会记录所有查询结果,也就是说第二次查询时第一次的结果也会返回,只到进程重启,堆栈刷新,有没有大佬知道的,麻烦指点下~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值