我知道这不是 TFTP 的用途,但我的工作环境里有很多不同类型的设备从 TFTP 服务器获取配置信息。我正在开发的是一个跟踪和维护设备配置的配置系统,我希望能够即时生成所请求的文件,就像你对任何 Web 应用程序所做的那样。
是的,其中一些设备可以支持 HTTP 进行配置,但并非所有设备都支持,我们希望保持一致。
是否有任何 TFTP 守护进程可以提供类似于 CGI 的功能?
答案1
快速搜索发现了这一点tftpd-cgiSourceforge 上的项目 — — 可能值得一看。
我还编写了一个能够提供 CGI 服务的简单 tftpd 服务器,可供使用在 Github 上,所以这绝对是可能的。我还没有用任何 PXE 客户端测试过,但它确实适用于我的操作系统的 tftp 客户端。
我的测试用法:
./tftpd-cgi.py &
echo 'get cgi/test' | tftp 127.0.0.1; cat test && rm test
我的简单 CGI 脚本的输出如下:
Hello from CGI land!
127.0.0.1:61796
答案2
这是针对这里遗憾的是,由于 TFTP 协议的限制,这似乎很困难甚至不可能。
> 你好。
>
> 有没有考虑过允许 tftp 服务器提供
动态内容?
>是的。这个协议让事情变得很困难。
你必须保证内容在几分之一秒内生成,否则你的客户端很可能会淹没你的服务器。
问题是,为了能够回答 tsize 查询,您必须知道输出的完整大小。但是,由于 TFTP 不能保证区分 RRQ 重新发送和新请求(pxelinux 会进行区分,但 TFTP 服务器很难利用它),因此您必须在第一个请求之前得到答复。
我对 TFTP“暂停”选项和操作码有一个建议,但我必须 (a) 实现它,(b) 将其写为 RFC,(c) 弄清楚如何通过 IETF 获取它,IETF 喜欢假装 TFTP 不存在。
答案3
更好的设计是生成所有配置文件并将它们缓存在 tftpboot 目录中,而不是尝试动态生成它们。理想情况下,您的设备请求的文件名应该是唯一的或可识别的,您可以根据此预先生成文件。