Utilizarea de scripturi Windows pt

automatizarea accesului cu TELNET

(Partea a 2-a)


Administrarea simpla si eficienta

a echipamentelor IT

folosind Scripturi Windows

 

 

 

Sorin P.

feb-2014

Grad de dificultate mare

Public tinta: specialisti IT


 


  Intro (partea a 2-a)


 

In activitatea de specialist IT sint dese situatiile in care trebuie accesate la distanta tot felul de echipamente prin reteaua de date. Fie ca vorbim despre configurarea unei noi interfete a unui router, de adaugare a unui flux ISDN nou pe un voice-gateway aflat deja in uz sau de citirea zilnica a fisierelor log ale unor servere Unix, accesarea la distanta prin TELNET sau SSH reprezinta o activitate recurenta cotidiana.

 

In prima parte v-am prezentat un script windows (atelnet.wsf) care lanseaza o fereastra command-prompt in care initiaza o sesiune telnet pe un echipament a carui adresa este specificata ca parametru la lansarea scripului.

 

In aceasta a 2-a parte a articolului va prezint un al doilea script (atelnet_launcher.wsf) care lucreaza in tandem cu primul. Acesta va prelua o serie de adrese IP dintr-un fisier text ini separat si va invoca scriptul atelnet.wsf pt fiecare adresa in parte. Obtinem astfel o executie succesiva a mai multor sesiuni telnet independente., iar fiecare va stoca rezultatul lansarii in cite un fisier log propriu. In acest fel, utilizatorul scuteste timp si nervi, nemaifiind nevoit sa execute manual aceste activitati “plictisitoare”.

 

Fisierele log rezultate pot fi analizate ulterior (manual sau automatizat) in vederea analizarii datelor si/sau a sistematizarii acestora.

 


  Un (alt) script util


 

In prima parte v-am prezentat un script windows (atelnet.wsf) care lanseaza o fereastra command-prompt in care initiaza o sesiune telnet pe un echipament a carui adresa (IP sau un nume DNS rezolvabil de catre computerul gazda) este specificata ca parametru la lansarea scripului.

 

In aceasta a 2-a parte a articolului va prezint un al doilea script (atelnet_launcher.wsf) care lucreaza in tandem cu primul. Acesta va prelua o serie de adrese IP dintr-un fisier text (atelnet_launcher_address_list.ini) si va invoca scriptul atelnet.wsf pt fiecare adresa in parte. Obtinem astfel o executie succesiva a mai multor sesiuni telnet independente (recomand sa nu depasiti un nr de 10-15 per sarja) ce va stoca rezultatul lansarii in cite un fisier log propriu. In acest fel, administratorul scuteste timp si nervi, evitind rutina executarii unor activitati “plictisitoare”, putind intre timp sa ia o pauza de cafea/tigara ;) SAU sa se ocupe de alte sarcini :))

 

Fisierele log rezultate pot fi analizate ulterior (manual sau automatizat) in vederea analizarii datelor si/sau a sistematizarii acestora.

 

 

In partea a treia a acestui articol va voi prezenta un script macro (utilizabil in fisiere EXCEL), care extrage de o maniera automatizata din fisierele log create cu ajutorul script-ului atelnet_launcher.wsf niste date utile. In acest exemplu m-au interesat serial-number-ele echipamentelor si a surselor de alimentare.

 

 


  Script-ul atelnet_launcher.wsf



Pt a intelege ceea ce face acest script, reiau tema:

  • avem un script atelnet.wsf care lanseaza o sesiune de telnet intr-un MS Dos-Box in mediul Win7
  • echipamentul tinta este specificat ca si parametru: atelnet.wsf adr_ip
  • script-ul salveaza rezultatul sesiunii de telnet intr-un fisier avind numele adr_ip_log.log
  • dorim sa automatizam lansarea scriptului atelnet.wsf preluind adresele IP tinta dintr-un fisier atelnet_launcher_address_list.ini

Pt a ne atinge scopul, vom folosi script-ul atelnet_launcher.wsf, ce poate fi gasit in caseta de mai jos. Am evidentiat in albastru comentariile principale si in maron numele fisierului ini.


 



<job>

<script language="VBScript">


Option Explicit

Dim WshShell

Dim wait_time_1

wait_time_1=100

Dim linie_cda

Dim input_line, ini_line


' --- opening IP list file ----------------------

Dim objFSO, objFile

Set objFSO = CreateObject("Scripting.FileSystemObject")

Set objFile = objFSO.OpenTextFile("auto_telnet_cisco_ip.ini", ForReading)

Const ForReading = 1

 

' --- reading IP list from file -----------------

Dim arrFileLines()

Dim i

i = 0

Do Until objFile.AtEndOfStream

Redim Preserve arrFileLines(i)

arrFileLines(i) = objFile.ReadLine

i = i + 1

Loop

objFile.Close

MsgBox i & " IP addresses found" ,, "auto_telnet_launcher"

