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

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

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

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

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

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

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值