Mostrando las entradas con la etiqueta ps. Mostrar todas las entradas
Mostrando las entradas con la etiqueta ps. Mostrar todas las entradas

sábado, 8 de diciembre de 2012

Como monitorear una aplicación abierta con Perl/bash

El titulo de esta entrada era mas largo, era:

Como monitorear una app abierta y realizar acciones a partir de ella :D

Este tutorial lo iba a hacer solo con bash,pero me quedo corto :(

No,no es cierto bash es muy potente solo que tuve que usar perl esta vez ya que aveces bash no hace lo que necesitamos,ambos lenguajes diseñados para la administración de sistemas tipo Unix.

Vamos a darle un repaso a esto.

Como ya había comentado anteriormente podemos ver el proceso de una aplicacion/programa con ps,en este caso ps -ef,desde aquí podemos tomar acciones con una estructura selectiva:

Por ejemplo

ps -ef | grep gedit | grep -v grep >> /dev/null
Esto lo que hace es checar si esta en proceso gedit,filtra grep para que no tome en cuenta el PID que pide el PID y lo manda al device null,para no ver el proceso.

Y esto para que sirve, así para nada,pero si usamos la variable especial

$?
Nos dice la salida del comando,si no me explico ejecuten esto en terminal

Primero:

Abre un programa(de preferencia uno sencillo de identificar firefox/gedit/etc)

Ejecuta esto en terminal:

ps -ef | grep gedit | grep -v grep >> /dev/null
Luego esto


echo $?
Y la salida sera 0

Ahora cierra el programa y ejecuta de nuevo:


ps -ef | grep gedit | grep -v grep >> /dev/null
echo $?
Y el resultado sera otro (1)


Así que miren como funciona esto en un script

#!/bin/bash


ps -ef | grep gedit | grep -v grep >> /dev/null

if [ $? -eq 0 ]; then

echo "El programa esta abierto"

else 

echo "El programa esta cerrado"

fi




Si queremos una comprobación mayor,podemos usar un bucle,pero eso es otro asunto.

Otra forma es usar otro tipo de estructura selectiva, que es case/esac


#!/bin/bash

ps -ef | grep gedit | grep -v grep >> /dev/null

case $? in

0)
echo "El programa esta abierto.";;

         1)
echo "El programa esta cerrado.";;
   
esac

Ahora en Perl


Para rápidamente vamos a usar comillas invertidas,para poder usar todo lo que dije de bash


my $funcion = `ps aux | grep gedit | grep -v grep`;

Y ahora vamos a usar expresiones regulares como lo explicaba en la entrada pasada:

if ( $funcion !~ m/gedit/) { }

Esto esta un poco extraño,pero sirve para muchas cosas:

Un ejemplo es mi caso, fui a casa de @Daniela a platicar algunas cuestiones,etc llevo mi netbook/laptop o algo portátil ya que su isp es de 100mb y la mía a lo mucho llega a 5mb y me deja descargar cosas muy pesadas ISO's/etc ,pero pues como nos gusta la informática y estoy en su red debo ir preparado, ya que hay un ataque que se llama Man in the middle que en este caso es Girl in the middle XDDD, así que debo ir preparado para esto, y como este ataque se basa en arp,hay herramientas como watch arp que monitorea todo eso,el adress de donde viene la señal,la MAC adress de router y otras cosas mas, así que si nos cambian la MAC adress del router por una de una pc personal para efectuar el MitM se vería en watch arp como suplantan la Adress de router por la de una pc que esta haciendo ARP Spoofing con forwarding.

Y esto no depende del sistema que use, sea Linux(Arch/Gentoo)/BSD(FreeBSD/openBSD)/Windows(}:D)/OS X(Lion/etc) esto es de nuestra conexión y de los paquetes que entran y salen de nuestra pc.

Imagen de bujarra.com



Ese es un ejemplo y muy propio, a menos de que les pase algo similar con personas que conozcan que puedan efectuar estos ataques, también sirve para crear buenos script's solo que en este caso yo necesite este.

Así que lo que hice fueron varias cosas,pero aquí solo de lo que se trata el tema,monitorear un programa abierto:


my $funcion = `ps aux | grep arp | grep -v grep | grep -v perl`;

Eso checa que este abierto watch arp

Pero de lo que se trata es que no tengo mucha memoria,asi que lo que hice fue poner un recordatorio a la hora de abrir la terminal.

Lo que hace es: Abro la terminal,se da cuenta si tengo corriendo watch arp,si lo tengo corriendo no pasa nada,pero si no,me pregunta si lo quiero abrir y si le digo que si,lo abre,luego abro otra terminal y como sin nada :D.

Esto va así:

#!/usr/bin/env perl

use strict;
use warnings;
use utf8;

my $funcion = `ps aux | grep arp | grep -v grep | grep -v perl`;


