DNS Server Lab
+Overview
+在这个实验中,你的任务是实现一个搭建在OpenNetLab上的DNS服务器,该服务器具备拦截特定域名,以及返回域名对应IP的功能。
+Getting Started
+-
+
下载实验资源
,解压后进入dns_server文件夹,其中包含两个子文件夹,resource文件夹中包含完成该实现所需阅读的文档以及实验报告模板,code文件夹中包含基础的实验代码模板。
+阅读实验任务,完成代码模板中 TODO 部分的代码片段。
+进行本地测试,完成本地测试后将代码提交到在线平台进行远程评测。
+
Tasks
+-
+
处理DNS请求
+
从配置文件 example.txt 中读取 domain name — IP address 的映射,并且按照如下规则处理DNS请求:
+-
+
Intercept:如果请求的DNS域名在配置文件的映射中并且对应的IP为 0.0.0.0 ,对该域名进行拦截,返回一个错误DNS应答给客户端
+Local Resolve:如果请求的DNS域名在配置文件的映射中并且对应的IP是合法的,返回对应IP地址给客户端
+Relay:如果请求的DNS域名不在配置文件,将对应的DNS请求转发给公网上的DNS服务器,当收到该服务器的应答时,将应答转发给客户端
+
-
+
对DNS请求、应答数据包进行编码
+
阅读rfc 1035,理解DNS请求和应答中各个字段的含义,并且在代码中完成对于DNS数据包的编码
+Testing
+-
+
进行本地测试
+
在本机运行 dns_server 和 dns_client 程序,其中 dns_client 作为评测端,会使用本地的测试用例对DNS服务器的正确性进行评测。
+python3 dns_server.py -l localhost:9001 -r localhost:9000
+python3 dns_client.py -l localhost:9000 -r localhost:9001
+
-
+
提交代码进行远程评测
+