摘 要
1.模拟实现DNS域名解析系统
2.设计思路:分别模拟本地域名服务器、根域名服务器,顶级域名服务器和权限域名服务器,在主机和本地域名服务器之间采用递归查询,本地域名服务器和其它服务器之间使用迭代查询,最后把查询结果返回到主机中。
3.解决方案如下:
① 用数据库模拟本地域名服务器,分别用函数模拟根域名服务器,顶级域名服务器和权限域名服务器
② 通过对数据库的查询和存储来模拟主机向本地域名服务器的查询和本地域名服务器存储域名和IP的对应关系。
③ 把本地域名服务器用一个函数表示,通过对其它服务器函数的调用来模拟实现查询功能
④功能图
一、项目设计和实现
1 .总体设计
1.1域名解析系统的层次关系
1.2功能模块划分
-
- 本地域名服务器模块:local(domain)函数,传入域名,返回域名对应的IP地址
- 根域名服务器模块:root(domain)函数,传入域名,返回顶级域名服务器的IP地址
- 顶级域名服务器模块:top_com(domain),top_org(domain)等函数,传入域名,返回权限域名服务器的IP地址
- 权限域名服务器模块:permissions_com(domain),permissions_org(domain)等函数,传入域名,返回IP地址
如果在顶级域名服务器就已经获取到完整域名的IP地址,则无需继续向下进行,直接将IP地址返回给本地域名服务器,本地域名服务器向主机返回并且在本地存储。
1.3数据库设计
创建一个名为domain_ip的表,表的列名分别是domain和IP,分别用来存储域名和IP地址
1.2 功能设计
①主机和本地域名服务器之间的查询功能由本地数据库实现,在执行查询功能时直接查询本地数据库
- 根域名服务器,顶级域名服务器,权限域名服务器分别用函数封装,域名和IP的对应关系也存储在函数中。本地域名服务器和根域名服务器、顶级域名服务器、权限域名服务器之间的查询功能都由调用函数实现。
- 如果本地域名服务器中没有对应域名的IP时,在执行查询后把对应关系也存储到本地数据库中
- 把本地域名服务器也封装到一个函数,通过对各函数的调用来实现迭代查询
1.3 系统实现
(各功能模块的编程实现)
①连接数据库并获取内容
conn = Connection(
host='localhost',
port=3306,
user='root',
password='123456',
autocommit=True
)
# 获取游标对象
cursor = conn.cursor()
conn.select_db("test2") # 选择数据库
cursor.execute("select * from domain_ip;") # 使用游标对象执行sql语句
result: tuple = cursor.fetchall() #