Hallo ihrs,
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?
H.
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.
Am Sun den 15 Jul 2001 um 02:24:18PM +0200 schrieb Hilmar Preusse:
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.
Wie wäre es denn mit einem richtigen http user agent? Da gäbe es z.B. use LWP::UserAgent; use HTTP::Request; use HTTP::Response; my $url = "$stats_url_pre/$contest/$stat_member_url"; my $ua = LWP::UserAgent->new(); $ua->agent("Homebuilt LogParser/v0.0.2"); my $req = HTTP::Request->new(GET => $url); $req->referer("http://rudi.urz.tu-dresden.de/rc5/"); my $response = $ua->request($req); my $dnet_data = $response->content() or die "kann...";
Für posts gibt es sicher auch ein passendes Modul.
andre
H.
#if _FP_W_TYPE_SIZE < 32 #error "Here's a nickle kid. Go buy yourself a real computer." #endif -- linux/arch/sparc64/double.h
Muss ich mir merken. Aber 'n nickle reicht da nicht.
andre
On 16.07.01 Andre Schulze (as8@Rcs1.urz.tu-dresden.de) wrote:
Moin,
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.
Wie wäre es denn mit einem richtigen http user agent? Da gäbe es z.B. use LWP::UserAgent; use HTTP::Request; use HTTP::Response; my $url = "$stats_url_pre/$contest/$stat_member_url"; my $ua = LWP::UserAgent->new(); $ua->agent("Homebuilt LogParser/v0.0.2"); my $req = HTTP::Request->new(GET => $url); $req->referer("http://rudi.urz.tu-dresden.de/rc5/"); my $response = $ua->request($req); my $dnet_data = $response->content() or die "kann...";
Für posts gibt es sicher auch ein passendes Modul.
Gut, ich werde mir das anschauen. Vorläufig habe ich aber auch das Perl-Skript ans Rennen gebracht und werde mich damit auseinandersetzen, weil mir das besser erscheint als expect. Mittlerweile habe ich aber auch herausgefunden, daß ein wget -O $tmp http://$(user):$(passwd)@$(ip-phone)/!+config+show & dasselbe macht, wie ein telnet auf die Büchse und das eingeben des Befehles "config show", so daß man das alles mgl. weise über ein paar wget-Kommandos erledigen kann. Bei meinen Perl-"Kenntnissen" ist das mgl. weise der beste Weg.
H.
On 15.07.01 Hilmar Preusse (hille42@web.de) wrote:
Selbstgespräche:
Ich habs erstmal mit expect probiert:
Eine lauffähige Version:
#!/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 "drachi:[hille]\ >" expect "drachi*hille*>" send "cp -f security a\r" #expect "drachi:[hille]\ >" expect "drachi*hille*>" send "pwd\r" #expect "drachi:[hille]\ >" expect "drachi*hille*>" send "exit" close #wait send_user "test\n"
Tut genau das, was ich will. Frage ist nur, warum das mit dem #expect "drachi:[hille]\ >" nicht geht und ich die :[] und <space> durch wildcards ersetzen muß. Mein Shellprompt sieht so aus: drachi:[hille] > . Nein, wenn ich nicht maskiere geht es auch nicht. Und warum cp -f ein "alias cp='cp -i'" (in der ~/.bashrc gesetzt) nicht einfach ignoriert.
H.
lug-dd@mailman.schlittermann.de