Script for Telnetting with PERL and Python

75 logo Script for Telnetting with PERL and PythonLets just say that PERL made me a crazy programmer. Then came Python, it made me an insane one. In my previous job, it was all PERL, PERL and PERL. But this current job has made me pick up Python.

Python was picked up because the STAF/STAX automation work required scripts and Python was the candidate. So one fine day i found myself writing this -

python logo Script for Telnetting with PERL and Python#!/usr/bin/python
print "Hello world"

instead of this -

#!/usr/bin/perl
print "Hello World";

Then i actually looked back and thought, what was the first real purpose for which i wrote a PERL script – telnetting. Even today i find that telnetting to workstations to retrieve stats, is one thing that i do a zillions times day. The usual telnet script with PERL/Python has to be used along with the Expect module. That guarantees that the session time-outs and failure scenarios are properly taken care of.

But there is one place where you can just avoid Expect module all together. Its when you use the script within the same network and you are 70% sure that the pain-in-the-butt scenario rarely happens. So here it is a minimal telnet script that i have made in both PERL and Python.

PERL

#!/usr/bin/perl
use Telnet;
$host = "192.168.1.100";
$port = "2300";
$uid = "jerry";
$pwd = "password";
open $inputLog,  ">in.log";
$box = new Net::Telnet();
$box->open(     Host => $host,
                Port => $port,
        );
$iLog = $box->input_log($inputLog);
$flag = $box->login(    Name => $uid,
                        Password => $pwd,
                );
$box->print("show log");
$box->waitfor('/# $/i');
$box->close;
exit

PYTHON

#!/usr/bin/python
import os, telnetlib
HOST = "192.168.1.100"
PORT = "2300"
user = "jerry"
password = "password"
f = open(sLog, "in.log")
tn = telnetlib.Telnet(HOST, PORT)
tn.read_until("login: ")
tn.write(uid + "\n")
tn.read_until("Password: ")
tn.write(pwd + "\n")
tn.read_until("]#")
tn.write("show log\n")
f.write(tn.read_until("]#"))
f.close()
tn.write("exit\n")
tn.read_until("#")
tn.close()

Happy scripting. icon smile Script for Telnetting with PERL and Python

Mailing and Telneting with PERL

There are many tutorials on the net on how to use the Net::Telnet module to write a script that will automate a telnet session. Perhaps the best place is the CPAN site itself. Though all i needed was a simple script that did the job, i had to scour through many other sites for reference. Finally i’m done with the script that will telnet to the server collect the logs and then mail it to the id that i specified.

I wrote the working version as two perl scripts. I still dont know why i did that, may be for the simplicity sake.

  • log.pl  => does the telnet to retrieve the logs and mail it to me
  • run.pl => which runs the log.pl every hour

So here is the code -

log.pl

#!/usr/bin/perl
use Telnet;
# ---------------------------
$date = `date`;
chop $date;
$mailId = "jerry\@jerrymannel.com";
$cmd = "cat in.log | mail ".$mailId." -s \"Logs - ".$date."\"  ";
# ---------------------------
$host = "192.168.1.100";
$port = "2300";
$uid = "jerry";
$pwd = "password";
open $inputLog,  ">in.log";
$box = new Net::Telnet();
$box->open(     Host => $host,
                Port => $port,
        );
$iLog = $box->input_log($inputLog);
$flag = $box->login(    Name => $uid,
                        Password => $pwd,
                );
$box->print("co");
$box->waitfor('/# $/i');
$box->print("show load;show cpu");
$box->waitfor('/# $/i');
$box->print("show log");
$box->waitfor('/# $/i');
$box->close;
# MAIL section
system $cmd;
exit

run.pl

#!/usr/bin/perl
while (1)
{
        $date = `date +%M%S`;
        chop $date;
        #print $date." - ";
        if ( $date eq "0000" )
        {
                print "Sending the mail @ - ".(`date`);
                system("./logs.pl");
        }
        sleep(1);
}

