elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Ayuda con script PYTHON
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con script PYTHON  (Leído 4,070 veces)
j0lama

Desconectado Desconectado

Mensajes: 24



Ver Perfil
Ayuda con script PYTHON
« en: 6 Octubre 2015, 23:05 pm »

Hola buenas, queria hacer un scrip en python el cual al ejecutarse impida el uso del terminal, es decir que cuando se inicie el terminal, detecte el problema que es y le haga kill
Un saludo


En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Ayuda con script PYTHON
« Respuesta #1 en: 7 Octubre 2015, 02:42 am »

y que has hecho? no esperas que te lo hagan no?


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
explorer

Desconectado Desconectado

Mensajes: 102


Analista/Programador Perl


Ver Perfil
Re: Ayuda con script PYTHON
« Respuesta #2 en: 7 Octubre 2015, 15:35 pm »

¿En qué sistema operativo estás trabajando?
En línea

j0lama

Desconectado Desconectado

Mensajes: 24



Ver Perfil
Re: Ayuda con script PYTHON
« Respuesta #3 en: 7 Octubre 2015, 23:44 pm »

¿En qué sistema operativo estás trabajando?
Estoy en Ubuntu
En línea

j0lama

Desconectado Desconectado

Mensajes: 24



Ver Perfil
Re: Ayuda con script PYTHON
« Respuesta #4 en: 7 Octubre 2015, 23:46 pm »

y que has hecho? no esperas que te lo hagan no?

ESto es lo que he logrado hacer, y en efecto cierra el terminal. Pero me gustaria que en el momento de activar el .py comenzara un bucle infinito y que no te dejase abrir el terminal

Código:
#!/usr/bin/python
import time, sys, subprocess,os
comando = "kill -9 $(ps -eo pid,cmd | grep gnome-terminal | awk {'print $1;'})"
proceso = subprocess.Popen(comando , shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE)
while True:
    next_line = proceso.stdout.readline()
    if next_line == '' and proceso.poll() != None:
        break
    sys.stdout.write(next_line)
    sys.stdout.flush()
En línea

explorer

Desconectado Desconectado

Mensajes: 102


Analista/Programador Perl


Ver Perfil
Re: Ayuda con script PYTHON
« Respuesta #5 en: 8 Octubre 2015, 02:15 am »

La responsabilidad del arranque de la terminal es del usuario hacia el kernel usando el entorno de ventanas o el shell como intermediarios.

Entonces... no se puede evitar el arranque de la terminal si no te pones en medio de esa conversación.

Se puede hacer que no lo arranque desde el entorno gráfico si se quitan todas las referencias (iconos, menús) donde aparece el atajo para el arranque de la terminal.

Y en el shell... se podría crear un alias que se llame de la misma manera que el ejecutable, y así el usuario, si no se da cuenta, verá que no aparece nada en pantalla.

Pero un programa en ejecución como el que tú planteas, no impedirá el arranque del terminal. Si puede matarlo una vez detectado (con el kill, como tienes puesto). Entonces, lo que te queda hacer es un bucle infinito, pero en lugar de leer líneas desde un stdout abierto, debes ejecutar el 'ps ...' (por ejemplo, cada un segundo o cada 3 segundos, para que no cargue la CPU), y encauzar los pid encontrados al kill.

Por ejemplo:
Código
  1. #!/usr/bin/python
  2. import time, sys, subprocess,os
  3.  
  4. while True:
  5.    time.sleep(1)                       # esperamos un poco
  6.    comando = "ps -eo pid,cmd | fgrep konsole | fgrep -v fgrep | awk {'print $1;'}"            
  7.    proceso = subprocess.Popen(comando , shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE)
  8.    next_line = proceso.stdout.readline()    
  9.    if next_line != '':
  10.      comando = "kill -9 " + next_line;
  11.      proceso = subprocess.Popen(comando , shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE)
(He cambiado gnome-terminal por Konsole, ya que es el terminal en mi entorno KDE). (Nota la presencia de un fgrep -v fgrep para evitar que hagamos un kill del primer fgrep).

No estoy muy ducho en Python, pero seguro que la ejecución de comandos externos en Python debería requerir menos texto.

La versión de Perl es más liviana:
Código
  1. #!/usr/bin/env perl
  2. do {
  3.    if ($terminal = qx(/bin/ps -eo pid,cmd | fgrep konsole | fgrep -v fgrep | awk '{print \$1}')) {
  4.        chomp $terminal;
  5.        system('kill', '-9', $terminal);
  6.    }
  7.  
  8.    sleep 1;
  9.  
  10. } while ("forever");
