alibek Posted September 6, 2016 Есть коммутатор, который умеет загружать/выгружать конфиги по FTP/TFTP. На разных коммутаторах конфиги однотипны, но отличаются некоторые параметры: IP-адрес, имя хоста, snmp-строки, некоторые другие параметры. Хочу сделать так: - на коммутаторе выполняю команду upload configuration tftp 1.2.3.4 base_config.txt - коммутатор подключается к TFTP-серверу 1.2.3.4 и запрашивает файл base_config.txt - TFTP-сервер берет шаблонный файл base_config.tpl, подставляет в него часть параметров (ориентируясь на IP-адрес коммутатора) и возвращает в виде текстового файла Есть ли такое готовое? Или нужно писать TFTP-сервер на каком-нибудь ЯП (хоть на Perl)? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
s.lobanov Posted September 6, 2016 tftp с хендлерами я не видел, но в принципе можно сделать такой вокэраунд без написания своего tftp-сервера: - на коммутаторе выполняю команду upload configuration tftp 1.2.3.4 SWITCH_IP.txt - коммутатор подключается к TFTP-серверу 1.2.3.4 и запрашивает файл SWITCH_IP.txt - tftp-сервер отправляет сообщение в syslog - syslog-ng ловит сообщение и запускает внешний скрипт для генерации конфига - коммутатор подключается к TFTP-серверу 1.2.3.4 и запрашивает файл SWITCH_IP.txt второй раз - TFTP-сервер отдаёт сгенерённый файл SWITCH_IP - (опционально) syslog-ng ловит сообщение от tftp-сервера о том, что файл скачали и удаляет файл SWITCH_IP.txt Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
pppoetest Posted September 6, 2016 Или нужно писать TFTP-сервер на каком-нибудь ЯП (хоть на Perl)? Всё уже украденонаписано, до нас. © Там делов то на десяток строк. #!/usr/bin/perl -w use strict; use Net::TFTPd; my $tftpdOBJ = Net::TFTPd->new('RootDir' => '/ololo') or die Net::TFTPd->error; my $has_incoming_msg = 0; while (1) { $has_incoming_msg = 1; my $tftpRQ = $tftpdOBJ->waitRQ(1) or $has_incoming_msg = 0; next if ($has_incoming_msg == 0); #IP кто запросил print $tftpRQ->getPeerAddr() . "\n"; #Тут генерим конфиг и ложим его в /ololo/$tftpRQ->getFileName() $tftpRQ->processRQ(); } в принципе можно сделать такой вокэраунд ))) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
alibek Posted September 6, 2016 О, спасибо. Net::TFTPd я смотрел, но не понял, как его использовать. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
s.lobanov Posted September 6, 2016 pppoetest Такой вариант же тупо однопоточный и обслуживает лишь одного клиента в момент времени. Надо либо к inet.d его прикручивать, делать потоки как минимум Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
pppoetest Posted September 7, 2016 Я просто указал направление куда копать. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...