




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
精選優(yōu)質(zhì)文檔-----傾情為你奉上精選優(yōu)質(zhì)文檔-----傾情為你奉上專心---專注---專業(yè)專心---專注---專業(yè)精選優(yōu)質(zhì)文檔-----傾情為你奉上專心---專注---專業(yè)北郵計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)DNS服務(wù)器1環(huán)境操作系統(tǒng)隨意,語(yǔ)言python2.72.文件Socket.py說(shuō)明完成緩存檢測(cè),確定是回應(yīng),還是轉(zhuǎn)發(fā),如果是回應(yīng),確定是本地回應(yīng)還是外部應(yīng)答轉(zhuǎn)發(fā)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算法維護(hù)本地緩存,socket.py第97行的time_request值可以確定更新緩存的頻率,可以直接輸出在dnsrelay.txt內(nèi),但是為了方便觀測(cè)變化,我輸出到了dnsrelaycopy.txt里面,運(yùn)行一段時(shí)間之后,可以去看看學(xué)習(xí)到的新條目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成幀模塊,形成對(duì)外圍權(quán)威服務(wù)器的詢問幀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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 租賃車輛備案管理制度
- 局業(yè)務(wù)會(huì)議管理制度
- 廢機(jī)油場(chǎng)地管理制度
- 電商公司后勤管理制度
- 綜合內(nèi)科科室管理制度
- 移動(dòng)公司能耗管理制度
- 白酒行業(yè)車間管理制度
- 店鋪招商部管理制度
- 礦山關(guān)鍵崗位管理制度
- 設(shè)備檢修軟件管理制度
- 5-電氣綠色專篇
- 外國(guó)城建史(復(fù)習(xí)整理)
- 新人教版小學(xué)生四年級(jí)下冊(cè)英語(yǔ)期末試題及答案-試題-試卷
- 高考語(yǔ)文必備古詩(shī)文(含翻譯及賞析)
- 內(nèi)蒙古自治區(qū)安全評(píng)價(jià)收費(fèi)指導(dǎo)性意見(試行)(2006年)
- 食品中日文加工用語(yǔ)
- 小班化教育課堂教學(xué).ppt
- ISO 鑄件尺寸公差標(biāo)準(zhǔn) ISO8062
- 巧克力糖自動(dòng)包裝機(jī)說(shuō)明書
- 等效內(nèi)摩擦角計(jì)算表
- 繼承不動(dòng)產(chǎn)登記具結(jié)書
評(píng)論
0/150
提交評(píng)論