Quiero crear un programa en lenguaje C que me permita ejecutar un comando en la terminal.
He creado un programa en script de shell que me daría la ip de cualquier sitio web que se abra en mi navegador. Este script de shell se ejecuta ingresando este comando en la terminal:
sudo tcpdump -n dst port 80 -i eth
Mi profesor me dijo que creara un programa en lenguaje C que abriera la terminal e ingresara este comando y luego mi script de shell funcionaría.
Por favor, dime cómo crear un programa de este tipo.
fuente
Hola, te escribiré un código de ejemplo, te lo explicaré y realmente espero que esto te ayude. El prototipo de la función es algo así como:
sistema int (const char * cmd);
1) abrir una terminal y compilar el programa
2) ejecútelo (por ejemplo en Ubuntu) ./program_name comman_name -anything - cualquier cosa
ejemplo: ./a.out locale -a
Este ejemplo imprime todas las configuraciones regionales compatibles con mi compilador que es gcc.
más información:
p es un indicador para apuntar a char (como argv is) p = & argv [2], apunta a -cualquier cadena que gato todo -cualquier cosa a mi cadena de cmd salgo del ciclo cuando * p apunta a NULL mira esto: -> Usaré este símbolo para decir puntos (no lo confunda con el operador de selección de flecha derecha).
argv [0] -> nombre_programa
argv [1] -> command_name (en este ejemplo, el nombre del comando será locale, pero ingrese el comando que desea verificar en su lugar)
argv [2] -> -anything (en este ejemplo -a, que son todas las configuraciones regionales)
argv [3] -> NULL (en este ejemplo, esto cierra el ciclo)
ok eso es todo, creo.
fuente
Voy a suponer que se trata de usar un binario setuid-root para reemplazar sudo, en lugar de solo la ejecución arbitraria de comandos, por lo que voy a incluir las otras partes de la solución.
Como cuestión de seguridad, evitamos system () porque puede ser secuestrado.
Después de compilar esto, instale el binario resultante como setuid-root.
si ha guardado esto como
foo.c
y desea instalarlo como/usr/local/sbin/foo
, ejecute:fuente