- What I learned from making a DNS client in Rust 译文(Rust 实现一个 DNS 客户端,我从中学到什么)
- 原文链接:https://blog.adamchalmers.com/making-a-dns-client/
- 原文作者:Adam Chalmers
- 译文来自:https://github.com/suhanyujie/article-transfer-rs/
- 译者:suhanyujie
- ps:水平有限,翻译不当之处,还请指正。
- 标签:Rust, DNS, DNS client
在过去的几周里,我构建了我自己的 DNS 客户端。主要是因为我认为 dig(一个标准的 DNS 客户端)有点笨重。另一部分原因是我想了解更多关于 DNS 的知识。这就是我如何创建它,也是你如何创建 dns 客户端的过程。它是一个很棒的“周末项目”,我从完成它中学到了很多。
为什么?
Julia Evans 给我提供了一些思路。她是我最喜欢的技术博客作者之一。她的博客总能给我一些启发,经常激励我去学习新的东西。她也很擅长把复杂的话题总结成简单的小漫画,比如这个:
但我看完这个漫画后,我震惊了 —— DNS 查询协议比我想象的要简单得多。并且,我所在的公司在 DNS 领域算是一个大玩家。我理应更了解这个。
计划
我想构建 DNS 客户端的另一个原因是我可以使用一些优秀的 Rust crate 来快速实现(节省很多步骤)。
- 使用 picoargs 解析 CLI 参数
它没有 clap 那么强大,clap 可以视为 Rust 的“企业级” crate,它依赖了很多其他 crate。但我并不需要那么多高级特性,而且 picoargs 的编译速度会快_很多_。
- 使用 bitvec 序列化 DNS 查询,它是一个强大且通用的读写“位”值的库。
在做 Advent of Code 时,我学会了使用 Nom 解析“位”协议,我也考虑过使用 deku,但最后还是不使用它了。
- 使用 stdlib UdpSocket 类型与 DNS 解析器通信
我不知道怎么使用,但 Rust stdlib 有很详细的相关文档,所以我有信心能够学会它。
-
使用