Есть вот такой модуль для DES-3526 и DES-3200:
Код:
package Connect_to_sw;
BEGIN {
use Exporter ();
use Expect;
@ISA = "Exporter";
@EXPORT = ("&connect_to_sw", "&logout");
}
sub connect_to_sw{
my $sw_ip=$_[0];
########## VAR ################################################
my $user = 'YOUR LOGIN';
my $pass = '.YOUR PASSWORD';
my $timeout='3';
my $telnet= '/usr/bin/telnet';
########## SWITCH VAR##########################################
my $results='0'; # - don't know
my $speed_port='0';
local $error_code = 0;
########## ENTER_To_Switch ####################################
my $exp = new Expect;
#$Expect::Exp_Internal = 1; #- если нужны подробности
#$Expect::Debug = 3; # or 2, 3 for more verbose output
#$exp->log_stdout(0); # - не выводить на экран
#$Expect::Log_Stdout = 0; #- отключить вывод на экран
$exp = Expect->spawn("$telnet $sw_ip") or die "Cannot spawn $telnet: $!\n";
$exp->expect($timeout+20, # wait long to see if the switch is not accessible
[ qr/ser/i, sub { $exp->send("$user\n"); } ],
[ qr/unable/i,sub { $error_code=1;} ],
);
if ($error_code !=0) {return $result=0;} # sw not accessible
my $patidx = $exp->expect($timeout, 'ass');
$exp->send("$pass\n");
$patidx = $exp->expect($timeout, ':');
$exp->clear_accum();
return $exp;
}
sub logout{
my $exp=$_[0];
$exp->send(" logout\n");
$exp->clear_accum();
$exp->soft_close();
}
return 1;
END { }
Вызывать вот так:
Код:
#!/usr/bin/perl -w
use lib './Modules';
use strict;
use Connect_to_sw;
my $sw_ip = $ARGV[0];
my $exp=0;
$exp=&connect_to_sw($sw_ip);
if (not $exp==0)
{
&logout($exp);
print "\nConnect - Ok\n";
}
else
{print "\nConnect-Fail\n"}
Удобно для каждой проблемы писать функцию и передавать туда переменную $exp. Например
Код:
#!/usr/bin/perl -w
use lib './Modules';
use strict;
use Pvid_change;
use Connect_to_sw;
my $sw_ip = $ARGV[0];
my $exp=&connect_to_sw($sw_ip);
my $results=&pvid_change($exp);
&logout($exp);
print "\nRESULTS:\n";
print "$results\n";