Я знаю, что это не цель TFTP, но я работаю в среде, где множество различных типов устройств извлекают информацию о предоставлении с сервера TFTP. Я разрабатываю систему подготовки, которая отслеживает и поддерживает конфигурации устройств, и я хотел бы, чтобы запрошенные файлы генерировались на лету, как вы могли бы сделать с любым веб-приложением.
Да, некоторые из этих устройств могут поддерживать HTTP для обеспечения, но не все из них поддерживают, и мы хотим, чтобы все было согласовано.
Существуют ли какие-либо демоны TFTP, которые могут предоставить нечто подобное CGI?
Это адресовано Вот. К сожалению, это кажется трудным или невозможным, учитывая ограничения протокола TFTP.
> Привет.
>
> Рассматривалось ли когда-нибудь разрешение tftp-серверу
> предоставлять динамический контент?
>Да. Протокол усложняет задачу.
Вы должны гарантировать, что содержимое будет сгенерировано за доли секунды, иначе ваш клиент, скорее всего, затопит ваш сервер.
Проблема в том, что для того, чтобы иметь возможность ответить на запрос tsize, вы должны знать полный размер вывода. Однако, поскольку TFTP не гарантирует различие между повторной отправкой RRQ и новым запросом (pxelinux сделает различие, но TFTP-серверу трудно его использовать), поэтому вы должны получить ответ перед первым запросом. .
У меня есть предложение для опции "пауза" и кода операции TFTP, но мне нужно (а) реализовать ее и (б) записать в виде RFC, (в) выяснить, как получить ее через IETF, который вроде притвориться, что TFTP не существует.
Лучше всего было бы сгенерировать все файлы конфигурации и кэшировать их в каталоге tftpboot, а не пытаться сгенерировать их на лету. В идеале имя файла, которое запрашивает ваше устройство, должно быть уникальным или идентифицируемым, и вы можете предварительно сгенерировать файлы на основе этого.
Быстрый поиск показал это tftpd-cgi проект на Sourceforge - возможно, стоит посмотреть.
Я также только что написал простой tftpd-сервер, способный обслуживать CGI, доступный на 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