holap, aquí os traigo otro de mis manuales, este en concreto creo que fue uno de los últimos (sino el último) que escribí.
Este manual trata sobre como crear un túnel a través de un protocolo seguro como lo es ssh, la verdad es que me parece algo realmente interesante, ya que te permite convertir una transmisión de datos insegura en segura, ya que ssh cifra los datos que envía.
Por otra parte esta técnica también puede emplearse para hacer una redirección de puertos lo cual puede ser bastante útil en ciertas ocasiones.
El manual en si es bastante escueto, pero creo que el contenido merece la pena.
Os dejo el manual a continuación: SSH Tunneling
Saludos =)
sábado, 3 de noviembre de 2012
viernes, 2 de noviembre de 2012
¿Cómo saber quien está en mi red? PARTE 2
Buenassssss.... esta entrada es una continuación de una que publiqué hace unas semanas, os la dejo AQUI.
Bien, como mencioné en la otra entrada, a veces los paquetes ICMP pueden ser bloqueados, de manera que no podemos confirmar realmente si hay o no un dispositivo en una dirección concreta, ya que si bloquea lo paquetes ICMP no recibimos ninguna respuesta a pesar de que SI hay alguien en la dirección ip a la cual enviamos la solicitud ICMP.
Ok, aquí es donde entra en juego el protocolo ARP. Resumiendo mucho el tema: en una red de área local los ordenadores se comunican con direcciones físicas (MAC), y el protocolo ARP se encarga de hacer una asociación entre las direcciones IP y las direcciones MAC. Resumiendo del todo, si un ordenador quiere estar conectado a una red tendrá que responder a las solicitudes ARP que se le manden, así que nosotros usaremos esto para descubrir que dispositivos están conectados realmente a nuestra red.
Nota: si un ordenador bloquease los paquetes ARP no se podría conectar a la red, ya que no podría ni enviar ni recibir paquetes al no poder recibir información del protocolo ARP, lo cual nos asegura que al realizar solicitudes ARP nos responderán todos los dispositivos que están realmente en nuestra red.
perfecto, ahora ya sabemos el truco definitivo para saber quien están en nuestra red, pero.... ¿cómo lo ponemos en práctica? pues bien, podemos hacerlo de varias maneras:
La primera manera de hacerlo es haciendo un ping con nmap tal y como hacíamos en la parte 1 y a continuación mirar la tabla ARP de nuestro equipo, para mirar la tabla ARP se necesitan privilegios de root, asi que la secuencia de comandos sería así:
Nota: yo uso la red 192.168.120.0 porque es la dirección de mi red, pero cada uno deberá de usar la dirección de su propia red, si tienes configurado el router por defecto probablemente la dirección de tu red sea 192.168.1.0
nmap -sP 192.168.120.0-255
su
arp -v
Como podemos ver se muestran un montonazo de entradas en la tabla ARP, pero casi todas nos marcan que están incompletas, las que nos interesan son las que están completas, osea, las que se nos muestran con una dirección MAC, si queremos podemos ejecutar el comando de la siguiente manera para que se nos muestren solo las entradas completas:
arp -v | grep C
estas entradas son los ordenadores que están conectados a nuestra red, en mi caso se muestran dos entradas, que corresponden a la dirección 192.168.120.30 (mi router) y 192.168.120.29 (otro ordenador de mi red), como podéis observar cuando se realiza el sondeo ICMP no se muestra esta ultima dirección (192.168.120.29) ya que en este ordenador hay un firewall que bloquea los paquetes ICMP, pero en cambio cuando consultamos la tabla arp vemos que esta ahí porque SI que responde a la solicitud ARP que hace el sistema.
Nota: en el sondeo icmp sale la dirección 192.168.120.21 que es la dirección de mi propio ordenador, por eso no sale después en la tabla ARP.
La segunda manera es la mas factible, ya que solo usamos nmap, de hecho usamos nmap exactamente de la misma manera que antes, lo único que cambia es que lo haremos con permisos de root:
su
nmap -sP 192.168.120.0-255

