Perl. бэкап свичей

И всё прочее, что касается HTML
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
hm
ефрейтор
Сообщения: 59
Зарегистрирован: 2008-08-13 12:15:32

Perl. бэкап свичей

Непрочитанное сообщение hm » 2008-08-13 13:00:16

Поставили задачу, написать прогу, которая бы снимала бэкап каждый день и релизила в svn, а затем сравнивала бы их с предыдущим и отсылала дифф по почте. Написал малость, по описаниям модулей только теперь никак не получается собрать все в единую программу. Я новичок, сильно не бейте)

сканируем сеть

Код: Выделить всё

#!/usr/local/bin/perl -w

use Net::Ping;

sub who_send_ack(@);
sub main;

main;

sub main {
        my @acked;
        @acked = who_send_ack( 192, 168, 0, 2..254 );
        print "$_\n" foreach @acked;
        }

sub who_send_ack(@) {
        my( $first_three_octets, @last_octets, @hosts, $p, @acked );
        $first_three_octets .= shift() . "." for 1..3;
        push @hosts, map { $first_three_octets . $_ } @_;

        $p = Net::Ping->new( "syn", 2 );
        foreach my $host ( @hosts ) {
        $p->ping( $host );
            }
        while( my( $host,$rttp,$ip ) = $p->ack ) {
        push @acked, $ip;
            }
        return @acked;
}
снимаем версию девайса

Код: Выделить всё

#!/usr/local/bin/perl -w

use Net::SNMP;

open(FFC,"> /var/tmp/CISTEL");
my $session = Net::SNMP->session(
    -hostname  => '192.168.0.124',
    -community => 'public',
     );
my $sysvers = '1.3.6.1.2.1.1.1.0';
my $result = $session->get_request( -varbindlist => [$sysvers] );
print FFC $result->{$sysvers};
close (FFC);
$session->close;
exit 0;
снимаем конф со старых 3комов

Код: Выделить всё

#!/usr/local/bin/perl -w

use Net::Telnet;

my $hostname="192.168.0.20";
my $tftpserv="192.168.0.1";

$username="admin";
$password="admin";
$telnetcmd='system backupConfig save $tftpserv $hostname 3comoscfg.cfg';
$telnetcmd=~ s/(\$\w+)/$1/eeg;

$t = Net::Telnet->new ( Timeout => 10,
                        Prompt => '/Select menu option:/',
                        Errmode => 'die',
                        Host => $hostname);
$t->login($username, $password) or die "not authorized: ", $t->lastline;
$t->cmd($telnetcmd) or die "error: ", $t->lastline;
$t-> close;
exit 0;
конфы с новых 3комов

Код: Выделить всё

#!/usr/local/bin/perl -w

use Net::Telnet;

$hostname="192.168.0.21";
my $tftpserv = "192.168.0.1";

$username = "admin";
$password = "admin";
$telnetcmd = 'tftp $tftpserv put flash:/3comoscfg.cfg';
$telnetcmd =~ s/(\$\w+)/$1/eeg;

$t = Net::Telnet->new ( Timeout => 10,
                        Prompt => '/>/',
                        Errmode => 'die',
                        Host => $hostname);
$t->login($username, $password) or die "not authorized: ", $t->lastline;
$t->cmd($telnetcmd) or die "error: ", $t->lastline;
$t-> close;
exit 0;
снимаем с цисок

Код: Выделить всё

#!/usr/local/bin/perl -w

use Net::Telnet::Cisco;
use Timestamp::Simple qw(stamp);

$user = "admin";
$pass = "admin";

my $dt = stamp;
$backup_host  = "192.168.0.1";
$device       = "192.168.0.22";

$session = Net::Telnet::Cisco->new(Host => $device );
$session->login($user, $pass);

$session->enable($pass);
$session->cmd("copy run tftp://$backup_host\n\n\n");
$session->close;

exit 0;
дифф

Код: Выделить всё

#!/usr/local/bin/perl

use Text::Diff;

open(FFA,"> /var/tmp/diff");
open(FFF,"< /var/tmp/123");
open(FFE,"< /var/tmp/321");

my $diff = diff \*FFF, \*FFE, { STYLE => "Table" };

close (FFF);
close (FFE);
print FFA $diff;
close (FFA);
exit 0;
а тут уже снимаем конф по ssh

