Ich möchte ein Programm in C-Sprache erstellen, mit dem ich einen Befehl im Terminal ausführen kann.
Ich habe ein Programm in Shell-Skript erstellt, das mir die IP-Adresse jeder Website gibt, die in meinem Browser geöffnet ist. Dieses Shell-Skript wird ausgeführt, indem Sie diesen Befehl in das Terminal eingeben:
sudo tcpdump -n dst port 80 -i eth
Mein Professor sagte mir, ich solle ein Programm in C-Sprache erstellen, das das Terminal öffnet und diesen Befehl eingibt, und dann würde mein Shell-Skript funktionieren.
Bitte sagen Sie mir, wie man ein solches Programm erstellt.
quelle
Hallo, ich werde für Sie einen Beispielcode schreiben, ihn Ihnen erklären und hoffe, dass dies Ihnen hilft. Der Prototyp der Funktion ist ungefähr so:
int system (const char * cmd);
1). Öffnen Sie ein Terminal und kompilieren Sie das Programm
2). Führen Sie es aus (zum Beispiel in Ubuntu) ./program_name comman_name -anything - irgendetwas
Beispiel: ./a.out locale -a
In diesem Beispiel werden alle von meinem Compiler unterstützten Gebietsschemas gcc gedruckt.
Mehr Info:
p ist ein Poniter, der auf char zeigt (wie argv ist) p = & argv [2], zeigt auf -jegliche Zeichenfolge, die ich alle -jedes auf meine cmd-Zeichenfolge katze, ich verlasse die Schleife, wenn * p auf NULL zeigt Ich werde dieses Symbol verwenden, um Punkte zu sagen (verwechseln Sie es nicht mit dem Rechtspfeil-Auswahloperator).
argv [0] -> Programmname
argv [1] -> Befehlsname (in diesem Beispiel ist der Befehlsname das Gebietsschema, aber geben Sie stattdessen den Befehl ein, den Sie überprüfen möchten)
argv [2] -> -anything (in diesem Beispiel -a, das sind alle Gebietsschemas)
argv [3] -> NULL (in diesem Beispiel wird die Schleife verlassen)
ok das ist es, denke ich.
quelle
Ich gehe davon aus, dass es darum geht, eine setuid-root-Binärdatei als Ersatz für sudo zu verwenden, anstatt nur eine willkürliche Befehlsausführung, also werde ich die anderen Teile der Lösung einbeziehen.
Aus Sicherheitsgründen vermeiden wir system (), da es entführt werden kann.
Installieren Sie nach dem Kompilieren die resultierende Binärdatei als setuid-root.
Wenn Sie dies als gespeichert haben
foo.c
und es als installieren möchten, führen Sie Folgendes/usr/local/sbin/foo
aus:quelle