if ( $funcion !~ m/arp/) {

print "Usar arp s/n: ";
my $respuesta = <STDIN>;

if ($respuesta =~ m/s/) { system("watch arp"); }
elsif ($respuesta =~ m/n/) { system("clear") }
else{ exit;}
}

else { system("clear"); } 

En donde dije que no me funciono bash fue en que no me abrió watch arp :(

Explico el codigo



#!/usr/bin/env perl

use strict;
use warnings;
use utf8;

my $funcion = `ps aux | grep arp | grep -v grep | grep -v perl`;


if ( $funcion !~ m/arp/) { # Checamos si encuentra arp en el proceso

# Si no es asi...

print "Usar arp s/n: "; # Pregunta
my $respuesta = <STDIN>; # Recibe la respuesta

if ($respuesta =~ m/s/) { system("watch arp"); } # Checa la respuesta si dice que si
elsif ($respuesta =~ m/n/) { system("clear") } # Si dice que no
else{ exit;} # Si dice otra cosa
}

else { system("clear"); } # Si lo encuetra


Y si lo queremos ejecutar al abrir la terminal solo hacemos:

echo 'perl scritp.pl' >> ~/.bashrc



Bueno eso es todo,sobre el monitoreo de arp spoofing hablaremos luego.


Leer más...

jueves, 29 de noviembre de 2012

Como matar un proceso por si se nos traba Linux

El nombre entero de esta entrada es:

Como matar un proceso/cerrar un programa desde una tty por si se nos traba el sistema

Pero como siempre era muy largo el titulo y esto lo penaliza google :D .

Algunas veces aunque casi sea un mito y mas en comparación con Windows,se nos traba Linux,mas que nada seria nuestra distribución y si se nos traba ya que hay muchas personas que usan de broma esto:

Enlace
Y la verdad en GNU/Linux no se nos traba/bloquea tan horrible ya que ese parece un trojan horse con un loop para abrir ventanas,mas que nada  esto pasa por nuestros modulos/drivers y por programas que instalamos mal,no funcionan bien en nuestro sistema, también yo uso esto al estar haciendo mis programas y si escribo algo mal puedo tumbar el sistema o simplemente trabarlo,incluso en Ubuntu últimamente cuando hacemos muchas cosas,o porque un programa esta mal programado  ya es muy común verlo bloqueado.

Así que aquí el tutorial por si se les traba (como diríamos coloquialmente)

Ya que trabado puede no ser bien entendido, así que usemos un hash de perl para entenderlo:

my %palabras = {

"trabar" =>"bloquear"

};


Tutorial

1.Primero necesitamos saber el proceso de nuestro programa,este lo obtenemos desde la consola,pero si no esta disponible por eso mismo,abrimos una tty

Tutorial

2.Para saber el PID (identidad del proceso) de un proceso podemos con

top



Nota:Esta es mi terminal,pero esto debe ser la tty,solo use la terminal para poder sacar los screenshots.

Pero top se tarda mucho y esta en constante movimiento :S

Ya que el proceso es el numero de la izquierda,y por ejemplo si se nos traba gedit, haríamos esto

top | grep gedit
Pero como dije se tarda mucho :(

Mejor usamos ps

Así que para ver el PID de un programa con esto lo hacen

ps -ef 
Y filtramos un poco

ps -ef | grep gedit


Como dije es el numero de la izquierda(el primero),y la primera linea,ya que la segunda es el mismo PID que pide el PID por eso siempre nos dará un PID distinto.

De hecho si queremos filtrarlo mas podemos usar awk

ps -ef | grep gedit | awk '{print $2}' 


O para que no se muestre el PID que pide el PID podemos añadir un parámetro al pipe para cortarlo:


ps -ef | grep -v grep | grep gedit | awk '{print $2}'


Y listo ya tenemos el PID

3.Matar el PID

Para matar ese proceso solo basta con hacer kill sobre el PID

kill PID

También podemos usar

pidof PID
Y también para mas fácil :

pkill gedit
Que?

pkill gedit ¡WTF! entonces para que tanto PID

Así es, se puede matar una aplicación de esa manera,pero yo recomiendo que lo hagan por PID ya que puede que tengan varias sesiones en distintas tty,como yo,en una Gnome SHELL,en otra AWESOME, en otra TTY,etc.


Tambien otra opcion es por si no sabemos el nombre del programa en proceso,por ejemplo,como se llama Google Chrome en un proceso?

Google-Chrome

google_chrome

Chrome

chrome

google

ect ?

Y sabremos el nombre....

¿?

Como?

Pues hacemos un filtrado básico con grep,por ejemplo si se llama chrome,podemos probar


ps -ef | grep goo

o

ps -ef | grep hrome

Y si lo matamos por nombre puede dar errores,o cerrarnos algo que no queremos

De hecho también existe


killall gedit
 xkill,etc

Y cuando hayamos eliminado ese proceso/programa regresamos a nuestro escritorio :D

Leer más...