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.


2 comentarios:

  1. :o me crees capaz de hacerte un MitM ^~^...

    Yo confiándote mi ISP <('o'<) (>‘o’)> y tu desconfiando (T^T)

    ResponderBorrar
    Respuestas
    1. Fácil

      Al rato vas a andar posteando en Tiempo de Tux y lo malo es que entre a editar el sitio desde tu ISP O_O.

      Borrar

Los comentarios serán revisados antes de ser publicados.