set WshShell=CreateObject("WScript.Shell")

 

' --- use IP addresses one by one---------------

For Each ini_line in arrFileLines

linie_cda = "atelnet.wsf " & ini_line

' WScript.Echo linie_cda

WshShell.run linie_cda,,true

WScript.Sleep wait_time_1

Next


'Step 3a - Exit Command Window

msgbox "TestBox: End" ,, "auto_telnet_launcher"

WScript.Quit


</script>

</job>


 




  Utilizarea script-ului atelnet_launcher.wsf



Pt a-l utiliza, copiati tot textul script-ului din celula gri de mai sus si salvati-l intr-un fisier text caruia ii dati numele atelnet.wsf .


OBSERVATII SI LIMITE


1. In cazul in care fisierul atelnet_launcher_address_list.ini nu exista in directorul curent, va apare la executie o fereastra de eroare:



2. (In cazul in care numele fisierului ini nu este exact cu cel mentionat (in maron), veti obtine aceeasi eroare)

 

3. Chiar daca schimbati numele script-ului atelnet_launcher.wsf, acesta va cauta tot fisierul atelnet_launcher_address_list.ini (cf declaratiei din linia 14, in maron);

 

4. Daca doriti sa folositi script-ul pt mai multe fisiere ini diferite (pt a accesa mai multe seturi diferite de echipamente, de ex.), va trebui:

       a. sa creati cite un director separat pt fiecare sesiune in parte (varianta pe care v-o recomand)

       SAU

       b. sa modificati:

               i. numele script-ului atelnet_launcher.wsf (ex atelnet_server_mail.wsf)

               ii. numele fisierului ini atelnet_launcher_address_list.ini (ex telnet_server_1.ini)        

               iii. in linia 12 a script-ului atelnet_launcher.wsf numele fisierului ini corespunzator                        (cf ii.)

 

5. Aveti grija ca in fisierul atelnet_launcher_address_list.ini:

       a. sa nu aveti intercalate rinduri goale

       b. dupa ultima linie ce contine adrese IP tinta sa aveti cel mult un singur rind gol,                      deoarece pt fiecare rind gol veti primi de la script-ul atelnet.wsf urmatorul mesaj                      de avertizare:

 

 

6. evitati sa aveti in fisierul ini adrese IP invalide sau inaccesibile sau care apartin unor echipamente care refuza accesul telnet la momentul rularii script-ului, deoarece pot apare rezutate imprevizibile

 

 

CUM SA EVITATI REZULTATELE IMPREVIZIBILE

 

Pt a evita aparitia rezultatelor imprevizibile, cel mai sigur este sa lansati script-ul atelnet_launcher.wsf dintr-un prompt DOS.

 

Astfel, in cazul in care dintr-un motiv sau altul sesiunea de telnet se inchide inainte ca scriptul atelnet.wsf sa trimita in ea toate comenzile ENTER, acestea vor ramine fara un efect notabil in DOS-Prompt. Daca aceste comenzi s-ar duce intr-o fereastra de explorer (cum se poate intimpla daca lansati atelnet_launcher cu un click de mouse), comenzile ENTER vor relansa script-ul, intrind astfel intr-o bucla fara sfirsit. Pt a iesi dintr-o astfel de bucla, profitati de ragazul oferit de mesajele de informare ale script-urilor si lansati o fereastra de “notepad” sau un alt editor de texte care va capta comenzile ENTER trimise de script in locul explorer-ului.

 



Microsoft Windows [Version 6.1.7601]

Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

 

C:\Windows\system32>cd c:\temp\locatia_1

 

 

C:\temp\locatia_1> atelnet_launcher

 

OR

 

C:\temp\locatia_1> atelnet_launcher.wsf

 

 





 

In cazul in care se intimpla sa vreti sa testati script-urile mele si nu aveti la indemina un echipament care sa accepte conexiuni telnet, va ofer mai jos o adresa a unui site ce accepta o astfel de sesiune, pe care am descoperit-o recent, pe cind pregateam aceasta a doua parte a articolului.

 

 


  Un telnet-server public, accesibil pe internet si o varianta pt script-ul nr 1


 

Pt a face acest articol usor de citit si de verificat acasa, va prezint in cele ce urmeaza un script foarte asemanator (identic din punct de vedere functional cu cel publicat in prima parte), care lanseaza o sesiune de telnet pe serverul public telehack.com. Nu va lasati speriati de numele telehack, este un server foarte serios dpv tehnic, si amuzant in acelasi timp. Pt accesarea acestuia nu e nevoie de specificarea unui username + password, de aceea cele doua linii ce contin atribuirea valorii (string_2 respectiv string_1) sint marcate ca si “comentariu” (cu un ‘ apostrof) in vederea dezactivarii executiei lor.

 

 


  Comenzile folosite in script-ul atelnet.wsf pt accesarea telnet-server-ului     telehack.com


 

 

