北邮计算机网络课程设计DNS 服务器 1 环境 操作系统随意,语言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 as...