Como podemos ver en esta ocasión también se nos muestra la dirección 192.168.120.29 que antes no se mostraba.
El tema es que nmap siempre hace un sondeo ARP, lo que pasa es que, por decirlo de alguna manera, nmap necesita permisos de root para poder acceder a la información del protocolo ARP, así que cuando lo ejecutamos sin permisos de root solo nos muestra el resultado del sondeo ICMP, pero cuando lo ejecutamos con permisos de root nos muestra también el sondeo ARP (que es mas fiable).
De todas maneras también podemos indicarle a nmap que haga un sondeo exclusivamente ARP de la siguiente manera:
nmap -PR 192.168.120.0-255
Esta opción ademas del sondeo ARP también hará un escaner de los puertos mas habituales, si queremos evadir un poco el escaner de puertos, podemos ejecutar el programa de la siguiente manera:
nmap -p 0 -PR 192.168.120.0-255
Conclusión final:
Para saber quien esta en tu red lo único que tienes que hacer es ponerte como root en un shell (usando el comando su) y después simplemente usar nmap con la opción -sP y el rango de direcciones de tu red.
Cualquier duda que tengáis dejádmela en los comentarios
Saludos =)
Bien, como mencioné en la otra entrada, a veces los paquetes ICMP pueden ser bloqueados, de manera que no podemos confirmar realmente si hay o no un dispositivo en una dirección concreta, ya que si bloquea lo paquetes ICMP no recibimos ninguna respuesta a pesar de que SI hay alguien en la dirección ip a la cual enviamos la solicitud ICMP.
Ok, aquí es donde entra en juego el protocolo ARP. Resumiendo mucho el tema: en una red de área local los ordenadores se comunican con direcciones físicas (MAC), y el protocolo ARP se encarga de hacer una asociación entre las direcciones IP y las direcciones MAC. Resumiendo del todo, si un ordenador quiere estar conectado a una red tendrá que responder a las solicitudes ARP que se le manden, así que nosotros usaremos esto para descubrir que dispositivos están conectados realmente a nuestra red.
Nota: si un ordenador bloquease los paquetes ARP no se podría conectar a la red, ya que no podría ni enviar ni recibir paquetes al no poder recibir información del protocolo ARP, lo cual nos asegura que al realizar solicitudes ARP nos responderán todos los dispositivos que están realmente en nuestra red.
perfecto, ahora ya sabemos el truco definitivo para saber quien están en nuestra red, pero.... ¿cómo lo ponemos en práctica? pues bien, podemos hacerlo de varias maneras:
La primera manera de hacerlo es haciendo un ping con nmap tal y como hacíamos en la parte 1 y a continuación mirar la tabla ARP de nuestro equipo, para mirar la tabla ARP se necesitan privilegios de root, asi que la secuencia de comandos sería así:
Nota: yo uso la red 192.168.120.0 porque es la dirección de mi red, pero cada uno deberá de usar la dirección de su propia red, si tienes configurado el router por defecto probablemente la dirección de tu red sea 192.168.1.0
nmap -sP 192.168.120.0-255
su
arp -v
Como podemos ver se muestran un montonazo de entradas en la tabla ARP, pero casi todas nos marcan que están incompletas, las que nos interesan son las que están completas, osea, las que se nos muestran con una dirección MAC, si queremos podemos ejecutar el comando de la siguiente manera para que se nos muestren solo las entradas completas:
arp -v | grep C
estas entradas son los ordenadores que están conectados a nuestra red, en mi caso se muestran dos entradas, que corresponden a la dirección 192.168.120.30 (mi router) y 192.168.120.29 (otro ordenador de mi red), como podéis observar cuando se realiza el sondeo ICMP no se muestra esta ultima dirección (192.168.120.29) ya que en este ordenador hay un firewall que bloquea los paquetes ICMP, pero en cambio cuando consultamos la tabla arp vemos que esta ahí porque SI que responde a la solicitud ARP que hace el sistema.
Nota: en el sondeo icmp sale la dirección 192.168.120.21 que es la dirección de mi propio ordenador, por eso no sale después en la tabla ARP.
La segunda manera es la mas factible, ya que solo usamos nmap, de hecho usamos nmap exactamente de la misma manera que antes, lo único que cambia es que lo haremos con permisos de root:
su
nmap -sP 192.168.120.0-255
Como podemos ver en esta ocasión también se nos muestra la dirección 192.168.120.29 que antes no se mostraba.
El tema es que nmap siempre hace un sondeo ARP, lo que pasa es que, por decirlo de alguna manera, nmap necesita permisos de root para poder acceder a la información del protocolo ARP, así que cuando lo ejecutamos sin permisos de root solo nos muestra el resultado del sondeo ICMP, pero cuando lo ejecutamos con permisos de root nos muestra también el sondeo ARP (que es mas fiable).
De todas maneras también podemos indicarle a nmap que haga un sondeo exclusivamente ARP de la siguiente manera:
nmap -PR 192.168.120.0-255
Esta opción ademas del sondeo ARP también hará un escaner de los puertos mas habituales, si queremos evadir un poco el escaner de puertos, podemos ejecutar el programa de la siguiente manera:
nmap -p 0 -PR 192.168.120.0-255
Conclusión final:
Para saber quien esta en tu red lo único que tienes que hacer es ponerte como root en un shell (usando el comando su) y después simplemente usar nmap con la opción -sP y el rango de direcciones de tu red.
Cualquier duda que tengáis dejádmela en los comentarios
Saludos =)
domingo, 28 de octubre de 2012
Instalar nemesis, resolución de errores
Hola de nuevo, hace tiempo puse una entrada acerca de ARP Spoofing, en dicha entrada hablaba de un programa llamado nemesis (un inyector de paquetes), resulta que el otro día estuve intentado instalarlo y me encontré con que hay un problema al instalar el programa en un ordenador de 64 bits, así que ,enlazando un poco con la entrada anterior, en esta entrada os enseñare a instalar nemesis y como solventar esos pequeños problemas al instalarlo en un ordenador de 64 bits.
Bien, lo primero que necesitamos es el programa en si, ademas de la librería libnet-1.0.2a, podéis descargar ambos en los siguientes enlaces:
Descargar libnet-1.0.2a
Descargar nemesis
Primero vamos a instalar la librería, así que primero la extraemos con tar:
tar xvf libnet-1.0.2a.tar.gz
Después entramos en la carpeta que se ha extraído:
cd Libnet-1.0.2a/
y ejecutamos el script configure:
./configure
compilamos:
make
y realizamos la instalación:
sudo make install
aquí es donde encontramos el primer problema, cuando intentamos instalar nos da un error el programa make, no estoy seguro pero creo que este error solo sale dependiendo de la versión del make que tengas, de todas maneras es fácil de arreglar, editamos el archivo Makefile y cambiamos la siguiente línea:
MAN_PREFIX =
dejándola así:
MAN_PREFIX = /usr/share/man/man3

esta opción solo indica en que lugar se pondrá el manual de la librería. A continuación guardamos el Makefile con los cambios realizados y volvemos a ejecutar el sudo make install.
Bien, ya tenemos instalada la librería libnet, ahora instalaremos el nemesis
Extraemos los archivos:
tar xvf nemesis-1.4.tar.gz
Entramos en la carpeta que se ha extraído:
cd nemesis-1.4/
y ejecutamos el script configure, pero en este caso si lo ejecutáis normal os dirá que falta la librería libnet, a pesar de que la acabamos de instalar, ya que el script buscará la librería en un lugar distinto al que se instala por defecto, así que tendremos que indicarle en donde están los archivos de cabecera y la librería, lo haremos de la siguiente manera:
./configure --with-libnet-includes=/usr/include/ --with-libnet-libraries=/usr/lib/
ahora debería de ejecutarse el configure sin ningún problema.
A continuación lanzaremos el programa make para compilar el programa:
make

