interactive login on cgi script
Posted
by raindrop18
on Stack Overflow
See other posts from Stack Overflow
or by raindrop18
Published on 2010-06-07T17:57:33Z
Indexed on
2010/06/07
18:02 UTC
Read the original article
Hit count: 269
perl
I am new for perl-cgi script. and my objective is to create user/pass interactive script to log and get information from multiple device at once. instead of add the user/pass credential on the script itself. since i am new if some one show me how to write the interactive part of the script. thanks much!!!
here is the current code
usr/local/bin/perl -wl use CGI ':standard'; use Net::Telnet::Cisco;
### set the error fields to nulls
$selerror = "";
### Input from the screen - make sure data was input
if (param() and param('Switches') ne "" and
(param('Mac') ne "" or param('Interface Description') ne "" or param('VLAN') ne "" )) {
### Put the input devices into an array.
@devices = param('Switches');
### format the header data
print header();
print start_html(-title=>"ShowSwitches",-BGCOLOR=>'aqua');
print "\n",h1("<CENTER>Show Switches</CENTER>");
print "\n",hr(),"\n";
### Go thru the device array.
foreach(@devices) {
$error_msg = "";
$TAC_login_error = "";
$open_error = "";
$retry_open_error = "";
$prompt_error = "";
$password_error = "";
### Take input host and use to send to Telnet
$host = $_;
$session = Net::Telnet::Cisco->new(Errmode => 'return',
Timeout => 30);
### Connect to the host
$session->open(Host =>"$host", Timeout => 15);
$open_error = $session->errmsg;
### Login with TACACS if host can be connected to
if ($open_error eq "") {
$session->login('USER', 'PASS');
$TAC_login_error = $session->errmsg;
### Login with TACACS failed - try standard login
if ($TAC_login_error ne "") {
### Connect to host
$session->open(Host =>"$host", Timeout => 15);
$retry_open_error = $session->errmsg;
### Wait for password prompt - multiple matches - devices may have different device prompts.
if ($retry_open_error eq "") {
$session->waitfor(Match => '/Password:.*$/',
Match => '/Enter password:.*$/',
Timeout => 20);
$prompt_error = $session->errmsg;
if ($prompt_error eq "") {
### Input password
$session->print('getmeout');
$password_error = $session->errmsg;
$session->waitfor('/.*>$/');
$password_error = $session->errmsg;
}
}
}
}
### No errors, then issue "show commands".
if ($open_error eq "" and ($TAC_login_error eq "" or $retry_open_error eq "")
and $prompt_error eq "" and $password_error eq "")
{
### Show Mac
if (param('Mac')) {
$cmd = 'sh mac';
@output = $session->cmd("$cmd");
$show_error = "";
$show_error = $session->errmsg;
print "\n",h2($host . ' - ' . $cmd);
if ($show_error ne "") {
$error_msg = 'Error for show mac - ' . $show_error;
print b($error_msg),(br);
print hr(),"\n";
$error_msg = '';
}
else {
print pre(@output);
print hr(),"\n";
}
}
### Show Interface Description
if (param('Interface Description')) {
$cmd = 'sh interface description';
@output = $session->cmd("$cmd");
$show_error = "";
$show_error = $session->errmsg;
print "\n",h2($host . ' - ' . $cmd);
if ($show_error ne "") {
$error_msg = 'Error for show mac - ' . $show_error;
print b($error_msg),(br);
print hr(),"\n";
$error_msg = '';
}
else {
print pre(@output);
print hr(),"\n";
}
}
### Show VLAN
if (param('VLAN')) {
$cmd = 'sh vlan';
@output = $session->cmd("$cmd");
$show_error = "";
$show_error = $session->errmsg;
print "\n",h2($host . ' - ' . $cmd);
if ($show_error ne "") {
$error_msg = 'Error for show vlan - ' . $show_error;
print b($error_msg),(br);
print hr(),"\n";
$error_msg = '';
}
else {
print pre(@output);
print hr(),"\n";
}
}
}
elsif ($TAC_login_error ne "" and $password_error ne "") {
$error_msg = "Error - $host " . $TAC_login_error . ' - possible incorrect TACACS or standard password parameters on device.';
}
elsif ($open_error ne "") {
$error_msg = "Error - $host " . $open_error . ' - cannot connect to host - is it down??';
}
elsif ($prompt_error ne "") {
$error_msg = "Error - $host " . $prompt_error . ' - password prompt not recognized - invalid TACACS (or user) password.';
}
elsif ($password_error ne "") {
$error_msg = "Error - $host " . $password_error . ' - possible incorrect user/password parameters on device.';
}
if ($error_msg ne "" ) {
print b($error_msg),(br);
print hr(),"\n";
}
print hr(),"\n";
print end_html(),"\n";
} } else {
### No Show command was selected.
if (param('Submit') and param('Mac') eq "" and param('Interface Description') eq "" and param('VLAN') eq "" ) { $selerror = 'No Show Displays were selected. Try again please!!'; } elsif
### No switch was selected.
(param('Submit') and param('Switches') eq "") {
$selerror = 'No devices were selected. Try again please!!';
}
### This formats the initial Show Web page.
print header(-Pragma=>'no-cache'),
start_html(-title=>"Show Displays",-BGCOLOR=>'aqua'),
h1("<CENTER>Show Switches</CENTER>"),hr(),
start_form(),
b("Select Show Commands:"),
br(),
br(),
checkbox(-name=>'Mac'),
checkbox(-name=>'Interface Description'),
checkbox(-name=>'VLAN'),
br(),br(),hr(),br(),
b("Select One or More Devices:"),
br(),
br(),
scrolling_list (-name => 'Switches',
-default=> "NONE",
-values => ['cs6a', 'cs7a', 'cs7b',
'cs8b', 'cs9a', 'c9b', 'csa'
],
-multiple => 'true',
-size => 7,
),
p(submit('Submit'),reset('Reset')),
b($selerror),
end_form(),hr(),
end_html();
}
#
© Stack Overflow or respective owner