[ SYSTEM ]: Linux srv.persadacompanies.com 4.18.0-553.56.1.el8_10.x86_64 #1 SMP Tue Jun 10 05:00:59 EDT 2025 x86_64
[ SERVER ]: Apache | PHP: 8.4.20
[ USER ]: persadamedika | IP: 45.64.1.108
GEFORCE FILE MANAGER
/
usr
/
share
/
doc
/
perl-Expect
/
tutorial
/
UPLOAD:
NAME
SIZE
QUICK PERMS
ACTIONS
📄 1.A.Intro
2,428 B
SET
[ EDIT ]
|
[ DEL ]
📄 2.A.ftp
3,085 B
SET
[ EDIT ]
|
[ DEL ]
📄 2.B.rlogin
4,043 B
SET
[ EDIT ]
|
[ DEL ]
📄 3.A.debugging
1,973 B
SET
[ EDIT ]
|
[ DEL ]
📄 4.A.top
928 B
SET
[ EDIT ]
|
[ DEL ]
📄 5.A.top
1,139 B
SET
[ EDIT ]
|
[ DEL ]
📄 5.B.top
2,450 B
SET
[ EDIT ]
|
[ DEL ]
📄 6.A.smtp-verify
3,260 B
SET
[ EDIT ]
|
[ DEL ]
📄 6.B.modem-init
1,833 B
SET
[ EDIT ]
|
[ DEL ]
📄 README
644 B
SET
[ EDIT ]
|
[ DEL ]
DELETE SELECTED
[ CLOSE ]
EDIT: 5.B.top
#!/usr/bin/perl # Here we set manual_stty on the process so we can do things like #hit ^Z to stop it instead of the ^Z going to the process on the other machine. # This is to say, normally when you interact with a process STDIN is #put in raw mode so everything you type talks to the process at the other end. # Picture this. When you telnet somewhere and start a process (top #for example) you are talking to telnet in raw mode. If you press ^Z it #goes through telnet to the shell on the remote machine and the process #at the other end is stopped. Here we're going to make it so raw mode is #never set and when you press ^Z or ^C it will stop/interrupt Expect. # Also briefly demonstrated is the use of Expect::interconnect(), #a more general/versatile alternative to interact. use Expect; # Debugging anyone? # $Expect::Log_Stdout=1; # $Expect::Exp_Internal=1; # $Expect::Debug=1; $RSH='/usr/bin/ssh'; $host_to_login_to=shift(@ARGV); print "Enter password: "; $|=1; # First we have to initialize STDIN in to an expect object. $stdin=Expect->exp_init(\*STDIN); # Now turn off echoing $stdin->exp_stty('-echo'); # The easy way to do this is: #$password=<STDIN>; #chop $password; # The somewhat harder way is to use $stdin->expect. This would look like: # ($match_num,$error,$match,$before,$after)=$stdin->expect(undef,"\n"); $password = $before; # Turn echo back on $stdin->exp_stty('echo'); # print that newline that wasn't echoed print "\n"; #$Expect::Exp_Internal=1; $rsh=Expect->spawn($RSH,$host_to_login_to); # Look for a password prompt. $rsh->expect(30,'-re','word:\s$')||(die"Never got password prompt\n"); print $rsh "$password\r"; # Look for a prompt. Prompt can be # $ > or ] followed by a whitespace. $prompt = '[\]\$\>\#]\s$'; # Note the use of -re $rsh->expect(30,'-re',$prompt)||(die "Never got prompt on host\n"); # Start top print $rsh "exec top\r"; # We already have an inited handle for STDIN above which we can use. # We don't just do $rsh->interact because it will go monkeying # with tty settings by default (set it raw). $stdin->manual_stty(1); # Instead we use interconnect directly. # The trick here is to make sure: # 1. Everything listening to a handle is added to its # listen group. # 2. Only what you want is jabbering at STDOUT. # # In this case only $rsh will talk to STDOUT so we don't have to # change any log_stdout() settings. $stdin->set_group($rsh); Expect::interconnect($stdin,$rsh);