Aquí viene un nuevo problema, el compilador da error en una línea concreta (la línea 342) de uno de los archivo de código fuente (nemesis-functions.c situado en la carpeta src), resulta que el compilador de 64 bits no acepta esa línea en concreto, por suerte no es una función importante, así que podemos comentarla para que no se ejecute, esto no afectara al rendimiento del programa.
Podemos abrir el archivo (src/nemesis-functions.c) con un editor que nos marque el número de líneas para saber exactamente cual es la linea 342, yo lo haré con vi. Una vez encontremos la linea simplemente la comentamos poniendo "//" al principio de la linea, quedado así:

Bien, ahora ya podemos ejecutar make para compilar el programa.
A continuación instalamos el programa:
sudo make install
y listo, ya tenemos nemesis instalado en nuestro equipo. Si tenéis un equipo de 32 bits no debería de daros estos errores (quizá si que os de el error al instalar libnet pero los otros no debería), así que simplemente ejecutar todos los pasos de manera normal y os debería de instalar sin problemas.
Espero os sirva, cualquier duda dejarla en comentarios
Saludos =)
Bien, lo primero que necesitamos es el programa en si, ademas de la librería libnet-1.0.2a, podéis descargar ambos en los siguientes enlaces:
Descargar libnet-1.0.2a
Descargar nemesis
Primero vamos a instalar la librería, así que primero la extraemos con tar:
tar xvf libnet-1.0.2a.tar.gz
Después entramos en la carpeta que se ha extraído:
cd Libnet-1.0.2a/
y ejecutamos el script configure:
./configure
compilamos:
make
y realizamos la instalación:
sudo make install
aquí es donde encontramos el primer problema, cuando intentamos instalar nos da un error el programa make, no estoy seguro pero creo que este error solo sale dependiendo de la versión del make que tengas, de todas maneras es fácil de arreglar, editamos el archivo Makefile y cambiamos la siguiente línea:
MAN_PREFIX =
dejándola así:
MAN_PREFIX = /usr/share/man/man3
esta opción solo indica en que lugar se pondrá el manual de la librería. A continuación guardamos el Makefile con los cambios realizados y volvemos a ejecutar el sudo make install.
Bien, ya tenemos instalada la librería libnet, ahora instalaremos el nemesis
Extraemos los archivos:
tar xvf nemesis-1.4.tar.gz
Entramos en la carpeta que se ha extraído:
cd nemesis-1.4/
y ejecutamos el script configure, pero en este caso si lo ejecutáis normal os dirá que falta la librería libnet, a pesar de que la acabamos de instalar, ya que el script buscará la librería en un lugar distinto al que se instala por defecto, así que tendremos que indicarle en donde están los archivos de cabecera y la librería, lo haremos de la siguiente manera:
./configure --with-libnet-includes=/usr/include/ --with-libnet-libraries=/usr/lib/
ahora debería de ejecutarse el configure sin ningún problema.
A continuación lanzaremos el programa make para compilar el programa:
make
Aquí viene un nuevo problema, el compilador da error en una línea concreta (la línea 342) de uno de los archivo de código fuente (nemesis-functions.c situado en la carpeta src), resulta que el compilador de 64 bits no acepta esa línea en concreto, por suerte no es una función importante, así que podemos comentarla para que no se ejecute, esto no afectara al rendimiento del programa.
Podemos abrir el archivo (src/nemesis-functions.c) con un editor que nos marque el número de líneas para saber exactamente cual es la linea 342, yo lo haré con vi. Una vez encontremos la linea simplemente la comentamos poniendo "//" al principio de la linea, quedado así:
Bien, ahora ya podemos ejecutar make para compilar el programa.
A continuación instalamos el programa:
sudo make install
y listo, ya tenemos nemesis instalado en nuestro equipo. Si tenéis un equipo de 32 bits no debería de daros estos errores (quizá si que os de el error al instalar libnet pero los otros no debería), así que simplemente ejecutar todos los pasos de manera normal y os debería de instalar sin problemas.
Espero os sirva, cualquier duda dejarla en comentarios
Saludos =)
Instalar programas desde las fuentes
Hola, hoy os enseñaré algo bastante interesante, como instalar un programa desde las fuentes en linux.
NOTA: la mayoría de programas de linux están escritos en C, así que la gran mayoría de veces que tengamos que instalar un programa desde las fuentes es casi seguro que será un programa escrito en C, por eso solo mostrare ejemplos de programas en C.
Empezaremos por algo simple, si tuviésemos un programa muy simple en el cual todo su código esta en un solo fichero sería bastante fácil instalarlo, solo tendríamos que lanzar el compilador C y posteriormente moverlo a la carpeta que quisiésemos, podríamos moverlo a /usr/bin para tenerlo siempre a mano.
Por ejemplo, si tuviésemos el siguiente programa hello.c:
para instalarlo podríamos hacerlo asi:
gcc hello.c -o hello
mv hello /usr/bin
Este es un ejemplo muy simple, en el que solo compilaríamos el único archivo de código que tiene el programa y posteriormente lo moveríamos a /usr/bin para tener acceso al programa desde cualquier directorio.
Normalmente los programas se suelen dividir en varios archivos de código fuente, ademas de que también suelen usar varias librerías de código. Para poder realizar todas las operaciones de compilación se suele usar un archivo llamado Makefile, en el cual están todas las instrucciones que se le deben pasar al compilador para poder compilar el programa de una manera ordenada.
Cuando descargamos un programa para instalarlo desde las fuentes normalmente se suele bajar un archivo con extensión ".tar.gz" esto quiere decir que el programa esta archivado y comprimido con tar y gzip, dentro de este archivo estará todo el código fuente del programa.
Lo primero que tenemos que hacer es extraer los archivos que hay dentro del archivo ".tar.gz" para ello usaremos tar (desde el shell) de la siguiente manera:
tar xvf programa.tar.gz
donde "programa.tar.gz" es el nombre completo del archivo que tengamos que extraer.
Una vez tengamos extraídos todos los archivos en muchos casos podemos encontrarnos archivos de texto plano en los cuales tenemos una serie de instrucciones para instalar el programa, es recomendable pararse un momento a leer estas instrucciones (estos archivos suelen tener nombres como README, INSTALL...etc)
Vale, en este momento ya tenemos nuestro programa con todos los archivos extraídos, ahora lo que tendríamos que hacer es ejecutar un archivo llamado configure, este archivo es un script encargado de realizar una comprobación de nuestro sistema para asegurarse de que tenemos todas las librerías y programas necesarios para llevar a cabo la compilación e instalación del programa, ademas configure se encarga de crear el archivo Makefile que he mencionado anteriormente, pero solo lo creara cuando se asegure de que tenemos todo lo necesario para realizar la instalación del programa, podemos ejecutar el script configure desde el shell usando:
./configure
Una vez ejecutado veremos en pantalla una serie de comprobaciones, tenemos que asegurarnos de que el programa finaliza la ejecución sin dar ningún error, en caso de que se nos muestre algún error tendremos que solucionarlo, configure nos indicara a que se debe el error, por lo general suelen ser errores indicando la falta de alguna librería, en este caso tendríamos que instalar dicha librería para poder continuar la instalación, una vez hayamos solucionado el error tendremos que ejecutar de nuevo configure para que nos certifique que no hay mas errores y nos cree el Makefile.
Una vez ejecutado el script configure de manera satisfactoria es hora de compilar el programa usando el Makefile, para ello haremos lo siguiente (desde el shell):
make
el programa make se encarga de buscar el archivo Makefile en nuestro directorio actual y de realizar las operaciones indicadas en el archivo. No os preocupéis si veis que la compilación dura mucho tiempo, en algunos programas un poco grandes es normal.
Una vez compilado el programa tendríamos que instalarlo, para ello lo haríamos con el siguiente comando (por lo general casi siempre se necesitan permisos de root, por eso se añade el sudo al principio):
sudo make install
Este ultimo comando no es realmente necesario, ya que el programa ya lo tenemos compilado y listo para funcionar en la carpeta en la cual lo hemos compilado, lo único que hace el comando make con el argumento install, es mover algunos archivos (como el binario ejecutable o algunos archivos de configuración) a algunas carpetas de nuestro sistema para que podamos ejecutar el programa desde cualquier sitio y no tengamos que ir estrictamente a la carpeta en la que lo compilamos.
De hecho hay algunos programas que carecen de la opción install, en este caso por lo general tendremos que cojer nosotros el binario ejecutable y moverlo manualmente a alguna carpeta como /bin o /usr/bin, que nos permitan la ejecución desde cualquier directorio del sistema
Resumiendo, lo único que necesitamos para instalar un programa desde las fuentes es:
-Extraer los archivos:
tar xvf <nombre_archivo>
-Comprobar que tenemos todo lo necesario:
./configure
-Compilar
make
-Instalar
sudo make install
Espero que os haya gustado este mini-tutorial, si tenéis alguna pregunta no dudéis en dejármela en los comentarios.
Saludos :D
NOTA: la mayoría de programas de linux están escritos en C, así que la gran mayoría de veces que tengamos que instalar un programa desde las fuentes es casi seguro que será un programa escrito en C, por eso solo mostrare ejemplos de programas en C.
Empezaremos por algo simple, si tuviésemos un programa muy simple en el cual todo su código esta en un solo fichero sería bastante fácil instalarlo, solo tendríamos que lanzar el compilador C y posteriormente moverlo a la carpeta que quisiésemos, podríamos moverlo a /usr/bin para tenerlo siempre a mano.
Por ejemplo, si tuviésemos el siguiente programa hello.c:
#include <stdio.h>
main()
{
printf("Hello world\n");
}
para instalarlo podríamos hacerlo asi:
gcc hello.c -o hello
mv hello /usr/bin
Este es un ejemplo muy simple, en el que solo compilaríamos el único archivo de código que tiene el programa y posteriormente lo moveríamos a /usr/bin para tener acceso al programa desde cualquier directorio.
Normalmente los programas se suelen dividir en varios archivos de código fuente, ademas de que también suelen usar varias librerías de código. Para poder realizar todas las operaciones de compilación se suele usar un archivo llamado Makefile, en el cual están todas las instrucciones que se le deben pasar al compilador para poder compilar el programa de una manera ordenada.
Cuando descargamos un programa para instalarlo desde las fuentes normalmente se suele bajar un archivo con extensión ".tar.gz" esto quiere decir que el programa esta archivado y comprimido con tar y gzip, dentro de este archivo estará todo el código fuente del programa.
Lo primero que tenemos que hacer es extraer los archivos que hay dentro del archivo ".tar.gz" para ello usaremos tar (desde el shell) de la siguiente manera:
tar xvf programa.tar.gz
donde "programa.tar.gz" es el nombre completo del archivo que tengamos que extraer.
Una vez tengamos extraídos todos los archivos en muchos casos podemos encontrarnos archivos de texto plano en los cuales tenemos una serie de instrucciones para instalar el programa, es recomendable pararse un momento a leer estas instrucciones (estos archivos suelen tener nombres como README, INSTALL...etc)
Vale, en este momento ya tenemos nuestro programa con todos los archivos extraídos, ahora lo que tendríamos que hacer es ejecutar un archivo llamado configure, este archivo es un script encargado de realizar una comprobación de nuestro sistema para asegurarse de que tenemos todas las librerías y programas necesarios para llevar a cabo la compilación e instalación del programa, ademas configure se encarga de crear el archivo Makefile que he mencionado anteriormente, pero solo lo creara cuando se asegure de que tenemos todo lo necesario para realizar la instalación del programa, podemos ejecutar el script configure desde el shell usando:
./configure
Una vez ejecutado veremos en pantalla una serie de comprobaciones, tenemos que asegurarnos de que el programa finaliza la ejecución sin dar ningún error, en caso de que se nos muestre algún error tendremos que solucionarlo, configure nos indicara a que se debe el error, por lo general suelen ser errores indicando la falta de alguna librería, en este caso tendríamos que instalar dicha librería para poder continuar la instalación, una vez hayamos solucionado el error tendremos que ejecutar de nuevo configure para que nos certifique que no hay mas errores y nos cree el Makefile.
Una vez ejecutado el script configure de manera satisfactoria es hora de compilar el programa usando el Makefile, para ello haremos lo siguiente (desde el shell):
make
el programa make se encarga de buscar el archivo Makefile en nuestro directorio actual y de realizar las operaciones indicadas en el archivo. No os preocupéis si veis que la compilación dura mucho tiempo, en algunos programas un poco grandes es normal.
Una vez compilado el programa tendríamos que instalarlo, para ello lo haríamos con el siguiente comando (por lo general casi siempre se necesitan permisos de root, por eso se añade el sudo al principio):
sudo make install
Este ultimo comando no es realmente necesario, ya que el programa ya lo tenemos compilado y listo para funcionar en la carpeta en la cual lo hemos compilado, lo único que hace el comando make con el argumento install, es mover algunos archivos (como el binario ejecutable o algunos archivos de configuración) a algunas carpetas de nuestro sistema para que podamos ejecutar el programa desde cualquier sitio y no tengamos que ir estrictamente a la carpeta en la que lo compilamos.
De hecho hay algunos programas que carecen de la opción install, en este caso por lo general tendremos que cojer nosotros el binario ejecutable y moverlo manualmente a alguna carpeta como /bin o /usr/bin, que nos permitan la ejecución desde cualquier directorio del sistema
Resumiendo, lo único que necesitamos para instalar un programa desde las fuentes es:
-Extraer los archivos:
tar xvf <nombre_archivo>
-Comprobar que tenemos todo lo necesario:
./configure
-Compilar
make
-Instalar
sudo make install
Espero que os haya gustado este mini-tutorial, si tenéis alguna pregunta no dudéis en dejármela en los comentarios.
Saludos :D
sábado, 27 de octubre de 2012
Wikeando
Hola a todos, hoy traigo buenas y malas noticias... empecemos por lo bueno.
Mis compañeros de clase y yo hemos decidido empezar un wiki para poder documentar todo lo que podamos relacionado con la informática, es un proyecto que realmente me entusiasma, os dejo la dirección del wiki: http://leliadouratic.sytes.net
Bien, ahora viene la parte mala, el wiki me esta comiendo mucho, mucho, muuuuuuuucho tiempo, llevo toda la semana a tope con el wiki, lo cual me ha impedido hacer muchas cosas, entre ellas publicar aquí en el blog... esta semana tenía pensado publicar un par de entradas en el blog durante la semana y quizá otro par de entradas durante el fin de semana, pero estamos a sabado y todavía no he publicado nada (esta entrada no cuenta...), así que ni siquiera sé si podré llegar a ese mínimo de dos entradas que me había propuesto.
Lo que mas me fastidia es que tengo muchas ideas para publicar entradas aquí en el blog, pero literalmente me quedo sin tiempo físico para poder hacerlo, de hecho he tenido que empezar a apuntar las entradas que quiero hacer en el blog, porque sino se me olvidan xD.
y por otra parte tampoco estoy muy satisfecho con el rendimiento que he llevado en el wiki, a pesar de que he estado toda la semana con el wiki, apenas he podido publicar unas 8 entradas, lo cual esta bastante por debajo de las expectativas que tenía en un principio, creo que podría haber publicado casi el doble de contenido pero bueno...
El tema es que no quiero dejar de lado ninguno de los dos proyectos, ni el blog ni el wiki, así que no se como lo haré, pero tendré que optimizar mas mi tiempo para poder llevarlo todo de manera mas regular.
y hasta aquí todo por ahora, espero poder publicar algo por aquí esta tarde =)
Saludos.
Mis compañeros de clase y yo hemos decidido empezar un wiki para poder documentar todo lo que podamos relacionado con la informática, es un proyecto que realmente me entusiasma, os dejo la dirección del wiki: http://leliadouratic.sytes.net
Bien, ahora viene la parte mala, el wiki me esta comiendo mucho, mucho, muuuuuuuucho tiempo, llevo toda la semana a tope con el wiki, lo cual me ha impedido hacer muchas cosas, entre ellas publicar aquí en el blog... esta semana tenía pensado publicar un par de entradas en el blog durante la semana y quizá otro par de entradas durante el fin de semana, pero estamos a sabado y todavía no he publicado nada (esta entrada no cuenta...), así que ni siquiera sé si podré llegar a ese mínimo de dos entradas que me había propuesto.
Lo que mas me fastidia es que tengo muchas ideas para publicar entradas aquí en el blog, pero literalmente me quedo sin tiempo físico para poder hacerlo, de hecho he tenido que empezar a apuntar las entradas que quiero hacer en el blog, porque sino se me olvidan xD.
y por otra parte tampoco estoy muy satisfecho con el rendimiento que he llevado en el wiki, a pesar de que he estado toda la semana con el wiki, apenas he podido publicar unas 8 entradas, lo cual esta bastante por debajo de las expectativas que tenía en un principio, creo que podría haber publicado casi el doble de contenido pero bueno...
El tema es que no quiero dejar de lado ninguno de los dos proyectos, ni el blog ni el wiki, así que no se como lo haré, pero tendré que optimizar mas mi tiempo para poder llevarlo todo de manera mas regular.
y hasta aquí todo por ahora, espero poder publicar algo por aquí esta tarde =)
Saludos.
domingo, 21 de octubre de 2012
[Script] Buscador de texto en archivos
Buenas, hoy os traigo algo que tenía ganas de hacer hace mucho tiempo, se trata de un programa (bueno, en este caso es un script) cuya función es buscar cadenas de caracteres (ya sean letras o palabras) dentro de varios archivos de texto plano.
Resumiendo, tu le das dos argumentos al script, la carpeta en la que quieres buscar y la cadena de caracteres que quieres buscar, y el programa se encarga de buscar dicha cadena de caracteres dentro de todos los archivos que hay en la carpeta que le has indicado.
Esta idea me surgió hace muchísimo tiempo, cuando me pasaba en varias ocasiones que tenía una serie de archivos (por lo general eran archivos de código fuente) y no recordaba en que archivo en concreto estaba la información que buscaba, lo cual me obligaba a abrir todos los archivos y realizar una búsqueda individual en cada uno de ellos.
En realidad la idea original la tenia pensado realizar en C, pero por unas cosas y otras, nunca llegué a realizarla. Este script hace uso de 4 programas: cat, wc, grep y test. Los 4 vienen por defecto en todos los linux, así que no tendréis que instalar nada adicional.
Bueno, hablemos de problemas. El script tiene un par de problemas, el primero es el tiempo de ejecución, si en la carpeta que indicáis solo hay archivos de texto plano pues no hay mucho problema, el script debería de ejecutarse en un par de segundos, pero si la carpeta contiene otros archivos de gran tamaño ademas de los de texto plano pues la ejecución puede ser bastante larga, lo he probado con una carpeta que contenía algunos archivos de varios GiB y ha tardado varios minutos en ejecutarse, pero bueno, en condiciones normales con archivos no muy pesados no debería de presentar problemas. El segundo problema es que el programa no es recursivo, esto quiere decir que si dentro de la carpeta que indicáis para la búsqueda existe otra carpeta pues el script no entrara en esta nueva carpeta, solo examinara la carpeta que le habéis indicado.
Si algún día llego a realizar la versión en C del programa, probablemente pueda solucionar estos problemas.
A continuación os dejo el código del script:
Para guardar el script lo guardáis como un archivo de texto plano y le dais permisos de ejecución, después si queréis, podéis ponerlo en la carpeta /usr/bin/ para poder ejecutarlo desde cualquiera carpeta aunque el script no esté en ella.
Bien, el script toma dos parámetros que son de uso obligado, el primer parámetro es la carpeta donde queréis realizar la búsqueda, y el segundo parámetro es la cadena de caracteres a buscar. De manera que un ejemplo podria ser el siguiente (yo le he llamado bsc al script, pero podéis llamarle como queráis):
./bsc Documentos/ valencia
con este comando el script buscaria en la carpeta "Documentos" todos los archivos que contengan la palabra "valencia"
ACLARACIÓN: si tenéis el script en /usr/bin/ no hace falta poner el "./" inicial para ejecutar el script, ademas el script acepta rutas relativas a vuestra posición actual en el shell, osea que en el caso anterior puedo poner simplemente como carpeta "Documentos" en vez de /home/usuario/Documentos/ ya que en ese momento me encuentro en la carpeta usuario.
La salida que produce el script tiene el siguiente formato: cada archivo en el que encuentra una coincidencia lo muestra entre una serie de lineas salteadas como esta "----------------", después la primera linea que muestra es el nombre del archivo, y las lineas siguientes son las lineas del archivo en las que hay coincidencia, mostrando al comienzo de la linea el numero de linea en la que se encuentra.
Ejemplo:
Como podemos ver en este ejemplo, le hemos dicho al programa que busque en los archivos de la carpeta "test" la cadena "prueba" y en este caso se nos muestra un único resultado, el cual ha sido encontrado en el archivo "texto1.txt" y podemos ver que la linea en la que se ha encontrado la cadena es la linea numero 3 y a continuación se nos muestra la linea en cuestión.
ALGUNOS EJEMPLOS INTERESANTES
Cuando terminé el script no tenia necesidad de buscar nada en concreto, pero como tenía que probarlo pues decidí hacer algunas búsquedas en los archivos de configuración del sistema y me salieron algunos resultados interesantes, como por ejemplo los siguientes:
bsc /etc/ runlevel
Al buscar "runlevel" en los archivos de la carpeta "/etc/" se muestra en una de las coincidencias que funcionalidades están activas en cada uno de los niveles de ejecución, por ejemplo se nos indica que en el nivel 5 esta activada la red y la interfaz gráfica, y en el nivel 3 por ejemplo no esta la interfaz gráfica pero si la red.