Код: Выделить всё

#!/usr/bin/perl -w

use Net::SSH::Perl;
use Net::SMTP_auth;

my $host = "192.168.0.31";
my $user = "admin";
my $pass = "admin";
my $cmd='show running';
open(FFF,"> /var/tmp/test.conf");

my $ssh = Net::SSH::Perl->new($host, debug => 1);
$ssh->login($user, $pass);
my ($out, $err) = $ssh->cmd($cmd);

$result=$out;
print FFF $out;
close (FFF);

$smtp = Net::SMTP_auth->new('mail.local');
$smtp->auth('LOGIN', 'test', 'test');
$smtp->mail('back@serv.local');
$smtp->to(''admin');
$smtp->data();
$smtp->datasend("To: postmaster\n");
$smtp->datasend("\n");
$smtp->datasend($result);
$smtp->dataend();
$smtp->quit;

exit 0;
ну и для релиза на свн нужно написать.
Алгоритм: сканируем диапазон, если хост живой снимаем версию через снмп, далее выполняем скрипт, соответсвующий девайсу бэкапа на тфтп и релизим на свн. затем проверяется дифф между тем, что лежит на свн и тфтп и дифф отправляется по почте. вот и все

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: Perl. бэкап свичей

Непрочитанное сообщение hizel » 2008-08-13 13:36:35

во-первых если вы ставите Net-SNMP
не будет ли удобнее использовать

Код: Выделить всё

use SNMP;
вместо Net::SNMP

во вторых не будет ли универсальнее делать просто полностью срез всего дерева snmp для
данного устройства, по идее там должно содержатся полная конфигурация свича
хм правда заодно там еще будет и текущее состояние

первые мысли
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Аватара пользователя
hm
ефрейтор
Сообщения: 59
Зарегистрирован: 2008-08-13 12:15:32

Re: Perl. бэкап свичей

Непрочитанное сообщение hm » 2008-08-13 14:09:24

эммм, я не вдавался в подродности. просто в Cpan нашел модуль Net:SNMP , почитал и написал.
а на счет получения конфа по снмп. надо бы заюзать. по мере продвижения буду выкладывать тут свои наработки) спасибо.

Аватара пользователя
hm
ефрейтор
Сообщения: 59
Зарегистрирован: 2008-08-13 12:15:32

Re: Perl. бэкап свичей

Непрочитанное сообщение hm » 2008-08-13 15:14:49

а каким образом можно слить конф по снмп?

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: Perl. бэкап свичей

Непрочитанное сообщение hizel » 2008-08-13 15:18:31

например для сиськи
http://www.opennet.ru/base/cisco/snmp_manage.txt.html
=)
смотреть mib файлики для конкретного устройства ;)
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Аватара пользователя
hm
ефрейтор
Сообщения: 59
Зарегистрирован: 2008-08-13 12:15:32

Re: Perl. бэкап свичей

Непрочитанное сообщение hm » 2008-08-13 16:10:45

hizel писал(а):например для сиськи
http://www.opennet.ru/base/cisco/snmp_manage.txt.html
=)
смотреть mib файлики для конкретного устройства ;)
а на 3комах будет работать???

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: Perl. бэкап свичей

Непрочитанное сообщение hizel » 2008-08-13 16:11:26

думаю нет :)
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Аватара пользователя
hm
ефрейтор
Сообщения: 59
Зарегистрирован: 2008-08-13 12:15:32

Re: Perl. бэкап свичей

Непрочитанное сообщение hm » 2008-08-13 16:21:56

решил попробовать, действительно не получается)
такц, тогда такой способ отпадает

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: Perl. бэкап свичей

Непрочитанное сообщение hizel » 2008-08-13 16:26:01

мм к каждой нармальной и ненормальной железке если оно поддерживает snmp
хороший производитель прилагает файлики mib, они, эти файлики, текстовые,
хуман-реадабле и в них можно потупить и узнать много нового собственно о железке ;)
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Аватара пользователя
hm
ефрейтор
Сообщения: 59
Зарегистрирован: 2008-08-13 12:15:32

Re: Perl. бэкап свичей

Непрочитанное сообщение hm » 2008-08-15 11:54:17

http://support.3com.com/infodeli/tools/ ... 15snmp.htm
насколько я понимаю, с 3кома я не смогу снимать конфы по снмп.