alibek Posted September 6, 2016 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
s.lobanov Posted September 6, 2016 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
pppoetest Posted September 6, 2016 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
alibek Posted September 6, 2016 Author Posted September 6, 2016 О, спасибо. Net::TFTPd я смотрел, но не понял, как его использовать. Вставить ник Quote
s.lobanov Posted September 6, 2016 Posted September 6, 2016 pppoetest Такой вариант же тупо однопоточный и обслуживает лишь одного клиента в момент времени. Надо либо к inet.d его прикручивать, делать потоки как минимум Вставить ник Quote
pppoetest Posted September 7, 2016 Posted September 7, 2016 Я просто указал направление куда копать. Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.