Actualmente estoy estudiando pruebas de penetración y programación de Python. Solo quiero saber cómo haría para ejecutar un comando de Linux en Python. Los comandos que quiero ejecutar son:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port 8080
Si solo lo uso print
en Python y lo ejecuto en la terminal, ¿hará lo mismo que ejecutarlo como si lo estuviera escribiendo usted mismo y presionando Enter?
bash
era una cáscara hinchada ...os.system
recomendar el uso delsubprocess
módulo.Respuestas:
Puedes usar
os.system()
, así:O en tu caso:
Mejor aún, puede usar la llamada del subproceso, es más seguro, más potente y probablemente más rápido:
O, sin invocar shell:
Si desea capturar la salida, una forma de hacerlo es así:
Yo altamente recomiendo el establecimiento de una
timeout
encommunicate
, y también para capturar las excepciones que puede obtener cuando se llama a ella. Este es un código muy propenso a errores, por lo que debe esperar que ocurran errores y manejarlos en consecuencia.https://docs.python.org/3/library/subprocess.html
fuente
os.system
todavía funciona.subprocess.call
según lo recomendado, es posible que tenga que especificarshell=True
... ver aquídecode()
con el conjunto de caracteres deLC_CTYPE
la variable de entorno.El primer comando simplemente escribe en un archivo. No ejecutarías eso como un comando de shell porque
python
puedes leer y escribir en archivos sin la ayuda de un shell:El
iptables
comando es algo que puede querer ejecutar externamente. La mejor manera de hacerlo es usar el módulo de subproceso .Tenga en cuenta que este método tampoco utiliza un shell, que es una sobrecarga innecesaria.
fuente
La forma más rápida:
Este no es el enfoque más flexible; si necesita más control sobre su proceso que "ejecutarlo una vez, hasta completarlo y bloquear hasta que salga", entonces debe usar el
subprocess
módulo en su lugar.fuente
Como regla general, será mejor que use enlaces de python siempre que sea posible (mejor captura de excepciones, entre otras ventajas).
Para el
echo
comando, obviamente es mejor usar python para escribir en el archivo como se sugiere en la respuesta de @ jordanm.Para el
iptables
comando, tal vezpython-iptables
( página PyPi , página GitHub con descripción y documento ) proporcionaría lo que necesita (no verifiqué su comando específico).Esto te haría depender de una biblioteca externa, por lo que debes sopesar los beneficios. El uso de subprocesos funciona, pero si desea usar la salida, tendrá que analizarlo usted mismo y manejar los cambios de salida en futuras
iptables
versiones.fuente
subprocess
llamadas es menos útil. Sí, puede burlarse de las llamadas, pero las pruebas tienen que hacer suposiciones sobre los resultados de las llamadas externas.Una versión en python de tu shell. Ten cuidado, no lo he probado.
fuente
Si desea ejecutar este comando en otro sistema después de SSH, entonces puede que tenga que usar el módulo llamado Paramiko. Es realmente útil
Si la ejecución del comando tiene que hacerse desde la máquina local, entonces las funciones del módulo os serán útiles.
fuente