之前遇到一个需求,要做网关的防火墙和url过滤,做完之后发现https的报文过滤不掉。
参考其他方案,是丢掉dns报文,让下挂设备无法解析域名,但还是不理想,当下挂设备dns缓存未清理时还是无法过滤
最后只能用一个笨方法,先去根据下挂设备的dns去查询url主机地址,再把目的地址为主机地址的报文都丢弃
问题转化为,找到一个方法:可以指定dns服务器查询主机,包括v4和v6
最先想到nslookup,在正常的ubuntu系统可以实现,但是嵌入式linux是才裁剪的nslookup,不支持v6,故而不采用
其次采用getaddrinfo() 接口,可以查询v6但无法指定dns服务器
最后使用ares库中的ares_gethostbyname()方法,可以解决需求,遗留一个小问题,ares_gethostbyname()方法的输出参数resolve_ip,会记录所有查询结果,也就是说第二次查询时第一次的结果也会返回,只到进程重启,堆栈刷新,有没有大佬知道的,麻烦指点下~