сканируем сеть
Код: Выделить всё
#!/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;
Код: Выделить всё
#!/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;
Код: Выделить всё
#!/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;
Код: Выделить всё
#!/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;
Алгоритм: сканируем диапазон, если хост живой снимаем версию через снмп, далее выполняем скрипт, соответсвующий девайсу бэкапа на тфтп и релизим на свн. затем проверяется дифф между тем, что лежит на свн и тфтп и дифф отправляется по почте. вот и все