my $router = new Net::Telnet::Cisco(Host => $ip);
my @output = $router->cmd("sh users");
print @output;
####
$router->cmd("terminal length 0");
####
$router->cmd("terminal length 0");
$router->cmd("terminal length 0");
my @output = $router->cmd("sh users");
print @output;
####
foreach my $server (@SERVERS) {
my ($sname,$sdom);
if($server =~ /^([^.]+)(.+)/) {
$sname = $1;
$sdom = $2;
$sdom =~ s/\./\\\./g;
}
print "\n\n---> Trying $server .... ";
socket(ROUTER,AF_INET,SOCK_STREAM,getprotobyname('tcp'));
my $sin = sockaddr_in(23,inet_aton($server));
connect(ROUTER,$sin); # or die "$server needs a kick!\n";
print "Connected.\n";
bind(ROUTER,$sin);
# below insight provided by Net::Telnet.pm
select((select(ROUTER), $|=1)[$[]); #don't buffer writes
# end insight.
send(ROUTER, "\n", ''); #doing to get a prompt, establish connection
my $task= scalar @CMDS;
my $line="";
my $get_output=0;
my $i=0;
my %OUT=();
while(recv(ROUTER,$line,$LENGTH,'')) {
local $_ = lc($line);
if(/^$sname($sdom)?\>/) { #we have a prompt
if(!$task) { #we're done!
send(ROUTER, $close, '');
last;
}
else {
send(ROUTER, $CMDS[$i], '');
$i++;
$task--;
$get_output=1;
next;
}
}
elsif($get_output) { #we're between two prompts and interested in the output
push @{ $OUT{$CMDS[$i-1]} }, $line;
print $line;
}
}
close ROUTER;
}