# New Ticket Created by Doug Harper # Please include the string: [perl #36533] # in the subject line of all future correspondence about this issue. # <URL: https://rt.perl.org/rt3/Ticket/Display.html?id=36533 >
When I telnet into one of our switches and execute above a certain number of commands, I get that it thinks I got an EOF. See example below and I have attached the script and sample output. while (<CMDLIST>) { printf "----------- [%3d/%-3d] ------------\n", ++$count, $total; print; select(undef, undef, undef, $DELAY); @CLIOUT = $t->cmd("$_"); print @CLIOUT, "\n"; } $t->close; With $DELAY set to anything less than 4 ms, I would get: ==> pattern match read eof at baseline.pl1 line 66 <<cmd.lst>> <<sample.txt>> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ With Errmode => return +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ $ sample lab500 mootman Processing... ------------------- [ 1/13 ] ---------------- moreoff lab500# ------------------- [ 2/13 ] ---------------- get node.147.0 1.3.6.1.4.1.277.1.3.147.0 = 2 (Integer) lab500# ------------------- [ 3/13 ] ---------------- get node.147.0 1.3.6.1.4.1.277.1.3.147.0 = 2 (Integer) lab500# ------------------- [ 4/13 ] ---------------- get node.147.0 1.3.6.1.4.1.277.1.3.147.0 = 2 (Integer) lab500# ------------------- [ 5/13 ] ---------------- get node.147.0 1.3.6.1.4.1.277.1.3.147.0 = 2 (Integer) lab500# ------------------- [ 6/13 ] ---------------- get node.147.0 1.3.6.1.4.1.277.1.3.147.0 = 2 (Integer) lab500# ------------------- [ 7/13 ] ---------------- get node.147.0 1.3.6.1.4.1.277.1.3.147.0 = 2 (Integer) lab500# ------------------- [ 8/13 ] ---------------- get node.147.0 1.3.6.1.4.1.277.1.3.147.0 = 2 (Integer) lab500# ------------------- [ 9/13 ] ---------------- get node.147.0 nok...Bad file number ------------------- [ 10/13 ] ---------------- get node.147.0 nok...Bad file number ------------------- [ 11/13 ] ---------------- get node.147.0 nok...Bad file number ------------------- [ 12/13 ] ---------------- get node.147.0 nok...Bad file number ------------------- [ 13/13 ] ---------------- moreon nok...Bad file number * * * T H E E N D * * * $ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ With Errmode => die +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ $ sample lab500 mootman Processing... ------------------- [ 1/13 ] ---------------- moreoff lab500# ------------------- [ 2/13 ] ---------------- get node.147.0 1.3.6.1.4.1.277.1.3.147.0 = 2 (Integer) lab500# ------------------- [ 3/13 ] ---------------- get node.147.0 1.3.6.1.4.1.277.1.3.147.0 = 2 (Integer) lab500# ------------------- [ 4/13 ] ---------------- get node.147.0 1.3.6.1.4.1.277.1.3.147.0 = 2 (Integer) lab500# ------------------- [ 5/13 ] ---------------- get node.147.0 1.3.6.1.4.1.277.1.3.147.0 = 2 (Integer) lab500# ------------------- [ 6/13 ] ---------------- get node.147.0 1.3.6.1.4.1.277.1.3.147.0 = 2 (Integer) lab500# ------------------- [ 7/13 ] ---------------- get node.147.0 1.3.6.1.4.1.277.1.3.147.0 = 2 (Integer) lab500# ------------------- [ 8/13 ] ---------------- get node.147.0 1.3.6.1.4.1.277.1.3.147.0 = 2 (Integer) lab500# ------------------- [ 9/13 ] ---------------- get node.147.0 pattern match read eof at sample line 49 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
cmd.lst
Description: Binary data
#!/usr/bin/perl #------------------------------------------------------------------- # Script: sample #------------------------------------------------------------------- use strict; my ($SW, $login, $passwd, $switch, $debugpw, $cmdlst, $DELAY, $total); #------------------------------------------------------------------- # Customizable Variables... #------------------------------------------------------------------- $login = "timing"; $passwd = "public"; $cmdlst="cmd.lst"; $DELAY=0.01; #------------------------------------------------------------------- ($switch, $debugpw) = @ARGV; use Net::Telnet (); $SW = new Net::Telnet (Timeout => 3, Input_log => 'baseline.out', Dump_log => 'baseline.dumplog', Errmode => 'return'); if (!($#ARGV == 1)) { print "\nUSAGE: sample <switch> <debug-password>\n"; exit 9; } open(CMDLIST, $cmdlst) || die "Can't open $cmdlst...\n\n"; print "Processing...\n\n"; $total += `wc -l $cmdlst`; #------------------------------------------------------------------- # Establish telnet connection to switch and login... #------------------------------------------------------------------- $SW->open($switch); $SW->login($login, $passwd) || die "Unable to login...\n"; $SW->print("ena debug\n"); $SW->waitfor('/password: $/') || die "No password prompt: \n"; $SW->cmd(String => "$debugpw", Timeout => 3) || die "Debug password failure...\n"; #------------------------------------------------------------------- # Send CLI command from cmd.lst to the switch... #------------------------------------------------------------------- while (<CMDLIST>) { my (@CLIOUT, $count); printf "------------------- [%3d/%-3d] ----------------\n", ++$count, $total; print; #echo CLI command select(undef, undef, undef, $DELAY); #Insert time delay if (@CLIOUT = $SW->cmd("$_")) { print @CLIOUT, "\n"; } else { print "nok...$! \n"; } } $SW->close; print "\n * * * T H E E N D * * *\n"; exit;