Linux自定义DNS server 做域名解析
我是搞网络的,发在这不合适的话麻烦斑竹了。
前段时间,项目遇到了这个需求,以前的代码用的都是gethostbyname等等之类的函数来做dns查询,而这些函数用的都是系统的默认文件里配置的dns服务器,经过调查发现,在Linux侧,主要是用resolver库解决的。这个库提供了一些函数接口,用法甚少,好像在bind库里有用到过。
在这里说下,要实现这么个机能,不一定非得用这个库,比如用host命令,也可以自定义dns server,用法如下:host -cClass –tType hostname server
第二种方法就是用resolver库提供的api,后面会解释怎么用。
第三种方法就是用udns库,Google下。现成的第三方库,多线程安全。
第四种方法就是自己做个dns查询包,发送到dns server的53端口,再收一个包,解析结果。代码量有点大,超出规模估计。
resolver库用的是一个全局的结构体_res,在用的时候,自己填充该结构体力度server list数组,调用相应的 函数就行。
_res结构体的参数决定了该库的行为,如等待时间,权威性,使用不使用tcp等等。根据所需,适量修改。
要注意的是,如果修改了该全局结构体,那么库函数gethostbyname等系列函数的行为也会受到影响。请慎思。
还有就是不是多线程安全。请做好同步处理。
windows下有DNSQUERY函数,很easy。
后来翻了翻glibc,发现_res._u.ext.sock是自定义的socket,如果自己创建的socket,帮到特定的interface,再利用advanced routing,哈哈,游刃有余啊。Linux的网络很是给力。
不多说了,上码。看完这个,自己实现个host命令应该不是问题。
注意:上传附件及图片大小不得大于30M。
⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。
