Skip to content
/ mydig Public

A very simple DNS query command like dig using CLI11 library

License

Notifications You must be signed in to change notification settings

yqaty/mydig

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

mydig

It's a very simple DNS query command like dig using CLI11 library. And it binds port 9090.

USAGE

Usage: mydig [OPTIONS]

Options:
  -h,--help                   Print this help message and exit
  -d,--domain TEXT            query domain name
  -s,--server TEXT            specify domain name server
  -t,--type TEXT              specify record type
  -x TEXT                     shortcut for reverse lookups
  --trace                     Trace delegation down from root

BUILD

$ mkdir build
$ cd build
$ cmake ..
$ sudo make && make install

make install will copy binary file "mydig" to /usr/local/bin.


Projects Logs

Day1 Day2

摸鱼 + 查资料,对着 wireshark 抓的包看了看格式。

感觉不错的文章:

阮一峰 yyds!

Day3

vscode 甚至今天才装了 C++ 插件。。。。 照着 RFC 1035 把各个类的定义构造写了下。

Day4

正式开始写各个函数。

学了下 socket 编程,几个要点。

  • 网络字节序(大端序)和本机字节序的转化。
  • 序列化和反序列化。有 STL容器的类通常内存不连续不能直接 copy。
  • UDP 协议传输大致流程:建立套接字,绑定端口,发送/接受信息,关闭套接字。

主要是把 DNS 报文的生成解析写了, 但完全没测试过。

Day5

把之前写的调试了下,总算能跑了,但只有最基本的查域名。

Day6

找了个顺眼的 CLI 库 CLI11

把各个功能都完善了一下。

  • 支持命令行。
  • 支持选定 DNS 服务器。
  • 支持查询 NS 记录。
  • 支持迭代查询。

basic 部分基本完成了。

Day7

写了个极简的 CMakeLists.txt 用来构建和安装项目。加了个反向查询,大同小异。

DNS 报文注意事项

  • 报文的域名可能被压缩,使用指针,标志是指针的最高的两位是 11, 后面 14 位的值为偏移量。
  • 关于顶级域名的 A 记录。直接 dig A com 的响应报文没有 com 的 A 记录,嘻嘻,什么都不会给哦~ dig A com +trace 只会给一堆 SOA 记录。当然可以先查 NS 记录,再查得到的域名就能获得 A 记录。如果指定某个根服务器询问顶级域名的 A 记录,得到的也只有 SOA 记录。但是!指定根服务器查顶级域名的 ns 记录时,它的 additional 部分会给顶级域名的 A 记录!真神必。
  • +trace 有时候可以一级一级查,但常用的网站通常问根服务器就会有结果,光速跳级。

About

A very simple DNS query command like dig using CLI11 library

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published