Telnet connectivity query

Hi All,
I want to check telnet connectivity for a series of 50 IPs.
I tried to automate the tasks using a script like the following:
a=`echo pwd | telnet IP1`
a=`echo pwd | telnet IP2`
a=`echo pwd | telnet IP3`
...
...
a=`echo pwd | telnet IP50`

When I run the above script, it usually returns the chracaters "Connection closed by foreign host" for each IP.
Sometimes it returns different messages like "Connection refused", "No route to Host" etc.

But the problem occurs when the telnet fails altogether for a IP. If the telnet fails for a particular IP, the script waits for 3 minutes and returns the characters "telnet failed" and then the script is terminated.
Is there any way I can make the script return the character "telnet failed" within, say 3 seconds, for every IP it fails to connect to.
In other words, if I just run the command "telnet IP" on UNIX prompt and the telnet fails then I should get back "telnet failed" message within 3 seconds instead of 3 mins.
subratocAsked:
Who is Participating?
 
lanboyoConnect With a Mentor Commented:
When the telnet is failing completely, it is often due to talking to a firewalled IP that does not return a port rejected icmp message or that icmp message is swallowed somewhere along the ling.

Variable assignment will not allow the script to proceed until it is complete.

To add a layer of complexity you can rewrite the script in the scripting language expect. Fairly easy to learn for automating usually interactive processes.

The script would then be something like:


set timeout 3
spawn telnet $IP
expect  -timeout {do this ; close ; wait ; exit 0} "*Password:" { do this ; send "$PASSWORD\r"}


... And so on.


You might be able to simply do this with temp files....


echo password  | telnet 192.168.1.3 >  /tmp/tmp.$$ 2>&1 &
sleep 1
A=`cat /tmp/tmp.$$`
if  ps -p $! 1> /dev/null 2>&1 ; then
   sleep 2
   A=`cat /tmp/tmp.$$ `
   kill $!  1> /dev/null 2>&1
fi
echo password | telnet 192.168.1.5 > /tmp/tmp.$$ 2>&1  &
sleep 1
B=`cat /tmp/tmp.$$`
if  ps -p $! 1> /dev/null 2>&1 ; then
   sleep 2
   B=`cat /tmp/tmp.$$`
   kill $!  1> /dev/null 2>&1
fi
#kill -9 $! 1> /dev/null 2&1
echo cisco | telnet www.google.com > /tmp/tmp.$$  2>&1  &
sleep 1
C=`cat /tmp/tmp.$$`
if  ps -p $! 1> /dev/null 2>&1 ; then
   sleep 2
   C=`cat /tmp/tmp.$$`
   kill $!  1> /dev/null 2>&1
fi
rm /tmp/tmp.$$  1> /dev/null  2>&1
echo "BEGIN A====>$A<===END A"
echo =========================================
echo "BEGIN B====>$B<===END B"
echo =========================================
echo "BEGIN C====>$C<===END C"



With these results...

BEGIN A====>Trying 192.168.1.3...
Connected to 192.168.1.3.
Escape character is '^]'.
Connection closed by foreign host.<===END A
=========================================
BEGIN B====>telnet: Unable to connect to remote host: Connection refused
Trying 192.168.1.5...<===END B
=========================================
BEGIN C====><===END C


0
 
lanboyoCommented:
expect is preferable, as it would allow you to check for good and bad passwords.
0
 
subratocAuthor Commented:
Thanks, lanboyo. It worked perfectly!
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.