Python tftp处理错误:";在“OACK”中找不到选项;

Python tftp处理错误:";在“OACK”中找不到选项;,python,python-3.x,file-transfer,packet,tftp,Python,Python 3.x,File Transfer,Packet,Tftp,我正在使用Python3的模块tftpy来尝试处理tftp风格的文件下载。但是,当我运行应用程序时,会出现以下错误: \Python38\site-packages\tftpy\TftpStates.py", line 53, in handleOACK raise TftpException("No options found in OACK") tftpy.TftpShared.TftpException: No options found in OAC

我正在使用Python3的模块tftpy来尝试处理tftp风格的文件下载。但是,当我运行应用程序时,会出现以下错误:

\Python38\site-packages\tftpy\TftpStates.py", line 53, in handleOACK
    raise TftpException("No options found in OACK")
tftpy.TftpShared.TftpException: No options found in OACK
如何让python项目忽略OACK/发送不包含OACK的新请求包

免责声明:这是我第一次尝试使用TFTP数据包,所以我还是个新手。如果我提出的问题不是恰当的处理方式,我应该怎么做

有关该问题的更多数据:

  • 我正在使用一个外部芯片,该芯片被编程为忽略OACK数据包选项
  • 当我使用C#和TFTP.Net包时,传输工作正常,所以我不认为这是我的TFTP服务器的问题。然而,由于我们的主要应用程序是基于python的,所以我希望能够通过Python3处理这种通信
  • 我正在运行python 3.8.5
  • 在我的服务器端,它说它接收到一个错误代码为8的数据包
  • python脚本:

    import tftpy
    
    
    client = tftpy.TftpClient('192.168.0.42', 69)
    client.download('triplog.txt', 'faultlog.txt', packethook=None, timeout=5)
    
    完全回溯:

    Failed to negotiate options: No options found in OACK
    Traceback (most recent call last):
      File "C:\Users\selena\Documents\PythonScripts\TFTP\TFTPTestScript.py", line 23, in <module>
        client.download('triplog.txt', 'faultlog.txt', packethook=None, timeout=5)
      File "C:\Users\selena\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\tftpy\TftpClient.py", line 58, in download
        self.context.start()
      File "C:\Users\selena\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\tftpy\TftpContexts.py", line 402, in start
        self.cycle()
      File "C:\Users\selena\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\tftpy\TftpContexts.py", line 202, in cycle
        self.state = self.state.handle(recvpkt, raddress, rport)
      File "C:\Users\selena\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\tftpy\TftpStates.py", line 566, in handle
        self.handleOACK(pkt)
      File "C:\Users\selena\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\tftpy\TftpStates.py", line 53, in handleOACK
        raise TftpException("No options found in OACK")
    tftpy.TftpShared.TftpException: No options found in OACK
    [Finished in 0.7s with exit code 1]
    
    协商选项失败:在OACK中找不到选项
    回溯(最近一次呼叫最后一次):
    文件“C:\Users\selena\Documents\PythonScripts\TFTP\TFTPTestScript.py”,第23行,在
    client.download('triplog.txt','faultlog.txt',packethook=None,timeout=5)
    文件“C:\Users\selena\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8\u qbz5n2kfra8p0\LocalCache\Local Packages\Python38\site Packages\tftpy\TftpClient.py”,下载第58行
    self.context.start()
    文件“C:\Users\selena\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8\u qbz5n2kfra8p0\LocalCache\Local Packages\Python38\site Packages\tftpy\TftpContexts.py”,第402行,开始
    self.cycle()
    文件“C:\Users\selena\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\Local Packages\Python38\site Packages\tftpy\TftpContexts.py”,循环中的第202行
    self.state=self.state.handle(recvpkt、raddress、rport)
    文件“C:\Users\selena\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8\u qbz5n2kfra8p0\LocalCache\Local Packages\Python38\site Packages\tftpy\TftpStates.py”,第566行,位于句柄中
    自动扶手(pkt)
    handleOACK中的文件“C:\Users\selena\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8\u qbz5n2kfra8p0\LocalCache\Local Packages\Python38\site Packages\tftpy\TftpStates.py”第53行
    引发TftpException(“在OACK中找不到选项”)
    tftpy.TftpShared.TftpException:在OACK中找不到选项
    [在0.7秒内完成,退出代码为1]
    
    将此解决方案归功于@ewong

    在初始化客户机时添加选项后,即使我不需要这些选项,代码仍然有效。我将提出一个问题@https://github.com/msoulier/tftpy 看看这是一个需要解决的bug还是一个深思熟虑的选择

    解决方案代码:

    import tftpy
    
    
    client = tftpy.TftpClient('192.168.0.42', 69, options={'blksize': 8})
    client.download('triplog.txt', 'faultlog.txt', packethook=None, timeout=5)
    

    这是您提供的完整回溯吗?@E感谢您的帮助,我已将完整回溯和服务器随后收到的错误数据包的说明添加到原始帖子中。我一直在查看tftp代码,似乎tftp希望在
    client=tftp.TftpClient..
    行中设置选项。请尝试
    client=tftp.TftpClient('192.168.0.42',69,options={'blksize':8})
    这可能是代码中的问题。。试着提出一个问题@