In DOS-BOX-ul de mai sus am evidentiat comenzile date manual in albastru. Mai jos gasiti script-ul care va introduce informatia in albastru pt noi.



 


  Script-ul atelnet_thk.wsf


 

Va invit sa gasiti script-ul in tabelul de mai jos, caruia i-am adaugat si o coloana de comentarii.




<job>

<script language="VBScript">

Option Explicit

On Error Resume Next

' ACCES TELEHACK.COM ***********************************

Dim WshShell

Dim wait_time_1

wait_time_1=200

Dim string_1, string_2

string_1="password"

string_2="username"


set WshShell=CreateObject("WScript.Shell")


'msgbox Wscript.Arguments.Count

Dim argg

argg=Wscript.Arguments(0)

Dim adr_ip

adr_ip=argg


'verify if an IP address has been given

if adr_ip = "" then

msgbox "WARNING: No IP address specified." & vbCRLF & " Script stopped.",,"auto_telnet_logged - by SoP"

WScript.quit

end if


Dim linie_cda

'Send commands to the window as needed


'Step 1 - Telnet to remote IP'

linie_cda = "telnet -f atelnet_" & argg & ".log " & adr_ip


WshShell.run "cmd.exe"

WScript.Sleep wait_time_1


WshShell.SendKeys linie_cda

WshShell.SendKeys ("{Enter}")

WScript.Sleep wait_time_1


'Step 2 - Issue Commands with pauses

''WshShell.SendKeys string_2

WScript.Sleep wait_time_1

WshShell.SendKeys ("{Enter}")

''WshShell.SendKeys string_1

WshShell.SendKeys ("{Enter}")

WScript.Sleep wait_time_1


'Step 2a - Enter desired commands

WshShell.SendKeys ("{Enter}")

WScript.Sleep wait_time_1


' call for area codes on telehack.com

WshShell.SendKeys "help ac"

WshShell.SendKeys ("{Enter}")

WScript.Sleep wait_time_1


WshShell.SendKeys "ac 202"

WshShell.SendKeys ("{Enter}")

WScript.Sleep wait_time_1


WshShell.SendKeys "ac 212"

WshShell.SendKeys ("{Enter}")

WScript.Sleep wait_time_1


WshShell.SendKeys "ac 916"

WshShell.SendKeys ("{Enter}")

WScript.Sleep wait_time_1


' call for DNS hosts on telehack.com

WshShell.SendKeys "hosts /search=hewlett"

WshShell.SendKeys ("{Enter}")

WScript.Sleep wait_time_1

' send 3 spaces (for displaying larger screen responses)

WshShell.SendKeys (" ")

WScript.Sleep wait_time_1

WshShell.SendKeys (" ")

WScript.Sleep wait_time_1

WshShell.SendKeys (" ")

WScript.Sleep wait_time_1


' call for 3 random jokes

WshShell.SendKeys "joke"

WshShell.SendKeys ("{Enter}")

WScript.Sleep wait_time_1

WshShell.SendKeys "joke"

WshShell.SendKeys ("{Enter}")

WScript.Sleep wait_time_1

WshShell.SendKeys "joke"

WshShell.SendKeys ("{Enter}")

WScript.Sleep wait_time_1


' call for date

WshShell.SendKeys "date"

WshShell.SendKeys ("{Enter}")

WScript.Sleep wait_time_1


' call for showing ip address of this computer as seen by telehack.com

WshShell.SendKeys "ipaddr"

WshShell.SendKeys ("{Enter}")

WScript.Sleep wait_time_1


'Step 3 - Exit Telnet

WshShell.SendKeys "exit"

WshShell.SendKeys ("{Enter}")

' tweak multiplier blow: 2 for LAN, 3 for fast-WAN, 10 for slow-WAN

WScript.Sleep 3*wait_time_1

WshShell.SendKeys ("{Enter}")


'Step 3a - Exit Command Window

WshShell.SendKeys ("exit")

WshShell.SendKeys ("{Enter}")

WScript.Sleep wait_time_1


WScript.Quit


</script>

</job>


 


Pt a-l utiliza, este suficient sa copiati doar textul din coloana din stinga si sa-l introduceti intr-un fisier text caruia va trebui sa-i dati extensia wsf.



Continuare in  partea a treia

 

In partea a treia a acestui articol va voi prezenta un script macro (pt fisiere EXCEL), care extrage, de o maniera automatizata, din fisierele log create cu ajutorul script-ului atelnet_launcher.wsf niste date utile. In acest exemplu m-au interesat sn-urile (serial-number) echipamentelor interogate si ale surselor de alimentare.




In cazul in care informatiile postate pe site-ul meu vi s-au parut interesante, va astept sa reveniti.

 

 

Salveaza bookmark

 

comenteaza pe blog

 

 

 

vizitatori.

Site alternativ: sorin-p.xhost.ro

Home  Eu  Muzica mea  Stil de viata  Copyright  Revista