2008-10-29 8 views
7

In einem Informationssicherheitslabor, an dem ich arbeite, wurde ich beauftragt, mehrere Befehle mit einem einzigen Aufruf von "system()" auszuführen (in C geschrieben , läuft auf Fedora). Was ist die Syntax, die es mir erlaubt, mehr als Befehl durch System() auszuführen? (Die Idee ist, Sie beliebige Befehle durch ein Programm, das auf einem Remote-Computer ausführen können, wenn das Programm mit dem Betriebssystem durch das System interagiert() -Aufruf.)Verwendung eines einzelnen Systems() Aufruf zur Ausführung mehrerer Befehle in C

Ie:

char command[] = "????? \r\n"; 
system(command); 
+0

Sofern Sie nicht auf Windows ausgeführt wird, der Wagenrücklauf (\ r) ist wahrscheinlich Probleme verursachen, anstatt einen Vorteil zu geben. Sie sollten in der Lage sein, Befehle durch Zeilenumbrüche oder Semikolons zu trennen, wie andere vorgeschlagen haben. –

+1

In Bezug auf die Sicherheit ist es im Allgemeinen ein komplizierter Prozess, Remote-Programmen die Ausführung beliebiger Befehle zu erlauben. Es ist am wenigsten ernst, wenn das Programm lokal mit den Rechten des entfernten Benutzers läuft; Wenn es mit irgendwelchen erhöhten Privilegien läuft, ist es schlimm. –

Antwort

13

, die auf das hängt Shell-Befehle auszuführen, aufgerufen zu werden, aber in der Regel die meisten Schalen ; verwenden, um Befehle zu trennen, so etwas wie dies funktionieren sollte:

command1; command2; command3 

[EDIT]

Da @dicroce erwähnt wurde, können Sie && anstelle von ; verwenden, wodurch die Ausführung beim ersten Befehl gestoppt wird, der einen Wert ungleich null zurückgibt. Dies kann oder kann nicht gewünscht sein (und einige Befehle können bei Erfolg nicht null zurückgeben), aber wenn Sie versuchen, Befehle zu verarbeiten, die fehlschlagen können, sollten Sie wahrscheinlich nicht mehrere Befehle in einem Aufruf von system() zusammenführen, wie Sie nicht haben jede Art zu bestimmen, wo der Fehler aufgetreten ist. In diesem Fall wäre es am besten, wenn Sie entweder einen Befehl nach dem anderen ausführen oder ein Shell-Skript erstellen, das die entsprechende Fehlerbehandlung durchführt und stattdessen aufruft.

1

Eine Möglichkeit kommt sofort in den Sinn. Sie könnten alle Befehle an ein Skript schreiben, dann führen Sie es mit:

system ("cmd.exe /c \"x.cmd\""); 

oder, jetzt, ich habe bemerkt, dass Sie auf Fedora laufen:

system ("x.sh"); 
8

Verwenden & & zwischen Befehlen. Dies hat den Vorteil, dass Befehle nur so lange ausgeführt werden, wie sie erfolgreiche Fehlercodes zurückgeben. Beispiel:

"cd/proc & & cat cpuinfo"