Schrift
[thread]11474[/thread]

STDOUT an den Clienten schreiben

Leser: 4


<< >> 3 Einträge, 1 Seite
DrWhiteLetter
 2008-03-16 23:32
#107112 #107112
User since
2005-01-30
26 Artikel
BenutzerIn
[default_avatar]
Hi,

ich habe einen kleinen Server über IO::Sockets erstellt, welcher über tcp Befehle empfangen soll. Diese werden dann an /bin/bash geleitet und die Ausgabe soll eigentlich an den Clienten geschickt werden.

Hier erstmal mein Codeschnipsel vom relevanten Teil:

Code: (dl )
1
2
3
4
5
6
7
8
my $new_sock = $sock -> accept();

while(<$new_sock>) {
$x = $_;
open(IN," |/bin/bash") or die ();
print IN $x;
close IN;
}


Dabei erfolgt die Ausgabe allerdings auf der Serverkonsole, ich hab an der Stelle versucht, STDOUT einfach umzuleiten, leider gelingt mir das nicht so ganz, da mir wohl die richtige Syntax fehlt.
Versucht habe ich es z.B. mit
Code: (dl )
open($new_sock, STDOUT)

und ähnlichen Konstrukten. Wäre schick, wenn mir einer helfen könnte. :)

Danke schonmal.
murphy
 2008-03-17 00:34
#107113 #107113
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
DrWhiteLetter+2008-03-16 22:32:27--
[...] ich habe einen kleinen Server [...], welcher über tcp Befehle empfangen soll. Diese werden dann an /bin/bash geleitet [...]


Hmm, ob das so eine gute Idee ist? Für mich klingt das eher nach der Garantie für ein riesengroßes Sicherheitsloch.

Quote
[...] ich hab an der Stelle versucht, STDOUT einfach umzuleiten, leider gelingt mir das nicht so ganz, da mir wohl die richtige Syntax fehlt. [...]


Zum Umleiten eines Ein- oder Ausgabedatenstromes kann man open verwenden:
Code (perl): (dl )
open STDOUT, '>&', $new_sock;

(mehr dazu steht in -f open)

Andererseits könnte man natürlich auch direkt in das Dateihandle $new_sock schreiben:
Code (perl): (dl )
print $new_sock '... blablubb ...';
When C++ is your hammer, every problem looks like your thumb.
topeg
 2008-03-17 06:40
#107120 #107120
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Ich glaube "IPC::Open2" ist was gesucht wird.
Beispiel:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
use IPC::Open2;

my ($fhwrite, $fhread);
my $pid=open2($fhwrite, $fhread,'/bin/bash');
die unless($pid);

print $fhwrite $befehl;
my @anwer=<$fhread>;

close($fhread);
close($fhwrite);


Aber anstatt einfach "/bin/bash" aus zu führen solltest du "su -u $unsicherer_user" mit "print $fhwrite $passwort" machen.
Dann bleibt zu beachten, dass deine Aktionen, solange sie unverschlüsselt erfolgen übers Internet abhörbar sind. Jemand kann all deine getippten Befehle mitschneiden, und eventuell für seine eigenen Zwecke nutzen.
Weit aus sicherer wäre ssh das auf jedem Server installiert sein sollte.
Aber letztlich bleibt die Sicherheit deines Servers dir überlassen... :-)

p.s.: dann gibt es noch "IPC::Open3" das auch Die Fehlermeldung abfangen kann.
<< >> 3 Einträge, 1 Seite



View all threads created 2008-03-16 23:32.