« Última modificación: 8 Octubre 2015, 02:30 am por explorer » En línea

j0lama

Desconectado Desconectado

Mensajes: 24



Ver Perfil
Re: Ayuda con script PYTHON
« Respuesta #6 en: 8 Octubre 2015, 23:33 pm »

La responsabilidad del arranque de la terminal es del usuario hacia el kernel usando el entorno de ventanas o el shell como intermediarios.

Entonces... no se puede evitar el arranque de la terminal si no te pones en medio de esa conversación.

Se puede hacer que no lo arranque desde el entorno gráfico si se quitan todas las referencias (iconos, menús) donde aparece el atajo para el arranque de la terminal.

Y en el shell... se podría crear un alias que se llame de la misma manera que el ejecutable, y así el usuario, si no se da cuenta, verá que no aparece nada en pantalla.

Pero un programa en ejecución como el que tú planteas, no impedirá el arranque del terminal. Si puede matarlo una vez detectado (con el kill, como tienes puesto). Entonces, lo que te queda hacer es un bucle infinito, pero en lugar de leer líneas desde un stdout abierto, debes ejecutar el 'ps ...' (por ejemplo, cada un segundo o cada 3 segundos, para que no cargue la CPU), y encauzar los pid encontrados al kill.

Por ejemplo:
Código
  1. #!/usr/bin/python
  2. import time, sys, subprocess,os
  3.  
  4. while True:
  5.    time.sleep(1)                       # esperamos un poco
  6.    comando = "ps -eo pid,cmd | fgrep konsole | fgrep -v fgrep | awk {'print $1;'}"            
  7.    proceso = subprocess.Popen(comando , shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE)
  8.    next_line = proceso.stdout.readline()    
  9.    if next_line != '':
  10.      comando = "kill -9 " + next_line;
  11.      proceso = subprocess.Popen(comando , shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE)
(He cambiado gnome-terminal por Konsole, ya que es el terminal en mi entorno KDE). (Nota la presencia de un fgrep -v fgrep para evitar que hagamos un kill del primer fgrep).

No estoy muy ducho en Python, pero seguro que la ejecución de comandos externos en Python debería requerir menos texto.

La versión de Perl es más liviana:
Código
  1. #!/usr/bin/env perl
  2. do {
  3.    if ($terminal = qx(/bin/ps -eo pid,cmd | fgrep konsole | fgrep -v fgrep | awk '{print \$1}')) {
  4.        chomp $terminal;
  5.        system('kill', '-9', $terminal);
  6.    }
  7.  
  8.    sleep 1;
  9.  
  10. } while ("forever");

Gracias por la ayuda, pero hay un problema, al ejecutar el archivo .py/.perl si es cierto que me cierra el terminal/terminales los cuales estan abiertos en ese momento, pero luego me sigue dejando abrirlos si hago por ejemplo Ctrl+Alt+T. Mi intencion es que mientras ese script se este ejecutando al abrir el terminal detecte el proceso y lo mate
A ver si logras echarme una mano ;)
Un saludo
En línea

explorer

Desconectado Desconectado

Mensajes: 102


Analista/Programador Perl


Ver Perfil
Re: Ayuda con script PYTHON
« Respuesta #7 en: 9 Octubre 2015, 18:07 pm »

No puedes, salvo que modifiques parte del entorno gráfico. Por ejemplo, si quieres evitar que se arranque una terminal con una combinación de teclas, debes localizar dónde está definida esa combinación, y borrarla.

Como mucho, se podría intentar reducir el tiempo de espera, para que fuera cada medio segundo, o así, pero eso aumentará la carga de la CPU.

De todas maneras, aunque el usuario pueda abrirlos con la combinación de teclas, en menos de un segundo son cerrados por el programa.

A mi, en algunos casos que he probado, ni siquiera llego a ver la ventana de la terminal.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[python] ayuda con script ¨^^(SOLUCIONADO)
Scripting
EvilGoblin 3 3,706 Último mensaje 17 Abril 2010, 03:02 am
por Novlucker
Ayuda con script python
Scripting
Xenomorfo77 5 3,996 Último mensaje 4 Mayo 2012, 02:13 am
por Xenomorfo77
[Python-POO]Necesito ayuda con un script
Scripting
PabloPbl 4 2,289 Último mensaje 16 Noviembre 2015, 03:29 am
por PabloPbl
Script python ayuda, duda...
Scripting
nonxz 1 1,888 Último mensaje 25 Marzo 2016, 05:36 am
por tincopasan
[Ayuda] Script con python
Análisis y Diseño de Malware
dopr 1 3,728 Último mensaje 10 Agosto 2016, 02:46 am
por Poyoncio
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines