Linux下监听53号端口捕获DNS查询报文

Linux下监听53号端口捕获DNS查询报文

计算机网络课设要求写一个能正常工作的DNS resolver,这就要求写出来的解析器能监听应用程序发出的查询报文。
即当应用程序需要查询某个网址对应的IP地址时,它会先往DNS resolver发送一条查询报文。这个解析器会解析这条报文,然后先在本地高速缓存中寻找有无对应的IP地址,若没有则去其他它知道的DNS服务器进行查找。获取结果后,将报文返回。

在这其中,53号端口就是解析器和服务器监听的端口。

使用sudo netstat -aptn | grep 53命令可以查看53号端口的占用情况

tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      826/systemd-resolve 
tcp        0      0 10.122.223.96:53708     54.209.117.64:443       ESTABLISHED 7107/firefox        
tcp        0      0 10.122.223.96:58050     10.3.9.4:53             TIME_WAIT   -                   
tcp        0      0 10.122.223.96:53710     54.209.117.64:443       TIME_WAIT   - 

如上,已经被systemd-resolve的系统服务占用

强行运行监听程序,会发生如下错误:

Address already in use

为此,应当先停止systemd-resolve服务
使用systemctl stop systemd-resolved命令停止该服务

之后,修改/etc/resolv.conf里面的内容

nameserver 127.0.0.1
# nameserver 127.0.0.53
# options edns0 trust-ad

这个文件是由systemd-resolve服务自动生成的

监听程序的一个小DEMO:

#include 
#

你可能感兴趣的:(杂谈,linux,socket)