The script was run on a Linux machine. So i neednt worry about the ‘date’ command and getting the date printed out in a fashion that i needed.

icon smile Mailing and Telneting with PERL Drop in a line of you have more queries on the script. Always happy to help.

Telnet Scripting Tool a.k.a TST10.exe

I have been thinking for a long time that i need to write about this tool that i found. Its quite interesting that this tool is really helpful in automating many of the routine sessions that i as a tester came across. This is by far the best automation tool that i found for telnet sessions.

Imagine these scenarios :

  • You need to do BSO authentications frequently when you switch networks
  • Get intermittent logs from the server for analysis
  • Run automated tests on remote systems (something which i have started to call as run-and-forget)
  • stuck in traffic…no way

Lets get into what this tool is and how to use it.

The tool is for windows (one of the things that i felt bad). To make use of this tool, u will need the exe file, i.e., tst10.exe and an input commands file. The input file will has the first line as the hostname/IP and port, which is followed by alternating SEND and WAIT commands.

Consider this example. I need to connect to a server of IP – 192.168.1.100, where a telnet service is running at PORT – 2300. This is how my script/input file will look like :

192.168.1.100 2300
SEND "\m"
WAIT "login:"
SEND "admin\m"
WAIT "Password:"
SEND "admin1\m"
WAIT "s1#"
SEND "co\m"
WAIT "s1(config)#"
SEND "show load; show cpu\m"
WAIT "s1(config)#"

“\m” = \n in C/PERL/Java/most programming langunages = CR or in non-techie terms “Enter”. SEND, sends the commands to be executed and the WAIT that follows tried to match the string in the output of the SEND commands before it.

How to run it?. There are 2 ways to do it. You can open up the command prompt navigate to the directory where the files are and then issue this command -

tst10.exe /r:IN /o:OUT

where IN is the input file and OUT stores the complete output of the session, so that you can skim through the file and have a look at what happened. OR, put the command in a batch file and double click it every time you need to run it.

Here is the screen capture -

tst10 Telnet Scripting Tool a.k.a TST10.exe

TST10 Screen Capture

How is it different from Net::Telnet module of Perl or something similar in TCL or Python? Think about it.

  • Time to write the code – 30min to ? depending upon how complex the situation is
  • Trying to match the output to with REGEX, which means that you need to spend time in coming up with the right regex. Now you have 2 problems in hand
  • Testing time to make sure that the script is robust enough

So this is perfect! NO. This doesn’t work for ssh sessions. Since telnet is getting substituted by ssh in most of the servers due to the secure nature of the connection its kind of difficult to fit it in a normal installation of Linux. I’m not sure about the telnet-ssh thingie happening in Solaris or any of the other servers.

Is there something like this for Linux? icon sad Telnet Scripting Tool a.k.a TST10.exe No. Hey, but look at it this way. Its some relief for us on windows platform for scripting.

You can build complex automatons with this combined with a little bit of Perl and Outlook. Here is one typical scenario that i made and which i have presented as a white-paper.

  • Outlook has a setting that detects for incoming mails with a specific subject line.
  • When the mail comes it evokes a Perl script.
  • The Perl script will go ahead an call the TST’s batch file, which initiates the TST10 session, connects to the remote server starts/runs the automation. The output will be stored in OUT file
  • The Perl script will skim the OUT file for any errors reported during the run.
  • Then it calls an FTP script that will go ahead and get the log files from the remote system
  • The log files are read, the results extracted and neatly formatted into mail and send to the required email-ids

icon smile Telnet Scripting Tool a.k.a TST10.exe sounds complex, but this script gave me enough time to hut for a new job and quit the previous employer.

Who wrote this? Someone by the name of Albert Yale. His home page is – http://ay.home.ml.org/, sadly the site is no longer online.

What happened to the white-paper? It got rejected icon wink Telnet Scripting Tool a.k.a TST10.exe , humor was not the order of the day.

Download TST10 : tst10.exe | tst10.zip