otro ejemplo:
bsc /etc/sysconfig/ autologin
En este caso se nos indica una de las opciones del archivo "displaymanager" que indica si el sistema esta configurado para iniciar el sistema de manera automática con un usuario concreto, en mi caso esta opción la tengo vacía, así que no se hace ningún autologin.
Bueno y creo que eso es todo, si tenéis alguna duda o pregunta no dudéis en dejármela en los comentarios.
Saludos =)
Resumiendo, tu le das dos argumentos al script, la carpeta en la que quieres buscar y la cadena de caracteres que quieres buscar, y el programa se encarga de buscar dicha cadena de caracteres dentro de todos los archivos que hay en la carpeta que le has indicado.
Esta idea me surgió hace muchísimo tiempo, cuando me pasaba en varias ocasiones que tenía una serie de archivos (por lo general eran archivos de código fuente) y no recordaba en que archivo en concreto estaba la información que buscaba, lo cual me obligaba a abrir todos los archivos y realizar una búsqueda individual en cada uno de ellos.
En realidad la idea original la tenia pensado realizar en C, pero por unas cosas y otras, nunca llegué a realizarla. Este script hace uso de 4 programas: cat, wc, grep y test. Los 4 vienen por defecto en todos los linux, así que no tendréis que instalar nada adicional.
Bueno, hablemos de problemas. El script tiene un par de problemas, el primero es el tiempo de ejecución, si en la carpeta que indicáis solo hay archivos de texto plano pues no hay mucho problema, el script debería de ejecutarse en un par de segundos, pero si la carpeta contiene otros archivos de gran tamaño ademas de los de texto plano pues la ejecución puede ser bastante larga, lo he probado con una carpeta que contenía algunos archivos de varios GiB y ha tardado varios minutos en ejecutarse, pero bueno, en condiciones normales con archivos no muy pesados no debería de presentar problemas. El segundo problema es que el programa no es recursivo, esto quiere decir que si dentro de la carpeta que indicáis para la búsqueda existe otra carpeta pues el script no entrara en esta nueva carpeta, solo examinara la carpeta que le habéis indicado.
Si algún día llego a realizar la versión en C del programa, probablemente pueda solucionar estos problemas.
A continuación os dejo el código del script:
#!/bin/bash
if test -z $2
then
echo
echo "ERROR !!! Faltan argumentos."
echo
echo "Modo de uso: $0 <Directorio> <Cadena de caracteres a buscar>"
echo
else
max=`ls $1 | wc -l`
for ((i=1; i<=$max; i++))
do
cat "$1/`ls $1 | head -n $i | tail -n 1`" 2> /dev/null\
| grep -n -i $2 > /dev/null
if test $? -eq 0
then
echo
echo ----------------
echo
ls $1 | head -n $i | tail -n 1
echo
cat "$1/`ls $1 | head -n $i | tail -n 1`" 2> /dev/null\
| grep -n -i $2
fi
done
fi
echo
echo ----------------
echo
Para guardar el script lo guardáis como un archivo de texto plano y le dais permisos de ejecución, después si queréis, podéis ponerlo en la carpeta /usr/bin/ para poder ejecutarlo desde cualquiera carpeta aunque el script no esté en ella.
Bien, el script toma dos parámetros que son de uso obligado, el primer parámetro es la carpeta donde queréis realizar la búsqueda, y el segundo parámetro es la cadena de caracteres a buscar. De manera que un ejemplo podria ser el siguiente (yo le he llamado bsc al script, pero podéis llamarle como queráis):
./bsc Documentos/ valencia
con este comando el script buscaria en la carpeta "Documentos" todos los archivos que contengan la palabra "valencia"
ACLARACIÓN: si tenéis el script en /usr/bin/ no hace falta poner el "./" inicial para ejecutar el script, ademas el script acepta rutas relativas a vuestra posición actual en el shell, osea que en el caso anterior puedo poner simplemente como carpeta "Documentos" en vez de /home/usuario/Documentos/ ya que en ese momento me encuentro en la carpeta usuario.
La salida que produce el script tiene el siguiente formato: cada archivo en el que encuentra una coincidencia lo muestra entre una serie de lineas salteadas como esta "----------------", después la primera linea que muestra es el nombre del archivo, y las lineas siguientes son las lineas del archivo en las que hay coincidencia, mostrando al comienzo de la linea el numero de linea en la que se encuentra.
Ejemplo:
Como podemos ver en este ejemplo, le hemos dicho al programa que busque en los archivos de la carpeta "test" la cadena "prueba" y en este caso se nos muestra un único resultado, el cual ha sido encontrado en el archivo "texto1.txt" y podemos ver que la linea en la que se ha encontrado la cadena es la linea numero 3 y a continuación se nos muestra la linea en cuestión.
ALGUNOS EJEMPLOS INTERESANTES
Cuando terminé el script no tenia necesidad de buscar nada en concreto, pero como tenía que probarlo pues decidí hacer algunas búsquedas en los archivos de configuración del sistema y me salieron algunos resultados interesantes, como por ejemplo los siguientes:
bsc /etc/ runlevel
Al buscar "runlevel" en los archivos de la carpeta "/etc/" se muestra en una de las coincidencias que funcionalidades están activas en cada uno de los niveles de ejecución, por ejemplo se nos indica que en el nivel 5 esta activada la red y la interfaz gráfica, y en el nivel 3 por ejemplo no esta la interfaz gráfica pero si la red.
otro ejemplo:
bsc /etc/sysconfig/ autologin
En este caso se nos indica una de las opciones del archivo "displaymanager" que indica si el sistema esta configurado para iniciar el sistema de manera automática con un usuario concreto, en mi caso esta opción la tengo vacía, así que no se hace ningún autologin.
Bueno y creo que eso es todo, si tenéis alguna duda o pregunta no dudéis en dejármela en los comentarios.
Saludos =)
sábado, 20 de octubre de 2012
Saber que servicios se están ejecutando en linux
Hola, hoy os enseñaré como comprobar que servicios tenéis en ejecución en vuestro linux.
NOTA: lo que voy a exponer a continuación no funciona en ubuntu ni debian, ya que no permiten mirar el estado de los servicios. Lo he probado personalmente en openSuSE y funciona, y también debería de funcionar en otras distros como Fedora o Mandriva
Primero, si queréis ver una lista de los servicios que hay en vuestro sistema podéis verla con el siguiente comando (debemos ejecutarlo como root):
chkconfig -l
Usando este comando obtendremos un resultado como el siguiente:
bien, aquí podemos ver a la izquierda el nombre del servicio y a la derecha podemos ver una serie de datos que indican un numero y a su derecha "on" o "off", NO OS DEJÉIS ENGAÑAR, esto no es el estado actual del servicio, lo que nos indica es el estado que tendrá el servicio al iniciar un determinado nivel de ejecución del sistema, por ejemplo "SuSEfirewall2_init" estará activo cuando se inicie el nivel de ejecución 3 o 5, pero si yo mas tarde decido desactivar el servicio manualmente (aun estando en nivel de ejecución 3 o 5) y ejecuto el chkconfig -l , me seguirá apareciendo como "on" a pesar de que realmente el servicio esta desactivado. Hay que tener cuidado con esto ya que puede inducir a error y pensar que tenemos un servicio activado o desactivado cuando realmente no es así.
Para mirar el estado real de un servicio lo que tenemos que hacer es irnos a la carpeta /etc/init.d/ dentro de esta carpeta nos aparecerán distintos archivos, los cuales muchos de ellos hacen referencia a servicios, si queremos por ejemplo ver el estado del servicio "SuSEfirewall2_init" tendríamos que ejecutar dicho archivo con el argumento "status" tal que así (una vez mas tenemos que hacerlo como root):
./SuSEfirewall2_init status
como podemos ver en la imagen en mi caso se muestra que el servicio esta ejecutándose.
Vale, ahora ya sabemos como poder ver en que estado están los servicios, pero el problema viene cuando queremos echar un vistazo a todos los servicios, en tal caso tendríamos que ir ejecutando uno por uno todos los archivos con el argumento "status" para poder ver el estado, lo cual es algo engorroso... Así que he creado un script que automatizara esta tarea y nos mostrara el estado de todos los servicios.
A continuación os dejo el código del script:
Para ejecutarlo simplemente coger el código, lo guardáis en un archivo de texto plano y le dais permisos de ejecución (yo le he llamado services al archivo, pero podeis llamarle como querais):
después para ejecutarlo tenéis que hacerlo de nuevo como root, y se os mostraran todos los servicios con su respectivo estado:

En mi caso por ejemplo podemos ver como tengo el firewall activo (servicios "SuSEfirewall2_init" y "SuSEfirewall2_setup") y también por ejemplo tengo el ssh (servicio sshd) desactivado.
En caso de que queráis activar o desactivar los servicios lo único que tenéis que hacer es ir de nuevo a la carpeta /etc/init.d/ y en vez de usar el argumento "status" al ejecutar los archivos, tenéis que usar "start" para activarlo o "stop" para desactivarlo.
Saludos :)
NOTA: lo que voy a exponer a continuación no funciona en ubuntu ni debian, ya que no permiten mirar el estado de los servicios. Lo he probado personalmente en openSuSE y funciona, y también debería de funcionar en otras distros como Fedora o Mandriva
Primero, si queréis ver una lista de los servicios que hay en vuestro sistema podéis verla con el siguiente comando (debemos ejecutarlo como root):
chkconfig -l
Usando este comando obtendremos un resultado como el siguiente:
bien, aquí podemos ver a la izquierda el nombre del servicio y a la derecha podemos ver una serie de datos que indican un numero y a su derecha "on" o "off", NO OS DEJÉIS ENGAÑAR, esto no es el estado actual del servicio, lo que nos indica es el estado que tendrá el servicio al iniciar un determinado nivel de ejecución del sistema, por ejemplo "SuSEfirewall2_init" estará activo cuando se inicie el nivel de ejecución 3 o 5, pero si yo mas tarde decido desactivar el servicio manualmente (aun estando en nivel de ejecución 3 o 5) y ejecuto el chkconfig -l , me seguirá apareciendo como "on" a pesar de que realmente el servicio esta desactivado. Hay que tener cuidado con esto ya que puede inducir a error y pensar que tenemos un servicio activado o desactivado cuando realmente no es así.
Para mirar el estado real de un servicio lo que tenemos que hacer es irnos a la carpeta /etc/init.d/ dentro de esta carpeta nos aparecerán distintos archivos, los cuales muchos de ellos hacen referencia a servicios, si queremos por ejemplo ver el estado del servicio "SuSEfirewall2_init" tendríamos que ejecutar dicho archivo con el argumento "status" tal que así (una vez mas tenemos que hacerlo como root):
./SuSEfirewall2_init status
como podemos ver en la imagen en mi caso se muestra que el servicio esta ejecutándose.
Vale, ahora ya sabemos como poder ver en que estado están los servicios, pero el problema viene cuando queremos echar un vistazo a todos los servicios, en tal caso tendríamos que ir ejecutando uno por uno todos los archivos con el argumento "status" para poder ver el estado, lo cual es algo engorroso... Así que he creado un script que automatizara esta tarea y nos mostrara el estado de todos los servicios.
A continuación os dejo el código del script:
#!/bin/bash
DIR=/etc/init.d/
max=`ls $DIR | wc -l`
for (( i=1; $max >= i; i++))
do
if test $i -eq `ls $DIR | grep -n halt | cut -f 1 -d ":" | head -n 1`\
-o $i -eq `ls $DIR | grep -n reboot | cut -f 1 -d ":" | head -n 1`
then
:
else
echo "------------------------------"
echo
echo "`ls $DIR | head -n $i | tail -n 1`"
echo
cd $DIR
./`ls $DIR | head -n $i | tail -n 1` status
echo
fi
done
Para ejecutarlo simplemente coger el código, lo guardáis en un archivo de texto plano y le dais permisos de ejecución (yo le he llamado services al archivo, pero podeis llamarle como querais):
después para ejecutarlo tenéis que hacerlo de nuevo como root, y se os mostraran todos los servicios con su respectivo estado:
En mi caso por ejemplo podemos ver como tengo el firewall activo (servicios "SuSEfirewall2_init" y "SuSEfirewall2_setup") y también por ejemplo tengo el ssh (servicio sshd) desactivado.
En caso de que queráis activar o desactivar los servicios lo único que tenéis que hacer es ir de nuevo a la carpeta /etc/init.d/ y en vez de usar el argumento "status" al ejecutar los archivos, tenéis que usar "start" para activarlo o "stop" para desactivarlo.
Saludos :)
Suscribirse a:
Entradas (Atom)