Python tftp handling error: "No options found in OACK"

Python tftp handling error: "No options found in OACK"

我正在使用 python 3 的模块 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 数据包,所以我还是个新手。如果我提出的问题不是正确的处理方式,我该怎么办?

有关该问题的更多数据:

  1. 我正在使用被编程为忽略 OACK 数据包选项的外部芯片。
  2. 当我使用 C# 和 TFTP.Net 包时,传输有效,所以我认为这不是我的 TFTP 服务器的问题。但是,由于我们的主要应用程序基于 python,我希望能够通过 python 处理此通信 3.
  3. 我是运行宁python3.8.5
  4. 在我的服务器端,它说它收到了一个错误代码为 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]

此变通解决方案归功于@ewong

在初始化客户端时添加选项后,即使我不需要它们,代码也能正常工作。我将在@https://github.com/msoulier/tftpy 提交一个问题,看看这是一个需要解决的错误还是一个有意的选择。

解决方案代码:

import tftpy


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