第一篇:襄阳电信宽带DNS服务器
襄阳电信宽带DNS服务器:
202.103.44.150
202.103.24.68
客服电话:10000
襄阳网通(联通)宽带DNS服务器:218.104.111.122
218.104.111.114
客服电话:10010 襄阳总公司:0710-3700663 襄阳铁通(移动)宽带DNS服务器:61.232.206.102
61.232.206.100
61.234.145.102
客服电话:10050
襄阳广电宽带DNS服务器:
10.0.20.1
10.0.20.3
客服电话:0710-3567110
第二篇:DNS服务器实验报告
网 络 工 程 实 验
实验名称:DNS服务(系统自带)
班级:计科一班
组长:李柯颖(41112045)
组员:马晓贤(41112033)马彬(41112036)
刘永军(41112012)高富雷(41112003)
张明东(41112016)
前 言
一、DNS服务器的概念
它是由解析器以及域名服务器组成的。域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器。DNS使用TCP与UDP端口号都是53,主要使用UDP,服务器之间备份使用TCP。
DNS最早于1983年由保罗·莫卡派乔斯(Paul Mockapetris)发明;原始的技术规范在882号因特网标准草案(RFC 882)中发布。1987年发布的第1034和1035号草案修正了DNS技术规范,并废除了之前的第882和883号草案。在此之后对因特网标准草案的修改基本上没有涉及到DNS技术规范部分的改动。
域名结构
通常 Internet 主机域名的一般结构为:主机名.三级域名.二级域名.顶级域名。Internet 的顶级域名由 Internet网络协会域名注册查询负责网络地址分配的委员会进行登记和管理,它还为 Internet的每一台主机分配唯一的 IP 地址。全世界现有三个大的网络信息中心: 位于美国的 Inter-NIC,负责美国及其他地区; 位于荷兰的RIPE-NIC,负责欧洲地区;位于日本的APNIC,负责亚太地区。
解析器
解析器,或另一台DNS服务器递归代表的情况下,域名解析器,协商使用递归服务,使用查询头位。
解析通常需要遍历多个名称服务器,找到所需要的信息。然而,一些解析器的功能更简单地只用一个名称服务器进行通信。这些简单的解析器依赖于一个递归名称服务器(称为“存根解析器”),为他们寻找信息的执行工作。
服务器
提供DNS服务的是安装了DNS服务器端软件的计算机。服务器端软件既可以是基于类linux操作系统,也可以是基于Windows操作系统的。装好DNS服务器软件后,您就可以在您指定的位置创建区域文件了,所谓区域文件就是包含了此域中名字到IP地址解析记录的一个文件,如文件的内容可能是这样的:primary name server = dns2(主服务器的主机名是)
serial = 2913(序列号=2913、这个序列号的作用是当辅域名服务器来复制这个文件的时候,如果号码增加了就复制)
refresh = 10800(3 hours)(刷新=10800秒、辅域名服务器每隔3小时查询一个主服务器)
retry = 3600(1 hour)(重试=3600秒、当辅域名服务试图在主服务器上查询更新时,而连接失败了,辅域名服务器每隔1小时访问主域名服务器)
expire = 604800(7 days)(到期=604800秒、辅域名服务器在向主服务更新失败后,7天后删除中的记录。)
default TTL = 3600(1 hour)(默认生存时间=3600秒、缓存服务器保存记录的时间是1小时。也就是告诉缓存服务器保存域的解析记录为1小时)
二、设置类别
您可以把DNS服务器配置成以下3类之一: 1.主DNS服务器。2.辅DNS服务器。3.缓存DNS服务器。
三、DNS服务器的工作原理大致如下:
1、用户在浏览器里输入域名,例如www.xiexiebang.com,这个邮件地址只能表明收邮件人在msserver.com.cn域上拥有一个账户。可是仅仅知道这些并不够,因为电子邮件程序并不知道该域的邮件服务器地址,因此不能将这封邮件发送到目的地。而MX记录就是专门为电子邮件程序指路的,在DNS服务器中添加MX记录后电子邮件程序就能知道邮件服务器的具体位置(即IP地址)了。在主DNS服务器中添加MX记录的操作步骤如下所述:
步骤:1 在DNS控制台窗口中首先添加一个主机名为mail的主机记录,并将域名mail.msserver.com.cn映射到提供邮件服务的计算机IP地址上。2 在“正向查找区域”目录中右键单击准备添加MX邮件交换记录的域名,选择“新建邮件交换器(MX)”命令,如图所示。
1.2.3
打开“新建资源记录”对话框,在“邮件服务器的完全合格的域名(FQDN)”编辑框中输入事先添加的邮件服务器的主机域名(如mail.msserver.com.cn)。或单击“浏览”按钮,在打开的“浏览”对话框中找到并选择作为邮件服务器的主机名称(如mail),如图所示。
3.4 返回“新建资源记录”对话框,当该区域中有多个MX记录(即有多个邮件服务器)时,则需要在“邮件服务器优先级”编辑框中输入数值来确定其优先级。通过设置优先级数字来指明首选服务器,数字越小表示优先级越高。最后单击“确定”按钮使设置生效,如图所示。小提示:一般情况下“主机或子域”编辑框中应该保持为空,这样才能得到诸如user@msserver.com.cn之类的信箱地址。如果在“主机或子域”编辑框中输入内容(如mail),则信箱名将会成为user@mail.msserver.com.cn5 重复上述步骤可以添加多个MX记录,并且需要在“邮件服务器优先级”编辑框中分别设置其优先级。
实验六 给DNS服务器做个快速体检
你的内网DNS服务器工作状态正常吗?大家常用的测试方法是查看内网用户是否能使用域名浏览网站,但这种测试方法并不全面和科学。其实最简单和便捷的方式是使用nslookup+Ping命令的组合方式,通过简单的两步就能给本地企业网中的DNS服务器做个快速“体检”。
步骤:
第一步:首先使用nslookup命令来测试本企业网的DNS服务器,查看它是否能正常将域名解析成IP地址。这里以www.xiexiebang.com”
第六步:设置完毕后我们访问www.xiexiebang.com时就会自动根据是在内网还是外网来解析了。
命令提示符输入netsh winsock reset重启电脑
实验九 快速删除电脑IPv6 DNS地址
随着IPv6地址使用范围的越来越广,在电脑上进行IPv6 DNS地址的配置和删除也是常有的事,下面就介绍一种快速删除电脑IPv6 DNS地址的方法:
步骤:
1.1 在Win 7的“开始”中打开“运行”对话框,并在其中运行“cmd”命令,点击“确定”按钮。
2.2 在“CMD”命令行中执行命令“ipconfig/all”,查看电脑网卡上配置的ipv6 DNS地址。
执行完上面的命令后就能看到电脑网卡的IPv6 DNS地址配置情况,如下图。
3.4 然后在“CMD”命令行中执行命令“netsh interface ipv6 delete dnsservers “本地连接”2001:dn8:8000:1:202:120:2:101”,就可以把电脑网卡上的ipv6 DNS地址删除掉。
注意事项
删除电脑IPv6 DNS地址的命令格式,必须按要求输入,不能有任何的差错,否则不能正确执行。
实验十 怎样让别人无法修改DNS的内容
DNS设置在TCP/IP中,我们可以通过禁用TCP/IP来实现。
1.1 首先点击“开始”菜单,点击运行。2 在打开的运行框中输入gpedit.msc,按确定。
2.3 依次展开“用户配置管理模板网络网络连接”4 在右侧窗口中找到“禁用TCP/IP高级配置”。
3.5 双击打开将“已启用”选中,确定。
然后再强制执行组策略即可生效。
保护DNS服务器的几种方法
DNS软件是黑客热衷攻击的目标,它可能带来安全问题。下面是保护DNS服务器的几种方法。
禁用区域传输
区域传输发生在主DNS服务器和从DNS服务器之间。主DNS服务器授权特定域名,并且带有可改写的DNS区域文件,在需要的时候可以对该文件进行更新。从DNS服务器从主力DNS服务器接收这些区域文件的只读拷贝。从DNS服务器被用于提高来自内部或者互联网DNS查询响应性能。
然而,区域传输并不仅仅针对从DNS服务器。任何一个能够发出DNS查询请求的人都可能引起DNS服务器配置改变,允许区域传输倾倒自己的区域数据库文件。恶意用户可以使用这些信息来侦察你组织内部的命名计划,并攻击关键服务架构。你可以配置你的DNS服务器,禁止区域传输请求,或者仅允许针对组织内特定服务器进行区域传输,以此来进行安全防范。
使DNS只用安全连接
很多DNS服务器接受动态更新。动态更新特性使这些DNS服务器能记录使用DHCP的主机的主机名和IP地址。DDNS能够极大地减
轻DNS管理员的管理费用,否则管理员必须手工配置这些主机的DNS资源记录。
然而,如果未检测的DDNS更新,可能会带来很严重的安全问题。一个恶意用户可以配置主机成为台文件服务器、Web服务器或者数据库服务器动态更新的DNS主机记录,如果有人想连接到这些服务器就一定会被转移到其他的机器上。
你可以减少恶意DNS升级的风险,通过要求安全连接到DNS服务器执行动态升级。这很容易做到,你只要配置你的DNS服务器使用活动目录综合区(ActiveDirectoryIntegratedZones)并要求安全动态升级就可以实现。这样一来,所有的域成员都能够安全地、动态更新他们的DNS信息。
使用防火墙来控制DNS访问
防火墙可以用来控制谁可以连接到你的DNS服务器上。对于那些仅仅响应内部用户查询请求的DNS服务器,应该设置防火墙的配置,阻止外部主机连接这些DNS服务器。对于用做只缓存转发器的DNS服务器,应该设置防火墙的配置,仅仅允许那些使用只缓存转发器的DNS服务器发来的查询请求。防火墙策略设置的重要一点是阻止内部用户使用DNS协议连接外部DNS服务器。
在DNS注册表中建立访问控制
在基于Windows的DNS服务器中,你应该在DNS服务器相关的注册表中设置访问控制,这样只有那些需要访问的帐户才能够阅读或修改这些注册表设置。
HKLMCurrentControlSetServicesDNS键应该仅仅允许管理员和系统帐户访问,这些帐户应该拥有完全控制权限。在DNS文件系统入口设置访问控制
在基于Windows的DNS服务器中,你应该在DNS服务器相关的文件系统入口设置访问控制,这样只有需要访问的帐户才能够阅读或修改这些文件。
%system_directory%DNS文件夹及子文件夹应该仅仅允许系统帐户访问,系统帐户应该拥有完全控制权限。实验十一 在windows07 查看DNS服务器属性
步骤:
打开“控制面板”里的“管理工具”
点击“服务”,下拉列表框,找到“DNS client”
双击“DNS client”
可对其属性查看,或进行修改。
第三篇:北邮计算机网络课程设计DNS服务器
北邮计算机网络课程设计DNS服务器 环境
操作系统随意,语言python2.7
2.文件
Socket.py 说明
完成缓存检测,确定是回应,还是转发,如果是回应,确定是本地回应还是外部应答转发
import socket import mydic import charhandle import makeframe
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)port = 53
the_dic = mydic.get_web_ip()client_request = {} client_request_index = {} reverse_map = {} key_record = 0 client_wait = []
s.bind(('',port))
time_rest = 0 request_general = ''
print 'running' while True:
try:
msg ,(client,port)= s.recvfrom(1024)
except:
print 'Time out!'
continue
request = []
request = list(msg)
requre_web = charhandle.get_request(request[12:])
website = ''.join(requre_web)
if(port == 53):
answer = []
answer = list(msg)
print “Type:Remote Response”
print “remote answer is: ”
response_ip = msg[-4]+msg[-3]+msg[-2]+msg[-1]
char_ip = socket.inet_ntoa(response_ip)
print website + ' has the ip : '+char_ip
fre = mydic.storeForUpdate(website,char_ip)
print 'with the frequence of '+ str(fre)
###real_request = client_request[request[0]+request[1]]
for each_client in client_wait:
my_key = client_request[request[0]+request[1]+str(each_client)]
if client_request_index.get(my_key)!= None :
s.sendto(msg,client_request_index[my_key])
print “Response to ip and Client port:”
print client_request_index[my_key]
break
else:
print “Type: Client Request”
print “ip and port:”
print(client,port)
### requre_web = charhandle.get_request(request[12:])
### website = ''.join(requre_web)
print “Request website:”+website
if(the_dic.get(website)!= None):
print “Found in local cache:”
re_ip = the_dic.get(website)
print re_ip
fre = mydic.storeForUpdate(website)
print re_ip[0]+' with frequence '+str(fre)
zhen = makeframe.make(re_ip[0],msg)
s.sendto(zhen,(client,port))
else:
print “need to ask remote server”
key_record = key_record + 1
request_general = key_record
client_request[request[0]+request[1]+str(client)] = request_general
client_request_index[request_general] =(client,port)
if client not in client_wait:
client_wait.append(client)
# select authority DNS server as you wish
s.sendto(msg,('10.3.9.4',53))
time_rest = time_rest+1
try:
if(time_rest == 50):
print 'pay attention'
print '
#'
mydic.updateCache()
print '
#'
the_dic = mydic.get_web_ip()
time_rest = 0
except:
print 'not valid frequence'
print '--------------------' s.close()
Mydic.py 完成本地查询,LRU算法维护本地缓存,socket.py第97行的time_request值可以确定更新缓存的频率,可以直接输出在dnsrelay.txt内,但是为了方便观测变化,我输出到了dnsrelaycopy.txt里面,运行一段时间之后,可以去看看学习到的新条目
import pickle import os import threading A=[] d_web_ip = {} d_ip_web = {} update_dic = {}
data = open('dnsrelay.txt')for each_line in data:
try:
(ip,sitecopy)= each_line.split(' ',1)
(site,nothing)= str(sitecopy).split('n',1)
d_web_ip[site] = [ip,1]
d_ip_web[ip] = site
except:
print 'file error'
data.close()
try:
with open('newdnsrelay.pickle','wb')as newdnsrelay_file:
pickle.dump(d_web_ip,newdnsrelay_file)except IOError as err:
print 'File error:'+str(err)except pickle.PickleError as perr:
print 'Pickling error:'+str(perr)
def get_web_ip():
with open('newdnsrelay.pickle','rb')as f:
global update_dic
update_dic = pickle.load(f)
return update_dic.copy()
return(None)
def storeForUpdate(web_site, add = None):
global update_dic
if(update_dic.get(web_site)!= None):
add_frequen = update_dic[web_site]
add_frequen[1] = add_frequen[1] + 1
print web_site+' frequence incrase 1,with ip '+add_frequen[0]
return add_frequen[1]
else:
update_dic[web_site] = [add,1]
print 'record for a new site'
return 1
def updateCache():
global update_dic
m = update_dic.copy()
t = threading.Thread(target = my_thread,kwargs = m)
print 'ready to update local cache'
t.start()
t.join()
def my_thread(*argu,**arg):
frequence = []
remain_dic = {}
for each_key in arg:
tmp = arg[each_key]
if(tmp[1] not in frequence):
frequence.append(tmp[1])
if(tmp[0] == '0.0.0.0'):
remain_dic[each_key] = '0.0.0.0'
print 'various frequence:'
for each in frequence:
print 'have '+ str(each)
for each_key in remain_dic:
arg.pop(each_key)#enimilate ban
i = 0
while(i < 30):
max_frequence = max(frequence)
for each_key in arg:
tmp = arg[each_key]
if(tmp[1] == max_frequence):
remain_dic[each_key] = tmp[0]
i = i + 1
if(i == 30):
break;
frequence.remove(max_frequence)
if(not frequence):###no more
break;
updateFile(remain_dic)
def updateFile(new_dic):
f = open('dnsrelaycopy.txt','w')
for each_key in new_dic:
word = str(new_dic[each_key])+ ' ' + str(each_key)
f.write(word)
f.write('n')
new_dic[each_key] = [new_dic[each_key],0]
try:
with open('newdnsrelay.pickle','wb')as newdnsrelay_file:
pickle.dump(new_dic,newdnsrelay_file)
except IOError as err:
print 'File error:'+str(err)
except pickle.PickleError as perr:
print 'Pickling error:'+str(perr)
Makefram.py 成帧模块,形成对外围权威服务器的询问帧
import socket
def make(re_ip,msg):
tmp_list = []
for ch in msg:
tmp_list.append(ch)
tmp_list[4:12] = ['x00','x01','x00','x01','x00','x00','x00','x00']
tmp_list = tmp_list+['xc0','x0c','x00','x01','x00 ','x01','x00','x00','x02','x58','x00','x04']
dive_ip = socket.inet_aton(re_ip)
ch_ip = []
for each_ch in dive_ip:
ch_ip.append(each_ch)
tmp_list = tmp_list + ch_ip
re_msg = ''.join(tmp_list)
return re_msg
Charhandle.py 提取出报文中的url
def get_request(your_list):
my_list = []
new_list = []
my_list.extend(your_list)
re_list = []
thelen = ord(my_list[0])
try:
while thelen!= 0:
new_list = new_list + my_list[1:thelen+1]
my_list[0:thelen+1] = []
thelen = ord(my_list[0])
new_list.append('.')
except IndexError:
print “bao wen ge shi bu dui”
new_list.pop()
return new_list
原始的dnsrelay.txt老师给出了,自己去弄,把四个py文件放一个目录下,再放一个dnsrelay.txt 然后,用python shell 打开 socket.py 从python shell 运行,或者直接F5,记得把本地dns手动指向本机。
P.S:本人亲测,蒋老师没用过python,从头到尾就是我讲他听,从不为难我,我说有个LRU算法,他还说我做的好!
如果有不懂的 联系作者:302969722@qq.com 学妹优先
第四篇:计算机网络课程设计 DNS 服务器 实验报告
DNS中继服务器实验报告
07415
林珅(13)
071401 07415
刘磊(18)
071406 07415
李鸿(19)
071407
一、系统概述
1)运行环境:windows XP
2)编译:
Microsoft visual C++ 6.0 3)使用方法:
a)使用ipconfig/all,记下当前DNS服务器,例如为211.68.71.4 b)使用下页的配置界面,将DNS设置为127.0.0.1(本地主机)c)运行你的dnsrelay程序(在你的程序中把外部dns服务器设为前面记下的211.68.71.4)d)正常使用ping,ftp,IE等,名字解析工作正常
二、系统的功能设计
设计一个DNS服务器程序,读入“域名-IP地址”对照表,当客户端查询域名对应的IP地址时,用域名检索该对照表,三种检索结果:
1)检索结果为ip地址0.0.0.0,则向客户端返回“域名不存在”的报错消息(不良网站拦截功能)
2)检索结果为普通IP地址,则向客户返回这个地址(服务器功能)
3)表中未检到该域名,则向因特网DNS服务器发出查询,并将结果返给客户端(中继功能)
考虑多个计算机上的客户端会同时查询,需要进行消息ID的转换
三、模块划分
DNS服务器主模块包含三个子模块,分别如下:
1)命令行参数处理模块:该模块用来处理通过命令行提示符来启动这个DNS服务器时所输入的命令行参数,管理员通过设置不同的参数可以使DNS服务器显示不同程度的提示和调试信息。所以这模块主要是依照输入的参数设置标志数据,以控制最后的各种信息的输出。
2)本地解析模块:本模块是在本DNS服务器本地保存的曾经解析过的或者需要屏蔽额域名和其对应IP信息文件中查找从应用程序来的请求解析的域名,在这个文件中查到需要的域名后取出对应的IP地址,并构造DNS应答数据包返回给发送此DNS域名解析请求的应用程序。
3)外部DNS服务器解析模块:当本地解析失败时,本DNS服务器会调用外部DNS服务器解析模块。此模块将应用程序发送的DNS请求报文转发给外部DNS服务器,然后接收外部服务器返回的应答信息,并根据这个信息给予应用程序相应的DNS应答。
三个模块与主模块的关系图如下,主模块调用这三个并列的模块,而本地解析模块调用文件查找子模块:
DNS服务器主模块调用命令行参数处理模块本地解析模块半调用外部DNS服务器解析模块调用文件查找子模块
四、软件流程图
开始创建套接字初始化接收缓冲命令行参数处理初始化设置UDP连接和套接字信息套接字绑定是否退出程序否接收UDPDNS数据包获取DNS包头参数是请求包DNS包类型应答包域名格式转换还原DNS数据包头ID设置外部DNS应答数据包向应用程序发送DNS响应数据包本地文件解析是找到对应IP?否设置DNS包头转换DNS数据包头ID设置外部DNS请求数据包向指定外部DNS转发请求设置应答结果发送DNS应答结果清除socket关闭套接字结束
五、主要数据结构
unsigned long upDNSaddr = inet_addr(DNS_SVR);
//外部DNS地址
unsigned short oID,nID,ID = 0,TYPE,CLASS,RDLENGTH,RDATA,flag,qdcount,ancount;
// oID,nID,ID为数据报ID // TYPE,CLASS,RDLENGTH,RDATA, flag,qdcount,ancount为报文的相应标志位
char initxt[100] = “C:dns.txt”,name[50];
// initxt[100]为配置文件路径,name[50]为保存文件域名或IP int opt = 0,isfind = 0,TTL,len = 0,leng,strlen = 512;
//opt为用户选项,isfind标志是否在本地文件找到记录的布尔变量 // TTL为生存周期,len 接收的数据报长度,leng发送的数据报长度 //strlen为保存接收到的sockaddr的长度
WSAData wsaData;
//套接口
WORD wVersionRequested;
//使用的套接口版本
struct sockaddr_in server,from,to,temp;
//server用于本地监听DNS数据报,from用于接收外部数据报
//to用于发送数据报,temp是保存发送请求的浏览器信息
char sendbuf[256],recvbuf[256];
//发送缓存和接收缓存
char *ptr = recvbuf
//以ptr的增减来达到在数组中指针移动的效果
六、测试用例以及运行结果
a)测试本地解析功能
请求一个本地DNS对照表中已有的某一记录,如2qq.cn:
在本地DNS对照表中找到记录,将相应的IP地址返回给用户:
调试信息级别0:dnsrelay
调试信息级别1:dnsrelay –d
调试信息级别2:dnsrelay –dd
b)测试中继功能:
请求一个本地DNS对照表中没有的记录,如www.xiexiebang.com。本地DNS没有找到相应记录,向外部web服务器转发请求,并接收相应的应答报文并转发给用户:
调试信息级别0:dnsrelay
调试信息级别1:dnsrelay –d
调试信息级别2:dnsrelay –dd c)
测试拦截功能:
请求一个不良网站,如www.xiexiebang.com:
向用户返回IP地址0.0.0.0,告知用户“域名不存在”的报错信息:
调试信息级别0:dnsrelay
调试信息级别1:dnsrelay –d
调试信息级别2:dnsrelay –dd
d)请求一个不存在的www.xiexiebang.com。当外部web服务器找不到相应的域名时返回超时信息,本地DNS服务器将此信息返回给用户。
调试信息级别0:dnsrelay
调试信息级别1:dnsrelay –d
调试信息级别2:dnsrelay –dd
e)请求一个不合法的域名,如123:
本地DNS服务器返回给用户“找不到该域名”的报错信息。
七、调试中遇到并解决的问题
1)使用socket连接的时候,刚开始只用了一个socket作为所有发送和接收的接口。在实际调试的过程中发现一个不能满足软件需求的实现,所以用一个socket负责发送数据报,另一个socket负责接收数据报。2)回应报文中域名是使用偏移指针的方式实现的,这是由于在域名段写入需要请求的域名时会与问题报文中的域名字段重复从而造成不必要的浪费,用偏移指针的方式既可以防止重复,也可以节省空间。
3)使用sendto函数时,一开始使用的是sizeof(sendbuf)来确定发送的数据报大小,但是实际操作中发现发送消息时只需要发送有用的部分,如果使用原来的方法会造成发送数据的冗余,需要精确确定发送数据的有效位数。
4)在编程过程中,对于指针的掌握不当造成了多次错误,例如在对于不同的标志位要转换成不同长度的指针进行赋值。
5)对于请求包的域名还原问题,需要注意数组下标与实际位数的区别。6)当请求的域名为不带www开头的域名时,本机会自动在其尾部追加“.localdomain”来形成新的域名,导致在本地解析工作中无法找到该域名对应的记录,从而转发给外部web服务器,这与本地解析工作是相违背的。所以后来每当在接收到写有“.localdomain”域名的时候,强行进行字符匹配并将其删除,从而完成本地解析工作。
八、心得体会
本次大作业为实现一个DNS中继服务器。通过完成本地域名解析、中继功能以及不良网站拦截等基本的三个功能,来实现用户访问外部服务器的需求。这次大作业的完成,需要我们阅读并了解RFC 1035文档。一开始的时候对RFC完全没有一个清晰地概念,只知道这是一个规格说明,而且初读其中的内容也觉得一头雾水。但后来在老师的提点下抓住了重点,然后一遍一遍反复的阅读,不懂的地方借助网络和图书资料,渐渐发现对DNS的原理和实现方法有了更加全面和深刻的理解,这对后期的程序编写起到了非常大的帮助作用。
通过本次网络实验,对小型网络应用程序的实现有了一定程度的理解,同时更加熟悉了winsock函数库。通过抓包分析UDP数据报文、DNS数据报文,对传输层和应用层的数据包发送和接收等工作原理也有了更深的理解。
在本次大作业中,让我感触最深的就是这三年来编程实力的反映。在编程的过程中就不断的被一些低级错误影响了软件实现的进度,而且对在大一大二学到的知识点,例如文件的读取,不同进制数的转换等掌握不牢,导致需要花额外的时间去弥补以前遗忘的知识。在最终验收的阶段,通过比较其他组同学的程序就可以很明显的看出,自己程序的功能上比较单一,实现的方法也没有他们来的精妙。继而通过老师质疑的几个问题,也可以发现我们的程序还存在许多不足,例如思考的方面不够全面,思考的角度不够多向。细节反应一个程序的健壮性,而我们没有尽可能的考虑每一个可能的情况,导致仍存在许多漏洞。所以这次的大作业告诉了我们,在以后的学习与实践中,要时刻注意“细节”的重要性。这个不仅要在软件分析的时候要注意,在编程的时候要注意,在调试测试的时候要注意,在最后维护阶段也不能放松。这次的收获想必对未来从事的网络工作很有益处。
无论程序好还是坏,最重要就是亲手实践。借鉴别人的好代码永远只是模范,只有自己动手才会实现突破与创新。我们会在以后的学习与实践中不断提高自己的编程能力,日臻完善。
第五篇:Linux的使用与 DNS 服务器的配置与管理
一、实验目的
1.DNS 的概念和原理 2.DNS 服务器的安装
3.DNS 服务器的配置与管理 4.DNS 和 WINS 的结合使用
5.了解Linux操作系统,学会IP配置,office软件和万维网的使用,以及与Windws2003下DNS服务器的支持等。
二、实验要求
1.两人一组,一人进行windows2003下的DNS 服务器的配置并在本机上发布个简单的网站,另一人进行Linux下的操作。
2.Linux操作要求为,开机后选择Linux,在系统出现图形界面后输入用户名root,密码为:1111111,进入系统后进行IP设置(IP与Windows操作系统下相同),以能正常访问机房网站为完成;然后熟悉Office,并用之作一文档写上心得体会(注意中英文切换用Ctrl+空格,字体要选择“Song Ti”等拼音表示的字体才能见到所输入的汉字),插入配置IP时的抓图,以机号为文件名通过机房网站上传到服务器;等同组同学完成DNS设置后,试着将本机DNS服务器IP设为同组同学机器IP,看能否用同组同学给的域名访问同组同学机器上发布的网站。
三、实验步骤与截图
(一)Linux操作系统实验步骤
启动计算机,开机后选择Linux操作统在上图中用户名输入root 密码为1111111,进入系统。
设置IP地址的具体步骤方法如下:
#ifconfig eth0 192.168.0.1或者修改/etc/sysconfig/network-scripts/下的ifcfg-eth0 #vi /etc/syssconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 BOOTPROTO=static HWADDR= 202.202.202.08 ONBOOT=yes IPADDR=192.168.0.1 NETMASK=255.255.255.0 NETWORK=192.168.1.0 BROADCAST=192.168.1.255 GATEWAY= 202.202.202.08 保存退出
(二)DNS实验步骤
1.安装DNS服务器
步骤 1启动“添加/删除程序”,之后出现“添加/删除程序”对话框。
步骤 2单击“添加/删除 Windows 组件”,出现 “windows 组件向导”单击下一步“出现 ”Windows组件“ 对话框从列表中选择”网络服务“。
步骤 3 单击”详细内容“,从列表中选取”域名服务系统(DNS)“,单击”确定“。
步骤 4 单击”下一步“输入到 Windows2000 Server 的安装源文件的路径,单击”确定“开始安装 DNS 服务。
步骤 5 单击”完成“,当回到”添加/删除程序“对话框后,单击”关闭“按钮。步骤6 关闭”添加/删除程序“窗口。安装完毕后在管理工具中多了一个 ”DNS“ 控制台。
2.DNS 服务器的设置与管理(1)DNS 的启动设置 DNS 服务器在启动时,需要从相关配置文件中知道它所要管理的 zone 的信息,及文件的位置。对于符合 BIND(Berkeley Internet Name Domain)规格的 DNS 服务器是利用 bootfile 来获得配置信息的。在 Windows2000 中可以利用下表中的方法启动 DNS 服务:
方式 描述
从注册表(Registry)引导 初始化 DNS 服务时从注册表中读取配置参数,DNS 服务的默认引导
方式。
从文件引导 初始化 DNS 服务时从符合 BIND 规格的 bootfile 中读取配置参
数,首选必须从其它 BIND 服务器拷贝一份 bootfile 文件,在启动后相关配置参数将保存在注册表中。
从 DS 引导 初始化 DNS 服务时从 Active Directory 中读取配置参数
在 DNS 服务器启动后,用户可以看到DNS 服务所在的计算机已经添加到 DNS 控制台中,其中包括”正向搜索区域、反向搜索区域“目录。
(2)添加 DNS Zone
因为 DNS 的数据是以 zone 为管理单位的,因此用户必须先建立 zone。添加 Zone 的具体步骤如下:
步骤1 在 DNS 控制台中左侧窗体中选择服务器单击”操作“菜单选择”创建新区域“,启动”创建新区域“向导
步骤 2 在选择区域类型对话框中选择”标准主要区域“
步骤3 在”选择区域搜索类型“中选择”正向搜索“则创建的新区域存放在正向搜索区域目录中
步骤4 在区域名对话框中输入新区域的域名,如果创建辅助区域则需要输入”主要区域“的域名
步骤5 在文件名对话框中新文件文本框中自动输入了以域名为文件名的 DNS 文件,如果是创建”辅助区域“则选择”现存文件“并在文本框中输入文件名
步骤 6 在完成设置对话框中显示以上所设置的信息单击”完成“按钮
(3)添加 DNS Domain
在一个区域中用户还可以按地域、职能等划分为多个子域便于管理,如用户可以在 NT2000.com 域中按部门划分为”sale“,”accounting“,”mis“等部门。下面用户举例说明在 nt2000.com 域中加入 accounting 子域:
步骤1 单击 nt2000.com 后单击”操作“单击”新建“,选择域
步骤2 在域对话框中输入域名
步骤3 单击确定
添加反向查询区域(zone)添加反向查询的具体步骤如下:
步骤 1 在DNS控制台中选择”反向查询区域→操作→创建 新区域“ 步骤 2 启动创建新区域向导→在选择区域类型对话框中选择标准主要区域
步骤3 在网络 ID 对话框中输入反向搜索区域的网络标识(假设提供反向查询的 zone 为198.188.188),向导会自动输入子网掩码并在文件名对话框中输入的新文件名称255.255.255,188.188.198.in-addr.arpa.dns。
步骤4 单击”完成“按钮则在反向搜索区域中添加了一个新区域(4)设置 DNS 服务器的动态更新
在 Windows2000 中可以利用动态更新的方式,当 DHCP 主机 IP 地址发生变化时,会在 DNS 服务器中自动更新,这样减轻了管理员的负荷。具体设置如下:
步骤1 首选用户需要对 DHCP 服务器的属性进行设置,选择 DHCP 服务器,显示属性单击动态DNS如右图在其中选中”启动 DNS 客户信息动态更新“并选中选项中的”当租约过期时取消正向搜索、对非动态 DNS 客户更新“两个选项
步骤2 在 DNS 控制台中展开正向搜索区域,选择区域,单击”操作“,单击属性,在”常规“标签中在下方的动态更新下拉列表中选择”允许更新“
步骤3 展开反向搜索区域,选择反向区域单击操作单击属性并在”常规“标签中下方选择”允许更新“。
这样在客户信息改变时,它在 DNS 服务器中的信息也会自动更新。
服务器的转发程序的设置
通常在用户需要通过慢速连接访问远端DNS服务器时需要使用转发器。
选择 DNS 服务器→操作→属性→转发程序标签→输入转发器的 IP 地址→如果要将此服务器作为转发器的辅助服务器可以选择”作为辅助服务器操作“选项,这样如果转发器无法提供所需信息时,则此服务器直接将结果发送给客户机,不再进行查询。
(5)修改区域传输的通知列表
对”起始颁发机构(SOA)“参数的设置
单击区域单击”操作“,单击属性进入起始颁发机构(SOA)标签,分别对以下参数进行设置:序列号、刷新间隔、重试间隔、过期间隔、最小 TTL 修改通知列表
通过区域属性,进入区域传送标签,”通知“按钮出现 永不发送区域通知:在主服务器的数据发生改变时不发送区域通知给其它服务器
通知名称服务器页上的服务器:在主服务器的数据发生改变时向名称服务器列表中的服务器发送通知,只通知指定的服务器。3.与 WINS 的结合使用
当 DNS 服务器与 WINS 服务结合使用后,在DNS域名空间无法查询的名称可以利用 WINS 管理的 NetBIOS 名称空间进行查询。当 DNS 服务器与 WINS 服务结合使用时,在区域中加入两个专门的 WINS 资源记录类型(WINS 和 WINS-R 资源记录),当使用 WINS 记录时,如果 DNS 无法在域名空间中查找到相应的主机名称,.则将记录转送到这个记录所设置的 WINS 服务器中,WINS-R 记录提供反向查询的功能。在一个区域中启动 WINS 查询功能具体步骤如下:
步骤1 首选在 DNS 服务器中选择一个区域右键单击属性属性单击WINS标签
步骤2 选择”使用 WINS 名称解析“选项,在下方的 WINS 服务器中添加 WINS 服务器的 IP 地址如图
步骤3 如果在区域传输时 用户不想将这条记录复制给其它 DNS 服务器,则用户可以选中”不复制此记录“设置完毕后,在数据库中将添加一个类型为WINS的记录。
当 DNS 服务器在将查询结果发送给客户机的时候,它将结果保存到缓存中一份。下次再有相同查询时,可以利用缓存中的数据直接回答,提高了查询速度。利用高级设置其缓存中的数据保存时间 TTL。
超时值放入高速缓存:设置数据在缓存中的保存时间
查找超时值:在 DNS 服务器将查询发送给 WINS 服务后,如果在此时间间隔内 WINS 服务器没有作出回答,则DNS服务器将此查询结果发送给客户机。
设置 WINS 反向查询
在DNS控制台中展开反向搜索区域,选择区域→属性→选择 WINS-R 标签,在其中选择”使用 WINS 反向搜索“选项,然后在”附加到反向搜索上的域名"文本框中输入DNS 域名称,DNS 服务器会将由 WINS 查询到的计算机名与域名合并后,再发送给客户机。如查询结果为 test , 而域名称为 nt2000.com 则返回给客户机的结果为 test.nt2000.com
实验截图
五、实验总结
通过实验,我在计算机操作方面获得了一些实际的学习经验,巩固并检验了自己在本科学习的知识水平。在此期间,我进一步学习了计算机网络的理论知识体系,有了更深的理解,将理论与实践有机结合起来。本次认识实验是我大学生活中不可或缺的重要经历,其收获和意义可见一斑。首先,我可以将自己所学的知识应用于实际的工作中,理论和实际是不可分的,在实践中我的知识得到了巩固,解决问题的能力也受到了锻炼;其次,本次实验开阔了我的视野。
六、实验心得
这次实验和前几次的计算机操作实验一样,需要组员配合在计算机上操作,锻炼我们的团体协作能力。虽然我们并没有成功完成实验,但是我们认真阅读实验指导书,接触了以前从没接触过的linus操作系统,了解和学习Linux操作系统,DNS 的概念和原理,在Windws2003下学习安装DNS服务器,学习DNS 服务器的配置与管理和DNS 和 WINS 的结合使用,都让我们有很大的收获,这对我们锻炼实际操作能力很有帮助,这次试验的内容有很多事我们第一次接触,细心耐心上都得到很大锻炼与提高,在实验过程中遇到了一些问题,会请教同学和老师,也需要注意一些问题,如ID,子网掩码,网关的地址一定不能写错,需要仔细认真的检查。这是一次非常难得的计算机动手实践课程,相关能力得到很大锻炼与提高,同时我们对计算机网络这门课程也有了新的收获,这是一次非常难得的计算机动手实践课程。