PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ausführbare Datei über Socket übertragen



klinsel
19-01-2008, 16:03
Ich habe mir eine kleine Serveranwendung geschrieben, die per system() alle Befehle ausführt, die man ihr per Clientanwendung übergibt.
Ich weiß, dass das nicht sehr sicher ist, aber vorerst reicht mir das einmal.
Nun habe ich probiert, den Inhalt einer ausführbaren Datei (ein C-Programm) als Binärdaten einzulesen und dann den Befehl


echo "<Binärdaten>" > file

an die Serveranwendung zu schicken, doch leider kann der anscheinend nichts mit dem Befehl anfangen, da die Binärdaten viele Sonderzeichen enthalten.
Ziel war es ja, die Binärdaten der ausführbaren Datei am Server in die Datei "file" zu schreiben, damit dort auch diese ausführbare Datei vorhanden ist.
Wie könnte ich das jetzt trotzdem über einen Socket machen (ohne ftp, scp & Co)?

anda_skoa
19-01-2008, 18:54
Für einen Socket sind die Art der Daten völlig bedeutungslos, d.h. immer Binärdaten.

Vielleicht hast du beim Lesen aus dem Socket oder beim darauffolgenden Schreiben in die Zieldatei irgendwo einen Fehler.

Ciao,
_

klinsel
19-01-2008, 19:21
Ja schon, aber die Binärdaten können ja Metazeichen wie ` enthalten, wodurch dann der echo-Befehl meiner Meinung nach versagt, der diese Daten in ein File schreiben soll.

jan61
19-01-2008, 20:41
Ja schon, aber die Binärdaten können ja Metazeichen wie ` enthalten, wodurch dann der echo-Befehl meiner Meinung nach versagt, der diese Daten in ein File schreiben soll.

Für solche Zwecke hat man in der guten alten Modem-Zeit uuencode und uudecode gebaut. Die sollten helfen.

Jan

panzi
19-01-2008, 23:27
implementiere ein einfaches protokoll bei dem du den server sagst "ich sende jetzt eine binärdatei mit länge ..." und dann die binärdaten. diese werden dann in eine datei gespeichert (z.B. unter /tmp) und dann wirds ausgeführt. altanativ könntest dann noch ne message implementieren die sagt "ich sende jetzt ein kommando" und dann die übertragenen daten als string mit system() ausführen.
wennst es HTTP ähnlich machst dann würden die Msgs ca. so aussehn:



Run-Executable
Length: 500

(500 byte binäre daten)


bzw.



Run-Command
(Kommando wie z.B. ls -la)

klinsel
20-01-2008, 10:13
uuencode erzeugt leider sehr viele ` Zeichen :-( sonst wärs super gewesen.

jan61
20-01-2008, 13:26
uuencode erzeugt leider sehr viele ` Zeichen :-( sonst wärs super gewesen.

Hast Du es mal mit "MIME Base64"-Kodierung versucht (Option -m)?

Jan

klinsel
20-01-2008, 14:05
Aja, das sieht doch sehr gut aus.

Könnte man eigentlich auch mit netcat in einem Einzeiler Text senden?
Also z.B.:


nc localhost 4444 --text "blabla"

Geht sowas auf ähnliche Weise (wenn möglich aber nicht Text aus einer Datei)?

jan61
20-01-2008, 14:19
Könnte man eigentlich auch mit netcat in einem Einzeiler Text senden?
Also z.B.:


nc localhost 4444 --text "blabla"Geht sowas auf ähnliche Weise (wenn möglich aber nicht Text aus einer Datei)?

Wenn ich Dich richtig verstehe, willst Du uuencoded Text per netcat versenden? Geht auch, da uuencode auch von STDIN lesen kann:
nc localhost 4444 --text "`echo 'BlaBla' | uuencode -m`"Jan

klinsel
20-01-2008, 14:35
Aber netcat übernimmt diesen Text anscheinend nicht zum übertragen.
Anmerkung: "--text" müsste natürlich noch weg.
Ansonsten müsste ja auch


nc localhost 4444 "blabla"

ankommen.

anda_skoa
20-01-2008, 20:59
Dann kannst du versuchen die Pipeline umzuordnen


echo 'BlaBla' | uuencode -m | nc localhost 4444


Ciao,
_