Jump to content
Калькуляторы

FTP-сервер с динамикой

Есть коммутатор, который умеет загружать/выгружать конфиги по 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)?

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Или нужно писать 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();
 }

 

в принципе можно сделать такой вокэраунд

)))

Share this post


Link to post
Share on other sites

pppoetest

Такой вариант же тупо однопоточный и обслуживает лишь одного клиента в момент времени. Надо либо к inet.d его прикручивать, делать потоки как минимум

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.