Python套接字模块未检测到TFTP RRQ

2024-09-26 17:51:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我通过Python套接字模块实现了TFTP服务器。TFTP客户端一个接一个地发送5个RRQ请求。我的TFTP服务器接收这些RRQ请求中的前三个,并发送文件(.bin),接收确认,一切正常。但在前三次传输成功后,不会检测到第四次和第五次RRQ请求

以下是按顺序排列的5个文件的大小:

(1)文件1-<;50 KB

(2)文件2-<;50 KB

(3)文件3-=2900 KB

(4)文件4-<;50 KB

(5)文件5-=49000 KB

当我尝试跳过第三个文件时-收到第四个请求,成功发送,但在第五个RRQ时再次阻塞(开始发送,但在发送的10%时停止) 下面是侦听这些RRQ请求的代码段


   def pollTFTP(self):
        netconfig = self.winParent.get_iface_config()
        if not netconfig:
            raise BSPError('Bad network configuration.Check Network manager...')
        host = self.config.get_config('tftpaddress', netconfig and netconfig['server'])
        if not host:
            raise BSPError('TFTP address no defined')
        port = int(self.config.get_config('tftpport', str(TFTP_PORT)))
        sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        self.sock.append(sock)
        sock.bind((host, port))

        while self.winParent.ongoing==True:
            
            r,w,e = select.select(self.sock, [], self.sock, self.timeout)
            
            for  sock in r:
                    data, addr = sock.recvfrom(516)
                    t = TftpConnection(self,self.winParent)
                    print "t :" , t
                    thread.start_new_thread(t.connect, (addr, data))

此Python代码在Linux下运行良好,但在Windows下无法运行

self.timeout=2.0秒 TFTP端口=69

我可以看到客户端通过Wireshark发送第四个RRQ请求。我应该接收在下一行中创建的套接字对象

r,w,e = select.select(self.sock, [], self.sock, self.timeout)

编辑: 我发现某些数据包通过防火墙被阻止,因此这可能是一个问题。你知道防火墙对UDP数据包和端口69是否有时间限制或大小限制吗?如何配置?我在公司防火墙内工作


Tags: 文件ltselfconfighostgetkbtimeout

热门问题