写了个简陋的 DNS 缓存器

2019 年 1 月 2 日
 haddy
家里的 DNS 解析有时候出问题,让我很纳闷,于是我就写了这个小程序。

作为一名编程小白,我没有想到写一个本地用的 DNS 缓存原来这么简单,包括查文档等等时间,前后只用了 5 天。
感谢 Python 社区和创造各种第三方库(特别是 Requests, BitString, PonyORM )的作者,感谢 IETF,感谢互联网。

那么我介绍一下这个小程序一些特点。

1. 完全无视了 TTL,转而使用了定时更新的方法。如果一个缓存中的记录被缓存后,在后两个周期没有被使用,就会被删除。同时缓存在硬盘上,重启后也会保存。无视 TTL 会带来一定的安全风险,请留意。

2. 只支持 A 记录。也就是不支持 IPv6 环境。如果日常用到了需要 SRV 记录的程序,那么可能会产生问题。

3. 不支持读取包含超过两个问题的 DNS 请求。不支持读取压缩过的请求。写的时候发现日常用的程序基本上只会在一个请求中发一个问题,于是就没有写,部分是因为没有需求、没有测试用例,部分是因为写起来太麻烦。

4. 从远端服务器获取记录时,使用的是 DNS over HTTPS。

5. 依赖 Requests, BitString, PonyORM。

6. 在 Linux 上的 Python 3.6.7 环境中测试通过。

7. LGPLv3 授权。

写代码时没有考虑很多。没有单独的配置文件。还有很多复制粘贴。
对于喜欢更为成熟的方案的人,可以考虑 pdnsd。
尽管如此,分享给大家,希望能够对有些人有帮助。

代码地址:
https://pastebin.com/0Nh0gKAp
2077 次点击
所在节点    分享创造
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/523224

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX