Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kako napisati skriptu za telnet?

[es] :: Skript jezici :: Kako napisati skriptu za telnet?

[ Pregleda: 3291 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

ivbrcic
Ivan Brcic
Siemens
Zagreb

Član broj: 38567
Poruke: 35
*.siemens.at.



Profil

icon Kako napisati skriptu za telnet?08.02.2006. u 12:04 - pre 221 meseci
Problem je slijedeći:

Trebam napisati skriptu za telnet.

Za sada sam otkrio da to "mora" biti skripta za Expect.

Pomoću Autoexpect-a sam uspio kreirati jednu takvu skriptu i uspješno sam je izvršio. Problem je u tome što tako kreirana skripta koristi expect naredbu kojom ocekuje odgovor u takvom obliku. To mi se bas ne sviđa jer nije sigurno da cu uvijek dobivati isti odgovor. Pa sam zbog toga u skripti uklonio sve expect naredbe. Nakon toga sam pokušao izvršiti skriptu, ali su se samo dvije komande izvršile (dva send-a).

Probao sam koristiti veci sleep između naredbi, ali nista, uvijek uspješno pošalje samo dvije komande, a zatim zablokira.

Svaka pomoć je dobrodošla.

Ovdje je procedura za koju želim da se izvršava preko poziva skripte:

1. telnet 192.168.3.12 3000
2. hwm-init act
3. dsp-startup 34 34
4. dsp-mem-wr 34 0x3f000 1 0x800000f1
5. dsp-mem-wr 34 0x3f000 1 0x800000f2
6. dsp-mem-wr 34 0xbfe00 1 0
7. dsp-mem-wr 34 0xbfe04 1 0xc00322c1
8. dsp-mem-wr 34 0xbfe08 1 0xc400
9. dsp-mem-wr 34 0xbfe0c 1 0x3ef
10. dsp-mem-wr 34 0xbfe00 1 1

to zelim da mi se izvrsava preko skripte.

A evo i izgenerirane skripte koja radi:

Code:

#!/usr/bin/expect -f

set force_conservative 1  ;# set to 1 to force conservative mode even if
              ;# script wasn't run conservatively originally
if {$force_conservative} {
    set send_slow {1 .1}
    proc send {ignore arg} {
        sleep .1
        exp_send -s -- $arg
    }
}

set timeout -1
spawn telnet 192.168.3.12 3000
match_max 100000
expect -exact "Trying 192.168.3.12...\r\r
Connected to 192.168.3.12.\r\r
Escape character is '^\]'.\r\r
"
send -- "hwm-init act\r"
expect -exact "hwm-init act\r
HWM init ok \r
\r"
send -- "dsp-startup 3\r"
expect -exact "dsp-startup 3\r
ERROR: Missing parameter! \r
\r \r
\r--------------------------------------------------------------\r
\rdsp-startup <dsp0    dspn>  \r
\r            \[0..34   0..34\] \r
\rstarts dsp online SW \r
\r--------------------------------------------------------------\r
\r \r
\r"
send -- "4"
expect -exact " "
send -- "dsp-starti"
expect -exact " "
send -- "up 34 34\r"
expect -exact "up 34 34\r
DSP 34: START returned bad result 3\r
\r"
send -- "dsp-mem-wr 34 0x3f000 1 0x800000f1"
expect -exact "dsp-mem-wr 34 0x3f000 1 0x800000f1"
send -- "\r"
expect -exact "\r
data\[0\]: 0x800000f1 \r
\rwrite 0x800000F1 to DSP-adresses 0x0003F000 .. 0x0003F004 \r
\r \r
\r"
send -- "dsp-mem-wr 34 0x3f000 1 0x800000f2"
expect -exact "dsp-mem-wr 34 0x3f000 1 0x800000f2"
send -- "\r"
expect -exact "\r
data\[0\]: 0x800000f2 \r
\rwrite 0x800000F2 to DSP-adresses 0x0003F000 .. 0x0003F004 \r
\r \r
\r"
send -- "dsp-mem-wr 34 0xbfe00 1 0"
expect -exact "dsp-mem-wr 34 0xbfe00 1 0"
send -- "\r"
expect -exact "\r
data\[0\]: 0x00000000 \r
\rwrite 0x00000000 to DSP-adresses 0x000BFE00 .. 0x000BFE04 \r
\r \r
\r"
send -- "dsp-mem-wr 34 0xbfe04 1 0xc00322c1"
expect -exact "dsp-mem-wr 34 0xbfe04 1 0xc00322c1"
send -- "\r"
expect -exact "\r
data\[0\]: 0xc00322c1 \r
\rwrite 0xC00322C1 to DSP-adresses 0x000BFE04 .. 0x000BFE08 \r
\r \r
\r"
send -- "dsp-mem-wr 34 0xbfe08 1 0xc400"
expect -exact "dsp-mem-wr 34 0xbfe08 1 0xc400"
send -- "\r"
expect -exact "\r
data\[0\]: 0x0000c400 \r
\rwrite 0x0000C400 to DSP-adresses 0x000BFE08 .. 0x000BFE0C \r
\r \r
\r"
send -- "dsp-mem-wr 34 0xbfe0c 1 0x3ef"
expect -exact "dsp-mem-wr 34 0xbfe0c 1 0x3ef"
send -- "\r"
expect -exact "\r
data\[0\]: 0x000003ef \r
\rwrite 0x000003EF to DSP-adresses 0x000BFE0C .. 0x000BFE10 \r
\r \r
\r"
send -- "dsp-mem-wr 34 0xbfe00 1 1"
expect -exact "dsp-mem-wr 34 0xbfe00 1 1"
send -- "\r"
expect -exact "\r
data\[0\]: 0x00000001 \r
\rwrite 0x00000001 to DSP-adresses 0x000BFE00 .. 0x000BFE04 \r
\r \r
\r"
send -- "quit\r"
expect eof


Kada izbacim sve expect naredbe onda jednostavno ne radi.

Sto bih trebao napraviti da ovo uspjesno proradi, te da na jednostavan nacin mogu dodavati nove komande.
 
Odgovor na temu

random
Vladimir Vrzić
Beograd

Član broj: 85
Poruke: 3866
*.f.bg.ac.yu.

Sajt: www.last.fm/user/vrza


+4 Profil

icon Re: Kako napisati skriptu za telnet?11.02.2006. u 13:47 - pre 221 meseci
1) Pretraži stare teme na forumu, bilo je reči o problematici automatizacije telnet sesija.

