Question

Dans un laboratoire de sécurité de l'information sur lequel je travaille, j'ai été chargé d'exécuter plusieurs commandes avec un seul appel à " system () " (écrit en C, fonctionnant sur Fedora). Quelle est la syntaxe qui me permettra d’exécuter plus que la commande via system ()? (L'idée étant que vous pouvez exécuter des commandes arbitraires via un programme exécuté sur un ordinateur distant, si le programme interagit avec le système d'exploitation via l'appel system ().)

I.e.:

char command[] = "????? \r\n"; 
system(command);
Était-ce utile?

La solution

Cela dépend du shell appelé pour exécuter les commandes, mais en général la plupart des shells utilisent ; pour séparer les commandes, de sorte que quelque chose comme cela devrait fonctionner:

command1; command2; command3

[EDIT]

Comme @dicroce l'a mentionné, vous pouvez utiliser & amp; au lieu de ; pour arrêter l'exécution à la première commande renvoyant une valeur non nulle. Cela peut être souhaité ou non (et certaines commandes peuvent renvoyer une valeur différente de zéro en cas de succès), mais si vous essayez de gérer des commandes qui peuvent échouer, vous ne devriez probablement pas chaîner plusieurs commandes ensemble dans un appel system (), car vous n'en avez pas. aucun moyen de déterminer où l'échec s'est produit. Dans ce cas, le mieux serait d’exécuter une commande à la fois ou de créer un script shell qui gère le traitement des erreurs et de l’appeler à la place.

Autres conseils

Utilisez & amp; & amp; entre vos commandes. Il présente l'avantage de ne continuer à exécuter des commandes que si elles renvoient des codes d'erreur ayant abouti. Exemple:

& c; cd / proc & amp; & amp; cat cpuinfo "

Une possibilité vient immédiatement à l’esprit. Vous pouvez écrire toutes les commandes dans un script puis l'exécuter avec:

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

ou, maintenant que j'ai remarqué que vous utilisez Fedora:

system ("x.sh");
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top