2 u013429928 u013429928 于 2016.04.25 22:52 提问

python udp的问题,收不到服务器的返回数据

本来是做个dns解析程序,本地记录找不到的话再向别的服务器请求,但是现在只写了一部分,直接将来自客户端的请求转发给202.106.0.20,但是完全没反应,收不到服务器返回的数据报。求解答

import os
import socket
import threading

#字典,用来存放域名-ip键值对
domain_ip={}

#去掉域名字符串最后的换行符
def DelLastChar(str):
str_list=list(str)
str_list.pop()
return "".join(str_list)

#从数据报中分离出网址字节码存入list
def get_request(your_list):
my_list = []
new_list = []
my_list.extend(your_list)
re_list = []
thelen = my_list[0]
try:
while thelen != 0:
new_list = new_list + my_list[1:thelen+1]
my_list[0:thelen+1] = []
thelen = my_list[0]
new_list.append('.')
except IndexError:
print ("The format of datagram is false!")
new_list.pop()
return new_list

#将网址字节码转换成域名
def digit_to_domian(d_list):
length=len(d_list);
for index in range(length):
if d_list[index]!='.':
d_list[index]=chr(d_list[index])
return ''.join(d_list);

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

#从本地文件读入域名-ip到字典中
data = open('dnsrelay.txt')
for each_line in data:
domain_ip.setdefault(DelLastChar(each_line.split(' ',1)[-1]),each_line.split(' ',1)[0])
data.close()

#监听本地53端口
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(('127.0.0.1', 53))
print('Bind UDP on 53...')
while True:
data,(client,port) = s.recvfrom(1024)
if(port==53):
print(data)#this line can not run
else:
request = []
request = list(data)
domain=digit_to_domian(get_request(request[12:]))
s.sendto(data,('202.106.0.20',53))
print(domain)

2个回答

devmiao
devmiao   Ds   Rxr 2016.04.25 23:57
u013429928
u013429928   2016.04.26 14:59

但是不是这个原因啊,现在的问题是给服务器发送成功,但是服务器没返回数据

Csdn user default icon
上传中...
上传图片
插入图片