On 09.07.01 Hilmar Preusse (hille@rudi.urz.tu-dresden.de) wrote:
Moin,
Auf http://www.mkssoftware.com/products/tk/commands.asp?product=tkdev wird eine Ansammlung von Tools beschrieben, die im Wesentlichen eine Backportierung von UNIX-Tools auf W$ darstellen. Daran interessiert mich das Programm web(1). Wo finde ich das UNIX-Original, kennt das jemand oder ist das durch nc(1) und die dazugehörigen Skripte abgelöst worden?
Nun, da bis jetzt noch keine Antwort kam, hab ich nochmal mit dem Projektleiter gesprochen, was er eigentlich wirklich will. Situation: Eine ganze Latte IP-Phones (40 Stücke), die zentral gewartet werden sollen. Die haben zum Netz Port 80 offen, können also mit einem ganz normalen Browser reden. Darum funktioniert bisher der interaktive Weg: Browser auf, Config ändern, Browser zu. Jetzt wollen wir das Zeug verskripten, also: telnet auf Port 80, Authentifizierung, Befehle eingeben und wech. Wir suchen also konkret ein non-interaktives Telnet. Stöbern in meinem privaten lug-dd-Archiv förderte zwei Ansätze zu Tage: expect und Net::Telnet.
Ich habs erstmal mit expect probiert:
<snip> #!/usr/bin/expect5.31 -- # remotely excution of programs behind telnet exp_version -exit 5.0
set timeout 60 spawn telnet localhost expect "*drachi login:" send "hille\r" expect "Password:" send "geheim\r" expect "*a" send "cp onlinecalc a" expect "a" send "exit" close #wait send_user "test\n" <snap>
Auf dem Bildschirm sieht alles gut aus, "drachi login:" ist mein login-Prompt und das Login geht problemlos durch:
Jul 15 10:04:43 drachi in.telnetd[12449]: connect from 127.0.0.1 Jul 15 10:04:43 drachi PAM_unix[12450]: (login) session opened for user hille by (uid=0) (Satzende)
"a" ist (temporär) der bash-Prompt des Users hille. Die Ausgaben des Skriptes sehen dann so aus: <snip> $/etc/motd You have mail. cp onlinecalc a test $Loginprompt <snap>
Er sendet das Kommando "cp onlinecalc a" ab, führt es aber nicht aus. Warum? Soweit ich das verstanden hab, wird das Argument von send an den jeweiligen Prozeß gesendet. Das wäre in dem Fall die bash. exit funktioniert offenbar, denn die telnet-Session wurde korrekt beendet. Das Beispielskript autoexepect hat mir nicht weitergeholfen. Dessen Ergebnis sieht im wesentlichen Teil auch so aus und führt zu nix.
Zweiter Ansatz war Net::Telnet.
Beispiel: <snip> #!/usr/bin/perl
$hostname = "drachi"; $username = "hille"; $passwd = "geheim";
use Net::Telnet (); $testobj = new Net::Telnet (Timeout => 10, Prompt => '/a/', Dump_Log => 'ex1.log', Output_log => 'ex2.log');
$testobj->open(Host => $hostname); $testobj->login($username,$passwd); @lines = $testobj->cmd("/usr/bin/w\n"); print @lines; <snap>
Das /usr/bin/w - Kommando wird nicht ausgeführt, soweit ich das beurteilen kann. Mangels Perl-Kenntnissen stehe ich voll auf dem Schlauch.
Wo könnte ich mit suchen anfangen?
H.