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)

0

2个回答

0

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

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
python的UDP中,server自己给自己发信息,不能发送到client的问题
new_6.20_server.py   (服务器一般设置成持续等待接受客户端请求。服务器一般先接受,后发送。客户端反的。应该没有严格要求) new_6.20_client.py
TCP UDP多机通信无法接收到数据的问题
TCP UDP调试注意事项 一般如果是使用localhost和127.0.0.1这种做server端IP的情况,服务器与客户一般是在一个主机上进行了,这个时候做调试一般不会出现什么问题。但是不同的机器做主机与服务器的时候就不一样了。比方说Android与电脑,电脑与电脑通信会出现各种奇怪的问题。出现这种问题一般可以从以下几种途径找问题: (1)电脑上是不是开了防火墙,如果开了就关掉 (2)电
关于UDP向本机端口发送数据报但是接收不到数据的问题
用UDP数据报发送数据给本机,数据可以发出去,但是服务端(本机)却接收不到任何数据,刚接触网络,请指教! 服务器端: SOCKET  server_socket_udp; sockaddr_in server_address_udp,from_address_udp; char server_data[20]="你好"; server_socket_udp=socket(AF_INET,
window10系统的电脑有时候搜索不到UDP广播的问题
第一天: 今天真的是太悲剧了,公司刚刚配置一台安装有window10系统的电脑,我准备在上面运行程序,可是每次运行的时候都接收不到UDP数据,这可是非常糟糕的一件事情。因为这样证明我的程序没有通用性,因此我决定要解决这一问题。在网上怎么搜都没有搜到答案,于是我尝试: 卸载杀毒软件 设置防火墙同意软件连接 关闭防护墙 重置系统 整了一天,最后发现每次重置系统后就能够连接,但是过一会重启电脑又不能连接
Qt下UDPSocket一段时间后接收不到数据的问题
Qt下UDPSocket一段时间后接收不到数据的问题
如何解决UDP外网无法接收数据
如何解决UDP外网无法接收数据标题可能不能够专业,但是就是这遇到问题的表现。通过UDP开发一个小程序,本来在局域网内都测试通过。部署到外网服务器上就出现问题了。本来可以接收服务器的UDP回复的,现在统统接收不到了。网上找查了原因有很多,也带了很多名词: UDP打洞,心跳包 等等。查了又看,算是明白一点了,但是绕来绕去最终目的也就是外网也能想局域网一样能够接收普通的UDP包数据。这个问题我是第一次遇到
安卓UDP接收数据 经常失败
WIFI芯片发送广播UDP数据给手机,经常出现安卓UDP接收数据 经常失败 解决方法: 1)WifiManager.MulticastLock 对象lock    失败,还是不行 一、有的手机不能直接接收UDP包,可能是手机厂商在定制Rom的时候把这个功能给关掉了。 1、可先在oncreate()方法里面实例化一个WifiManager.M
udp server接收数据并发送数据
需求:    .编写一个sever接收udp广播,如果有数据接收,就回应自己mac地址;(也可添加条件发送)    .编写client用于测试;/*****     server    *********//*------------------------------------------------------------------ -   Filename      :   MyBroa...
QT下udpsocket一段时间接收不到数据的问题
最近在做一个项目  采用UDPSOCKET进行数据的传输,发现在一段时间后,UDP接收不到数据了,找了很久的资料 才发现解决该问题的方法,估计不是最好的。代码如下: #include "mainwindow.h" #include "ui_mainwindow.h" #include MainWindow::MainWindow(QWidget *parent) : Q
关于recvfrom接收超时
recvfrom,这方法如果不特意设置,默认
linux udp 客户端recvfrom,一直没有数据接收,谁能帮看看这代码哪里出了问题了????
void* StartDiscoveryThread(void *arg) { int so_broadcast=1; struct sockaddr_in toAddr; //客户端的网络地址。 struct sockaddr_in serverAddr; //服务器端的网络地址。 char inBuff[DD_BUFF_LEN]; int sockaddrLen = 0; in
安卓真机上UDP程序收不到PC机数据包的解决方法
最近在写安卓UDP通信程序时遇到这个问题,就是在安卓模拟器上可以实现收发,但是放到真机上就只能发收不到PC机发来的数据。在网上查了一些资料,发现有很多朋友也遇到这个问题,都没有非常明确的解决方法,我经过尝试终于在真机上收到了PC机发的数据,跟大家分享一下。我用的是eclipse开发环境,安卓虚拟机为2.2版本。为方便讲解,先贴几张图:                图一 安卓模拟器界面
双网卡下使用udp带来的问题
今天在工程人员现场布置程序时,出了一个疑难问题,客户端发送的UDP包服务程序能收到,但是服务程序收到的包的ip地址很随机,造成在生成唯一ID的时候出现问题, 经过仔细排查,终于发现是双网卡的问题。因为在绑定socket时并没有指定IP(客户端上是双网卡),客户端发送UDP包时,没有指定使用哪个网卡,造成了终端收不到的包的ip地址不固定,所以使用UDP时如果不能肯定是单网卡,一定要绑定IP。(可以
Node.js UDP服务器无法收到客户端消息
Node.js UDP服务器无法收到客户端消息          在《Node.js开发实战详解》这本书的第四章里,在架设Node.js服务器后,运行客户端程序,服务器无法收到消息。server.jsvar dgram = require('dgram'); var server = dgram.createSocket('udp4'); server.on('listening', funct
网络UDP广播包发不出去或接收不到问题
在公司最近项目中,有关设备搜索采用UDP广播方式搜索,出现的情况是,部分机器能正常接收到广播包,部分机器接收不到广播包,部分机器发送不了广播包情况,经过N天的查询,结果发现惊人的秘密:虚拟机网卡导致广播包发送不出去或接收不到问题!!!以上结果仅供各位大神参考!
vultr 云主机收不到来自客户端的udp数据包
问题:vultr 云主机收不到来自客户端的udp数据包解决方案:1.登录vultr云主机管理后台,https://my.vultr.com/,点击左侧菜单栏中servers,会看到类似于如下的界面,然后,点击其中的Firewall,去配置防火墙规则,与国内的云主机防火墙配置基本相同2.点击Add Firewall Group,然后输入名字,然后,添加相应的规则,如下图所示,添加对应的规则:3.然后...
udp协议无法将外网的数据发送到内网
最近用java写了一个功能:用udp发送数据到服务器,然后服务器将返回一个数据到客户端。 在本地测试都没问题,但是部署到外网,外网就无法返回数据到内网了,那位知道如何用java解 决这个问题?...
UDP端口未打开,sendto()失败后,recvfrom设置无效,直接返回错误码?
  在项目中需要检测UDP是否打开,刚开始实现是定时发送数据包,recvfrom设置超时时间是1s。结果发现当UDP没有开启时(比如电脑开机后直接运行)recvfrom设置的超时时间无效,而是立即返回SOCKET_ERROR,recvfrom函数返回0。 recvfrom返回值为0有两种情况: 1.socket已经"温和"关闭(使用shutdown或者设置linear属性) 2.对方发送一个空...
udp端口接收不到数据BUT抓包可以抓到数据,why?
今天在做网络开发的时候,在向一台服务器上发送数据的的时候,可是在服务器监听udp端口的程序一直接收不到数据,可是经过抓包工具,可是能够抓到数据,这到底是什么原因呢?晕倒中..... 我在服务器做的程序又是写成了windows服务,所以一直找不到问题的所在,一直郁闷中....灵光
一个关于UDP socket服务端接收长度不正确的问题
最近项目需要实现一个通过UDP协议和远端服务平台通讯的需求,简要描述如下: 本端为嵌入式linux路由器(udp客户端,linux C编码),远端为租用的阿里云服务器(udp服务端,java编码), 通信协议为UDP,本端会定时向远端服务器发送消息。 在实现和调试过程中发现一个问题: 1)将远端服务程序放在实验室pc机上调试没有问题,即“路由器-PC”交互正常。 2)将远端服务程序放
关于udp socket recvfrom函数的一个易错问题: 如果应用程序指定的接收长度不够怎么办?
我们来看这样一个问题, 在udp socket变成中, sendto连续三次发送10个字节的数据,
QUdpSocket收不到回复及分析
QT中使用QUdpSocket发送数据给服务器,然后通过readyread信号读取回复。init: udp=new QUDPSocket() connect(udp,SIGNAL(readyread()),this,SLOT(processread()));work: udp->writedatagram实际情况是:数据能够发送出去,服务器返回的数据却无法触发readyread信号。实验后,如下代码
解决接收不到组播包的问题
目前用的集群是在应用层实现的,主要功能是实现在机器之间互转请求。今天在部署的时候,发现请求没有在节点之间互转,相同的请求发送一次后miss,第二次发送的时候还是miss。正常来说,第一次miss后会在集群内缓存一份,之后再有关于这个文件的请求不管发送到哪个机器都应该是hit的。 集群之间的探活用的是组播消息,出现这种问题肯定是因为接收组播报文出了问题。之前用的时候都没有问题,所以先从环境入手来查
linux udp组播接收问题及原理分析
现象: 同一个udp组播源(igmpv2)d
UDP广播遇到的坑
一、前提 在做一个pc服务器(eclipse)向android客户端发送udp广播的功能(同一电脑上测试),android始终收不到数据 电脑ip:192.168.0.19 真机手机ip:192.168.0.24 android模拟器ip:10.0.2.15 pc服务器私网地址:10.0.2.2 子网掩码:255.255.255.0 二、问题 1、真机上可以收到,广播地址为192.
qt udp程序,在Windows中可以正常收取数据,到了Ubuntu中无法正常收取数据问题解决办法
本人在开发qt udp程序的过程中遇到一个很奇怪的问题,同样的程序,在windows中能够正常收取数据,换到Ubuntu中就不行了,问题困扰了两天,后来终于找到了解决办法,问题如下: 一开始使用如下方法: qLidarSocket = new QUdpSocket(this); QHostAddress serverAddress = QHostAddress("192.168.1
python里使用socket创建UDP时间服务器
在这里使用数据报协议socket.SOCK_DGRAM,就是所谓的UDP协议。调用bind函数绑定一个端口,然后接收到客户端数据再发送回去:# File: socket-example-5.py import socket import struct, time # user-accessible port PORT = 8037 # reference time TIME1970 = 22
UDP要注意的地方
1.UDP服务器大多数都是迭代服务器。 2,没有流量控制,可以很容易的让接收端缓冲区溢出 3.其没有发送缓冲区,但是一个套接字公用一个接收缓冲区(来自不同端的消息都放在这个缓冲区中。 4,可以发送0字节长度的数据,接收0自己长度的数据。并不像TCP套接字上read返回0值,表示对端已关闭。因为其是无连接的,所以也就没有诸如关闭一个UDP套接字之类的事情。 5.为了防止由于丢包而引起的阻塞,
C#开发的UWP的DatagramSocket收不到外部UDP包解决方案
UWP的服务端代码如下: public const int UDPPort = 4396; static DatagramSocket UDPListener; public static void Listen() { UDPListener = new DatagramSocket();
Android收发UDP报文详解 及 优雅解决接收不到问题
前段时间项目组接了一个研究所项目,移动端这边需要做一个UDP接收报文的程序APP,其中还涉及到多页面之间收发报文、动态修改地址、端口号等等。原本编写这个收发程序并不难,步骤也比较固定,在网上找了相关例子进行二次开发,可是发现UDP报文接收不到,这其中还是隐藏着某些坑,仅以此篇文章来总结其奥妙精髓。
Linux C TCP服务器收不到报文
TCP服务器收不到报文本Markdown编辑器使用[StackEdit][6]修改而来,用它写博客,将会带来全新的体验哦:问题描述 最近写了一个tcp服务器,测试发现始终收不到服务器报文。问题原因 进一步调试发现了问题所在,accept函数如下://if ((client_sock = accept(server_sock, (struct sockaddr *)&addr, &len)) <
python--UDP--客户端向服务器端发送消息
#消息发送端--客户端 import socket #创建一个socket,用函数socket(); client_send = socket.socket(type=socket.SOCK_DGRAM) # 设置对方的IP地址和端口等属性; ip_port = ("10.11.53.74",10086) #发送数据,用函数sendto() msg = input("请输入消息:") clie...
android mina 客户端无法接收信息的原因
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和流程图 离线写博客 导入导出Markdown文件 丰富的快捷键 快捷键 加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl
python应用系列教程——python使用socket创建udp服务器端和客户端
全栈工程师开发手册 (作者:栾鹏) python教程全解 python使用socket创建udp服务器端和客户端。服务器端为一个时间戳服务器,在接收到客户端发来的数据后,自动回复。客户端,等待用户输入,回车后向服务器发送用户输入的内容。分别在python2.7和python3.6下测试。在启动时需要先启动服务器端,在启动客户端。udp协议是无连接的,不需要向tcp一样先建立连接,也就照成
多播接收不到的处理
ubuntu把组播功能分为三个层次:0,1,2。2为既可发送也可接收组播数据包,1为能发送但不能接收,0为禁用。2为运行所有的组播功能即allmulti,可通过ifconfig查看allmulti是否运行,running allmulti则表示可接收组播数据包,否则不能。启用allmulti方法为:       ifconfig eth0 allmulti       禁用方法为:
关于CocoaAsyncSocket接收不到消息的问题
使用CocoaAsyncSocket过程中碰到不回调接收消息的函数- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag原因是[_tcpSocket readDataWithTimeout:5 tag:tag];这个函数的执行问题 首先从字面意思上看这个方法的作用像是(读? or 接收?)...
GCDAsyncUdpSocket 收不到广播包?
IOS开发中,使用 GCDAsyncUdpSocket接收广播包,折腾半天没有反应。其实很简单, bind port时不要指定 interface!  [mGCDAsyncUdpSocket bindToPort:0  error:&error];
[转] NB-IOT之一个完整的BC95 UDP从开机到数据发送接收过程
一直没来得及写一个完整的NB-IOT BC95的UDP数据传输过程,这里用我们的开发板来演示一下,如何进行一次UDP数据收发。硬件:开发板:EVB_USB(点击购买)软件:串口助手:QCOM_V1.6(点击下载)UDP Server:TCP/UDP Socket 调试工具 V2.5(点击下载)—————————————————分割线————————————————首先将开发板接入电脑的USB中,如...
python网络编程之udp——接收与发送数据
网络编程之udp 网络协议有udp和tcp等等,今天就记录一下udp的接收数据与发送数据 发送数据 比较基础的代码案例,能够实现基础的进程间通信, 在这里如何检查代码成功实现了呢?? 我们需要借助一个小的APP助手 ——tcp调试助手 tcp调试助手 效果图如下(版本不一致可能会导致不一致,但是大致一样): 代码实现流程: 创建套接字 输入数据 发送数据 (方法参数 发送的的数据(注意编码,是...
解决:ServerSocket接收不到字串数据
代码↓ client: server: 启动后,server不打印日志。 解决方案:因客户端发送的字串没有结束符,加上结束符就好了。↓ 效果:↓
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 python服务器开发教程 python服务器教程