2) Daj više detalja o tome šta pokušavaš da postigneš (krajnji cilj). Možda postoji elegantnije rešenje nego što je telnet + expect.
int rand(void);

Those who do not understand Unix are condemned to reinvent it, poorly.

Upali lampicu — koristi Jabber!
 
Odgovor na temu

ivbrcic
Ivan Brcic
Siemens
Zagreb

Član broj: 38567
Poruke: 35
*.cmu.carnet.hr.



Profil

icon Re: Kako napisati skriptu za telnet?11.02.2006. u 22:11 - pre 221 meseci
1) probao sam pretražiti forum sa expect, ali bez većeg uspjeha (isto kao na cijelom internetu nisam uspio naći rješenja sa expect-om, ili primjer kako se na telnet šalje više komandi, osim login i password)

2) Imamo neki komad hardware-a na koji treba slati komande koje se nalaze u skripti. Kako ih ne bi unosili svaki put treba napraviti skriptu koja ce to raditi. Uspio sam to postići na dva načina. Prvo rješenje je bilo da sam napravio client program koji sa serverom komunicira preko socket-a. To radi, ali sam čuo da je to bolje da radi preko skripte, odnosno pomoću expect-a (još nisam dobio odgovor zašto). Drugo rješenje koje sam napravio je pomoću obične bash skripte koja šalje komande na telnet, a telnet dalje šalje na server. Evo i kratke skripte sa kojom sam to uspio:

Code:

telnet1.sh
********************************************************************

#!/bin/sh 
#
host=192.168.3.12
port=3000

echo open ${host} ${port}
sleep 1

echo hwm-init act
sleep 10
echo dsp-startup 34 34
sleep 55
echo dsp-mem-wr 34 0x3f000 1 0x800000f1
sleep 5
echo dsp-mem-wr 34 0x3f000 1 0x800000f2
sleep 5
echo exit

******************************************************************** 

ovako sam to pokretao: $ ./telnet1.sh | telnet

Ovdje je pak problem što moram predvidjeti trajanje izvršenja svake komande, a kako će tih poruka biti poprilično ne znam koliko je pak ovaj način koristan, a drugo je to što još uvijek ne znam kako moja skripta može čekati na nekakvu akciju korisnika, nešto poput promt-a ili getchar-a.
 
Odgovor na temu

Dusan Marjanovic
Consultant, SAS
Beograd

Član broj: 59
Poruke: 1290
*.info.

Jabber: dusanm@gmail.com
ICQ: 84621598
Sajt: marjanovic.net


+6 Profil

icon Re: Kako napisati skriptu za telnet?12.02.2006. u 14:36 - pre 221 meseci
Citat:
ivbrcic
Ovdje je pak problem što moram predvidjeti trajanje izvršenja svake komande, a kako će tih poruka biti poprilično ne znam koliko je pak ovaj način koristan, a drugo je to što još uvijek ne znam kako moja skripta može čekati na nekakvu akciju korisnika, nešto poput promt-a ili getchar-a.

Upravo iz ovih razloga to treba raditi preko expecta :) Jer preko expect skripte ti mozes da definises sta ces da saljes u zavisnosti od toga kakav si prompt/odgovor dobio.
http://expect.nist.gov/ u okviru same instalacije imas primera koliko volis :)
VMware VCP/Microsoft MCSE 2003/HP ASE
 
Odgovor na temu

[es] :: Skript jezici :: Kako napisati skriptu za telnet?

[ Pregleda: 3291 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.