北邮计算机网络课程设计DNS服务器_第1页
北邮计算机网络课程设计DNS服务器_第2页
北邮计算机网络课程设计DNS服务器_第3页
北邮计算机网络课程设计DNS服务器_第4页
北邮计算机网络课程设计DNS服务器_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

精选优质文档-----倾情为你奉上精选优质文档-----倾情为你奉上专心---专注---专业专心---专注---专业精选优质文档-----倾情为你奉上专心---专注---专业北邮计算机网络课程设计DNS服务器1环境操作系统随意,语言python2.72.文件Socket.py说明完成缓存检测,确定是回应,还是转发,如果是回应,确定是本地回应还是外部应答转发importsocketimportmydicimportcharhandleimportmakeframes=socket.socket(socket.AF_INET,socket.SOCK_DGRAMport=53the_dic=mydic.get_web_ip(client_request={}client_request_index={}reverse_map={}key_record=0client_wait=[]s.bind(('',porttime_rest=0request_general=''print'running'whileTrue:try:msg,(client,port=s.recvfrom(1024except:print'Timeout!'continuerequest=[]request=list(msgrequre_web=charhandle.get_request(request[12:]website=''.join(requre_webif(port==53:answer=[]answer=list(msgprint"Type:RemoteResponse"print"remoteansweris:"response_ip=msg[-4]+msg[-3]+msg[-2]+msg[-1]char_ip=socket.inet_ntoa(response_ipprintwebsite+'hastheip:'+char_ipfre=mydic.storeForUpdate(website,char_ipprint'withthefrequenceof'+str(fre###real_request=client_request[request[0]+request[1]]foreach_clientinclient_wait:my_key=client_request[request[0]+request[1]+str(each_client]ifclient_request_index.get(my_key!=None:s.sendto(msg,client_request_index[my_key]print"ResponsetoipandClientport:"printclient_request_index[my_key]breakelse:print"Type:ClientRequest"print"ipandport:"print(client,port###requre_web=charhandle.get_request(request[12:]###website=''.join(requre_webprint"Requestwebsite:"+websiteif(the_dic.get(website!=None:print"Foundinlocalcache:"re_ip=the_dic.get(websiteprintre_ipfre=mydic.storeForUpdate(websiteprintre_ip[0]+'withfrequence'+str(frezhen=makeframe.make(re_ip[0],msgs.sendto(zhen,(client,portelse:print"needtoaskremoteserver"key_record=key_record+1request_general=key_recordclient_request[request[0]+request[1]+str(client]=request_generalclient_request_index[request_general]=(client,portifclientnotinclient_wait:client_wait.append(client#selectauthorityDNSserverasyouwishs.sendto(msg,('',53time_rest=time_rest+1try:if(time_rest==50:print'payattention'print'######################'mydic.updateCache(print'######################'the_dic=mydic.get_web_ip(time_rest=0except:print'notvalidfrequence'print'--------------------'s.close(Mydic.py完成本地查询,LRU算法维护本地缓存,socket.py第97行的time_request值可以确定更新缓存的频率,可以直接输出在dnsrelay.txt内,但是为了方便观测变化,我输出到了dnsrelaycopy.txt里面,运行一段时间之后,可以去看看学习到的新条目importpickleimportosimportthreadingA=[]d_web_ip={}d_ip_web={}update_dic={}data=open('dnsrelay.txt'foreach_lineindata:try:(ip,sitecopy=each_line.split('',1(site,nothing=str(sitecopy.split('\n',1d_web_ip[site]=[ip,1]d_ip_web[ip]=siteexcept:print'fileerror'data.close(try:withopen('newdnsrelay.pickle','wb'asnewdnsrelay_file:pickle.dump(d_web_ip,newdnsrelay_fileexceptIOErroraserr:print'Fileerror:'+str(errexceptpickle.PickleErrorasperr:print'Picklingerror:'+str(perrdefget_web_ip(:withopen('newdnsrelay.pickle','rb'asf:globalupdate_dicupdate_dic=pickle.load(freturnupdate_dic.copy(return(NonedefstoreForUpdate(web_site,add=None:globalupdate_dicif(update_dic.get(web_site!=None:add_frequen=update_dic[web_site]add_frequen[1]=add_frequen[1]+1printweb_site+'frequenceincrase1,withip'+add_frequen[0]returnadd_frequen[1]else:update_dic[web_site]=[add,1]print'recordforanewsite'return1defupdateCache(:globalupdate_dicm=update_dic.copy(t=threading.Thread(target=my_thread,kwargs=mprint'readytoupdatelocalcache't.start(t.join(defmy_thread(*argu,**arg:frequence=[]remain_dic={}foreach_keyinarg:tmp=arg[each_key]if(tmp[1]notinfrequence:frequence.append(tmp[1]if(tmp[0]=='':remain_dic[each_key]=''print'variousfrequence:'foreachinfrequence:print'have'+str(eachforeach_keyinremain_dic:arg.pop(each_key#enimilatebani=0while(i<30:max_frequence=max(frequenceforeach_keyinarg:tmp=arg[each_key]if(tmp[1]==max_frequence:remain_dic[each_key]=tmp[0]i=i+1if(i==30:break;frequence.remove(max_frequenceif(notfrequence:###nomorebreak;updateFile(remain_dicdefupdateFile(new_dic:f=open('dnsrelaycopy.txt','w'foreach_keyinnew_dic:word=str(new_dic[each_key]+''+str(each_keyf.write(wordf.write('\n'new_dic[each_key]=[new_dic[each_key],0]try:withopen('newdnsrelay.pickle','wb'asnewdnsrelay_file:pickle.dump(new_dic,newdnsrelay_fileexceptIOErroraserr:print'Fileerror:'+str(errexceptpickle.PickleErrorasperr:print'Picklingerror:'+str(perrMakefram.py成帧模块,形成对外围权威服务器的询问帧importsocketdefmake(re_ip,msg:tmp_list=[]forchinmsg:tmp_list.append(chtmp_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_ipch_ip=[]foreach_chindive_ip:ch_ip.append(each_chtmp_list=tmp_list+ch_i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论