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

Bash: Control de errores y debug

Recientemente hablamos acerca de las diferencias de usar /bin/bash o /usr/bin/env bash. No suele ser algo muy habitual, pero puede resultar de gran ayuda.
Hoy vamos a ver otro de esos pequeños trucos de bash, pero que puede resultar de gran ayuda. Estamos hablando del control de errores y de habilitar el modo debug.
Como suele ser habitual es los script en bash, tras inicializar el entorno, se suele poner el comando 'set -e', abreviatura de 'set -o errexit'.
#!/usr/bin/env bash
set -e

# Código bash a ejecutar...
En caso de que durante la ejecución del script aparezca algún error, inmediatamente detendrá la ejecución del script.

El método antes comentando suele ser útil para scripts de producción, donde se presupone que no van a existir errores y por lo tanto no es necesario saber exactamente lo que pasa. Sin embargo, cuando estamos escribiendo código, sí puede resultar muy útil tener habilitado el modo debug. Para eso, 'set -x' es la solución.
#!/usr/bin/env bash
set -x

# Código bash a ejecutar...

Nota: 'set -x' en el script es lo mismo que 'bash -x tu_script'.
Leer más

Backups incrementales con tar

Sí, es cierto, hacía tiempo que no escribía nada en el blog y eso no puede ser. Después de un tiempo de parón, espero volver a ser más constante en las entradas.
En este caso, vamos a ver un método de hacer un backup incremental, pero sin ningún software adicional, sino empleando el comando tar.
La importancia de realizar backups no hace falta que la comente, pues es un tema muy sabido por todos. El método típico de hacer backup con tar, es comprimir todos los ficheros que así desees en un contenedor y darle un nombre, por ejemplo, una fecha. Si todos los finales de día lo hacemos, tenemos un backup bastante consistente y ante posibles fallos. El único problema, que ocupará mucho espacio! Para resolver este problema está el backup incremental y tar, como no podía ser de otra manera, también lo soporta. A continuación, dejo un ejemplo de cómo se debería de emplear tar para la realización de un backup incremental.
  • Crear el entorno de pruebas
    shell> mkdir -p test/aa test/bb test/cc
    shell> touch test/aa/a test/bb/b test/cc/c
    
  • Realizar el primer backup
    Importante aquí, la opción que le pasamos --listed-incremental file.
    shell> tar --listed-incremental test.metadata \
               -czf test.tar.gz test
    
  • Borrar y cambiar ficheros
    shell> rm test/aa/a
    shell> touch test/aa/aa
    shell> echo "hola" > test/bb/b
    
  • Volver a lanzar el backup incremental
    Cada incremental lo vamos añadiendo a un nuevo contenedor.
    shell> tar --listed-incremental test.metadata \
               -czf test.inc1.tar.gz test
    
  • Restaurar ficheros
    Para ello, necesitamos el fichero de backup completo y también los incrementales
    shell> mkdir restore
    shell> tar xzf test.tar.gz -C restore
    shell> tar --incremental \
               -xzf test.inc1.tar.gz -C restore
    
Como podemos apreciar que ha añadido el fichero creado pero también borrado el fichero eliminado en el momento de hacer el incremental. Espero que os haya resultado útil.
Como ya sabréis, realizar backups al mismo disco no es una buena idea, por lo que si no lo conoces, te recomiendo la lectura del tag bacula, que quizás te ayude a tener un backup más seguro.
Leer más

Limitando ancho de banda con wondershaper

Hace tiempo hablamos en este blog sobre trickle, una herramienta que servía para controlar el ancho de banda que se consume. O dicho de otra forma, limitar la velocidad de subida o descarga de un equipo.
Lo bueno de GNU/Linux es su heterogeneidad, y hoy voy a comentar sobre wondershaper, un pequeño script (si bash script) que sirve para lo mismo, limitar el ancho de banda. Internamente wondershaper emplea la herramienta tc, que se comunica directamente con el kernel para gestionar el tráfico de red. La idea de emplear este tipo de herramientas es poder priorizar el tráfico en una red de equipos, dejando máxima prioridad para conexiones SSH y navegación web, por ejemplo, y bajando prioridad a  las descargas. Esto justamente es lo que se consigue con herramientas de control de tráfico (tc).
wondershaper lo que hace es abstraer la complejidad de tc y dejar un simple script para controlar el límite de ancho de banda de entrada y salida a un equipo por una interfaz. Así que vamos a ver un poco esta herramienta.

Instalación

wondershaper está disponible desde los repositorios oficiales,
shell> apt-get install wondershaper

Uso

El uso básico, donde nos muestra si hay algo activo y qué hace es únicamente pasándole el interfaz de red a controlar.
shell> wondershaper eth0.3

Limitar ancho de banda

Para limitar el ancho de bando que un interfaz de red puede consumir,
shell> wondershaper eth0.3 40 10
Donde pasamos el interfaz a controlar, el velocidad de descarga (40 kbps) y la velocidad de subida (10 kbps).

Comprobar limitaciones activas

shell> wondershaper eth0.3
qdisc cbq 1: root refcnt 2 rate 10000Kbit (bounded,isolated) prio no-transmit
 Sent 2020 bytes 12 pkt (dropped 0, overlimits 4 requeues 0) 
 backlog 0b 3p requeues 0 
  borrowed 0 overactions 0 avgidle 12500 undertime 0
qdisc sfq 10: parent 1:10 limit 127p quantum 1514b depth 127 divisor 1024 perturb 10sec 
 Sent 1170 bytes 11 pkt (dropped 0, overlimits 0 requeues 0) 
 backlog 234b 3p requeues 0 
...

Borrar limitaciones

shell> wondershaper clear eth0.3
Wondershaper queues have been cleared.
Una herramienta en esencia sencilla, pero que simplifica la creación de limitaciones de forma muy eficaz.
Leer más

Portapapeles de consola

xclip es uno de esos comandos que pueden ayudarnos en el trabajo diario si eres un fanático de la consola. Aunque existen más formas de copiar desde la consola, xclip nos ofrece una forma muy sencilla de hacerlo y así poder compartir datos entre la consola y el portapapeles del interfaz gráfico.

Instalación

xclip está disponible desde los repositorios de las principales distribuciones. Por lo tanto, para instalarlo,
shell> apt-get install xclip

Ejemplos de uso

  • Salida de comando a clipboard
    La salida de cualquier comando la puedes enviar al portapapeles usando simplemente un pipe ( | ), por ejemplo,
    shell> cat /etc/fstab | xclip
    
  • Fichero a portapapeles
    xclip también permite mandar al portapapeles el contenido de un fichero completo, no únicamente la salida de un comando.
    shell> xclip /etc/fstab
    
  • Copiando del portapapeles a la consola
    Y como no podía ser de otra forma, también es posible pegar en la consola lo que previamente se ha copiado.
    shell> xclip -o
    
    Y como en Linux las redirecciones siempre están ahí, si nos interesa guardar el contenido en un fichero, simplemente,
    shell> xclip -o > /tmp/fstab
    
Leer más

Búsqueda de archivos en GNU/Linux

Fijo que en muchas ocasiones te tocó buscar un archivo en un sistema GNU/Linux. Pues bien, hoy te dejo aquí una pequeña chuleta con los comandos que deberías saber, según velocidad y sensibilidad que desees para poder encontrarlos.
  • whereis
    El mejor buscando ejecutables dentro del sistema. No busca por nombre exacto, sino el comando o binario que le pasas, así como la documentación (páginas man), o el código fuente del mismo.
    shell> whereis ls
       ls: /bin/ls /usr/share/man/man1/ls.1.gz
    
  • type
    No es exactamente el buscador de comandos o ficheros, pero nos sirve, para entre otras cosas saber el comando que vamos a ejecutar, por ejemplo, si tenemos definido un alias para él.
    shell> type ls
       ls es un alias de `ls --color=auto'
    shell> type -a ls
       ls es un alias de `ls --color=auto'
       ls is /bin/ls
    
  • which
    Busca el binario dentro de la ruta del path. Si lo encuentra, devuelve la dirección completa.
    Aunque su utilidad puede estar en entredicho, puede sacarte de más de un apuro si tienes el mismo comando en diferentes localizaciones y no sabes cual ejecutar. Con él podrás pasar el path completo y ejecutar el que quieras.
    shell> which ls
       /bin/ls
    
  • locate
    Es una verdadera alternativa al último comando que veremos, el incombustible find, pero con la ventaja de que éste tiene previamente indexados los ficheros existentes, por lo que la búsqueda es mucho más rápida. Tras la instalación indexa los datos que hay, pero cada cierto tiempo es necesario realizar una actualización de su base de datos (comando updatedb) para que tenga indexados los nuevos ficheros.
    shell> locate fstab
       /etc/fstab
       /etc/fstab.d
       /lib/init/fstab
       /sbin/fstab-decode
       /usr/lib/udisks/udisks-helper-fstab-mounter
       /usr/share/doc/mount/examples/fstab
       /usr/share/doc/util-linux/examples/fstab.example2
       /usr/share/man/man5/fstab.5.gz
       /usr/share/man/man8/fstab-decode.8.gz
       /usr/share/vim/vim74/syntax/fstab.vim
    
  • find
    El mítico comando de búsqueda de Linux. Sobre él hay miles de páginas acerca de cómo se usa y todas las opciones que tiene. Realiza una búsqueda en todo el path pasado como parámetro y puede realizar filtros de casi todo tipo (permisos, propietarios, fechas, etc.). Saber usarlo cuesta, pero una vez aprendido compensa.
    shell> find /usr/share/doc/ -name fstab*
       /usr/share/doc/mount/examples/fstab
       /usr/share/doc/util-linux/examples/fstab.example2
    
Leer más

Monitorizar señal WiFi

wavemon es una utilidad cuyo propósito es mostrar en tiempo real la calidad y la potencia de la señal WiFi a la que estamos conectados, así como una serie de estadísticas como el volumen de datos recibidos/enviados o la dirección MAC del dispositivo y otros muchos detalles.
Además, una de las cosas que más me gustan de este software es que es capaz de mostrar en una gráfica la calidad de señal a la que estás conectado, simplificándote así el mejor lugar dónde poner el punto de acceso para mejorar la comunicación, por ejemplo, en tu casa.

Instalación

wavemon está disponible en la mayoría de distribuciones, por lo que la instalación es sencilla,
shell> apt-get install wavemon

Ejecución

shell> wavemon -i wlan0
Tras ejecutar el comando en la consola, saldrá una ventana similar a la que se muestra a continuación. En ella hay 5 partes claramente diferenciadas.
  • Interface
    Indica el interfaz de red sobre el que estamos ejecutando el comando.
    Generalmente wlan0 para sistemas Linux.
  • Levels
    Indica la calidad y potencia del enlace1.
  • Statistics
    Muestra las estadísticas del enlace: paquetes enviados, recibidos, erróneos, etc.
  • Info
    Información acerca de la conexión (modo, MAC del AP, etc.).
  • Network
    Detalles de la tarjeta de red empleada (MAC e IP).

Todo el código del proyecto se almacena en github: wavemon

1 Cuanto mayor es el número negativo, mejor señal del enlace.
Leer más

Capturar tráfico HTTP

Aunque cualquier sniffer actual puede capturar el tráfico HTTP sin problemas, quizás el gran problema es que captura más cosas de las que suelen interesar. Aunque efectivamente existen filtros para que recoja únicamente lo que interesa, quizás opciones como tcpdumpwireshark sean más complejas que httpry, un software que únicamente sirve para capturar todo el tráfico HTTP, pero de forma muy organizada. Apoyándose en libpcap, misma librería que tcpdump, trae ya por defecto todos los códigos y protocolos del tráfico web, por lo que configurarlo resulta mucho más sencillo. Vamos a ver cómo funciona.

Instalación de httpry

httpry está disponible en las principales distribuciones GNU/Linux, por lo tanto para sistemas Debian y derivados...
shell> apt-get install httpry
Y para sistemas Red Hat y familiares,
shell> yum install httpry

Uso básico

Tras finalizar la instalación, la cual es realmente sencilla, ya podemos ponernos a jugar con la nueva herramienta. Lo único que necesitamos es indicarle sobre qué interfaz de red queremos que trabaje capturando el tráfico.
shell> httpry -i eth0
httpry version 0.1.7 -- HTTP logging and information retrieval tool
Copyright (c) 2005-2012 Jason Bittel jason.bittel@gmail.com
----------------------------
Hash buckets:       64
Nodes inserted:     10
Buckets in use:     10
Hash collisions:    0
Longest hash chain: 1
----------------------------
Starting capture on eth0 interface
2014-08-16 16:14:35   108.160.167.160  192.168.0.15    <  -    -  -  HTTP/1.1  200  OK
2014-08-16 16:14:35   192.168.0.15     108.160.167.160 >  GET  notify10.dropbox.com   /subscribe?host_int=
2014-08-16 16:14:48   192.168.0.15     173.194.41.250  >  GET  pagead2.googlesyndication.com... -
2014-08-16 16:14:48   173.194.41.250   192.168.0.15    <  -    -  -  HTTP/1.1  200  OK
2014-08-16 16:14:48   173.194.41.250   192.168.0.15    <  -    -  -  HTTP/1.1  200  OK
2014-08-16 16:15:03   192.168.0.15     173.194.34.252  >  GET  ad.doubleclick.net...
2014-08-16 16:15:03   173.194.34.252   192.168.0.15    <  -    -  -  HTTP/1.1  200  OK
...
Como se puede observar, desde el momento del arranque ya comienza a capturar tráfico HTTP y aparecen todas las peticiones que se hacen, así como el método que se emplea. Sale la IP origen de la conexión, así como la IP destino de la misma, seguida del método empleado y la URL completa que se envía o recibe.
Esto mismo lo podemos hacer con tcpdump o similares, pero la expresión necesaria para este filtro ya hace que quizás alguna persona se lo piense. Con httpry es muy sencillo.

Uso avanzado

Por supuesto, httpry permite hacer muchas cosas más. Algunas de las cuales vamos a ver a continuación, pero para saber todo su potencial os recomiendo la lectura de su página man.

Capturando métodos específicos

Los que sepáis del protocolo HTTP sabréis que existen multitud de métodos (POST, GET, HEAD, CONNECT, etc.) que éste tiene implementado. Algunos más vulnerables, otros menos. httpry nos permite definir qué método queremos que nos muestre, para así evitarnos tener que leer líneas que no nos van a ser de utilidad.
shell> httpry -i eth0 -m get,post

Captura a fichero para luego procesarlo

También, una de las utilidades más importantes es que la captura y el análisis de la misma no tiene por qué realizarse al mismo tiempo. Esta es una gran utilidad, puesto que nos permite almacenar todo el tráfico para su posterior análisis, con mucha más tranquilidad. Lo primero es, por supuesto, capturar el tráfico de red. Lo podemos hacer en formato binario (opción -b), o en formato texto (opción -o).
shell> httpry -i eth0 -b capture.dump
Una vez tengamos todo el tráfico capturado es hora de procesarlo. Para ello,
shell> httpry -r capture.dump

Esta entrada puede ser muy útil para análisis de tráfico, pero también para que mucha gente vea la facilidad con la que es posible capturar tráfico HTTP y leer lo que pasa por la red. Así que ya sabéis, no facilitéis tarjetas de crédito, contraseñas y demás datos de interés personal si, mínimo, no hay un https en la URL.
Leer más

Desfragmentar disco en Linux

Muchas veces la gente que está acostumbrada a emplear Windows, cuando comienza en el mundo de Linux le sorprende que no haya una forma fácil de desfragmentar el disco duro, como hacía en sus épocas Windowseras. La verdad es que siempre se suele decir que los sistemas ext3 y ext4, los más empleados últimamente en el mundo GNU/Linux, especialmente de escritorio, no sufren de fragmentación. Esto es una verdad a medias, o una mentira piadosa, como prefiráis decir. Todos los sistemas de ficheros, al trabajar con ellos se fragmentan y los de GNU/Linux no iba a ser menos. Es cierto, que por el diseño se fragmentan mucho menos, pero algo también sufren.
Pues bien, si sois de lo que preferís tener el sistema siempre muy controlado y os gusta tener el disco perfectamente ordenado e4defrag es vuestra utilidad para sistemas de ficheros extN.
Lo primero es instalarla y en sistemas basados en Debian esta utilidad está dentro del paquete e2fsprogs, así que...
shell> apt-get install e2fsprogs
Tras su instalación, podemos ver el porcentaje de fragmentación que tiene una de nuestras particiones tal que así,
shell> e4defrag -c /dev/mapper/vg0-data
Fragmented files                      now/best     size/ext
1. /data/01 - El big bang.avi         283/1        1869 KB
2. /data/02 - Agujeros negros.avi     234/1        2258 KB
3. /data/04 - Estrellas.avi           215/1        2458 KB
4. /data/08 - Lunas.avi               208/1        2544 KB
5. /data/05 - Planetas.avi            197/1        2688 KB

 Total/best extents                   44846/30877
 Average size per extent              4961 KB
 Fragmentation score                  0
 [0-30 no problem: 31-55 a little bit fragmented: 56- needs defrag]
 This device (/dev/mapper/vg0-data) does not need defragmentation.
 Done.
Lo que está aquí representado es el resultado de ejecutar el comando en el disco que tiene las "copias de seguridad" de todo aquello que veo y que tras varios años escribiendo y borrando en él, apenas hay fragmentación. Por este detalle es por lo que se suele decir que GNU/Linux no sufre de este tipo de problemas.
Por supuesto, si vuestro sistema presenta más fragmentación o algún tipo de problema, la forma de ejecutar e4defrag es la misma, simplemente sin la opción -c.
shell> e4defrag /dev/mapper/vg0-data
Según el tamaño de los ficheros y el estado del disco, le llevarán un poco más o un poco menos. Al finalizar os presentará las estadísticas y vuestro disco quedará sin la tan temida fragmentación.

Nota: Es recomendable que durante el proceso de desfragmentado se emplee el acceso a disco lo menos posible.
Leer más

Deshabilitar la comprobación de discos en el arranque

Creo que a muchos, por no decir todos los que estemos leyendo esta entrada nos habrá pasado alguna vez, que tras reiniciar un equipo y teniendo prisa en que arranque, éste se pone a comprobar el disco en busca de problemas.
Esta tarea está por defecto en los sistemas de ficheros extN y reiserfs y, lógicamente, si está es por algo. Pero puesto que GNU/Linux es altamente configurable si deseamos que una partición nunca se compruebe, bien por que son muchos datos, bien por que lo hacemos nosotros manualmente, podemos indicárselo. Para ello existe el comando tune2fs.
shell> tune2fs -c0 -i0d /dev/sdXY
Según el manual, las opciones que le pasamos indican lo siguiente:
  • -c max-mount-counts
    Adjust the maximal mounts count between two filesystem checks. If max-mount-counts is 0 then the number of times the filesystem is mounted will be disregarded by e2fsck and the kernel.
  • -i interval-between-checks[d|m|w]
    Adjust the maximal time between two filesystem checks. No postfix or d result in days, m in months, and w in weeks.
    A value of zero will disable the time-dependent checking.
Como veis, en el man de tune2fs se explica el método para deshabilitar, aunque también recomienda no deshabilitarlo, ya que la comprobación del sistema de ficheros es algo importante, ya que garantiza la integridad y la consistencia de los datos.
Failure to do so may lead to filesystem corruption due to bad disks, cables, memory, or kernel bugs to go unnoticed until they cause data loss or corruption.
Así que ya sabéis, si necesitáis evitar que la máquina compruebe el disco tras un reinicio concreto, existen otras formas de hacerlo y si aun así queréis deshabilitarlo, tener presente los problemas futuros que pueda entrañar.
Leer más

Comandos interesantes, iperf

En esta entrada del blog voy a explicar de forma breve cómo medir la velocidad de conexión entre dos equipos. Aunque en redes locales no suele ser un problema, en algunos cosas, especialmente en equipos virtualizados, la red puede ser un cuello de botella importante en los servidores, así que para comprobar y garantizar que esto no es así, qué mejor que asegurarse, pero con números. Para realizar estas comprobaciones vamos a emplear iperf, un  sencillo programa que sirve para medir el ancho de banda entre dos nodos. Aunque esta es la funcionalidad básica, es capaz de hacer más cosas, así que no dudéis en leer la ayuda.
Lo primero es instalar el software, tanto en el servidor como en un par de clientes, ya que para comprobar las velocidades, lo mejor es hacer varias pruebas.
shell> apt-get install iperf
Luego, arrancamos el servidor en el equipo que queramos medir su ancho de banda, tal que así.
shell> iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------

Y desde cualquier de los clientes, lanzamos una conexión contra el servidor. Por cada conexión nos ofrecerá un report, ya que no hemos indicado nada de que nos lo deje en un fichero.
shell> iperf -c 192.168.1.101
------------------------------------------------------------
Client connecting to 192.168.1.1.1, TCP port 5001
TCP window size: 22.9 KByte (default)
------------------------------------------------------------
[  3] local 192.168.1.33 port 44888 connected with 192.168.1.101 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3] 0.0-10.0 sec   1.04 GBytes  892 Mbits/sec
Por defecto, el tiempo de conexión es de 10 segundos. Si lo queremos ampliar para ver cómo se comporta el equipo con más carga de red durante más tiempo,
shell> iperf -t40 -c 192.168.1.101
------------------------------------------------------------
Client connecting to 192.168.1.101, TCP port 5001
TCP window size: 22.9 KByte (default)
------------------------------------------------------------
[  3] local 192.168.1.33 port 45317 connected with 192.168.1.101 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3] 0.0-40.0 sec   4.22 GBytes  906 Mbits/sec
Por supuesto, si os interesa saber todas las opciones que están disponibles, aquí os dejo la ayuda.
shell> iperf --help
Usage: iperf [-s|-c host] [options]
       iperf [-h|--help] [-v|--version]

Client/Server:
  -f, --format    [kmKM] format to report: Kbits, Mbits, KBytes, MBytes
  -i, --interval  #      seconds between periodic bandwidth reports
  -l, --len       #[KM]  length of buffer to read or write (default 8 KB)
  -m, --print_mss        print TCP maximum segment size (MTU - TCP/IP header)
  -o, --output    file   output the report or error message to this specified file
  -p, --port      #      server port to listen on/connect to
  -u, --udp              use UDP rather than TCP
  -w, --window    #[KM]  TCP window size (socket buffer size)
  -B, --bind      host   bind to host, an interface or multicast address
  -C, --compatibility    for use with older versions does not sent extra msgs
  -M, --mss       #      set TCP maximum segment size (MTU - 40 bytes)
  -N, --nodelay          set TCP no delay, disabling Nagle's Algorithm
  -V, --IPv6Version      Set the domain to IPv6

Server specific:
  -s, --server           run in server mode
  -U, --single_udp       run in single threaded UDP mode
  -D, --daemon           run the server as a daemon

Client specific:
  -b, --bandwidth #[KM]  for UDP, bandwidth to send at in bits/sec
  -c, --client    host   run in client mode, connecting to host
  -d, --dualtest         Do a bidirectional test simultaneously
  -n, --num       #[KM]  number of bytes to transmit (instead of -t)
  -r, --tradeoff         Do a bidirectional test individually
  -t, --time      #      time in seconds to transmit for (default 10 secs)
  -F, --fileinput name   input the data to be transmitted from a file
  -I, --stdin            input the data to be transmitted from stdin
  -L, --listenport #     port to receive bidirectional tests back on
  -P, --parallel  #      number of parallel client threads to run
  -T, --ttl       #      time-to-live, for multicast (default 1)
  -Z, --linux-congestion set TCP congestion control algorithm (Linux only)

Miscellaneous:
  -x, --reportexclude [CDMSV] exclude Connec, Data, Multicast, Settings, Vserver
  -y, --reportstyle C         report as a Comma-Separated Values
  -h, --help                  print this message and quit
  -v, --version               print version information and quit
Espero que si os hace falta comprobar vuestra conexión de red, esta entrada os haya ayudado.
Leer más

Explicación de la bomba fork()

Aunque por suerte ya casi todos los sistemas GNU/Linux actuales no se ven afectados por el exploit local que se conocía como la bomba fork(), sí todavía sigue siendo algo de mucho interés: cómo una simple línea capaz de causar una denegación completa de servicio y terminar con los recursos de una máquina.
:(){ :|:& };:
La verdad, es que si vemos la línea tal que así, puede resultar cuanto menos confuso comprender lo que hacer. Es lo bueno de la ofuscación. Así que vamos a desglosarla un poco para poder explicarla, pero sin cambiarle el significado.
bomba_fork() {
   bomba_fork | bomba_fork &
}; bomba_fork
Empleando nombre más descriptivos y usando más de una línea, creo que la cosa ya mejora algo. Esta última función y la anterior son la misma y tiene el mismo efecto, pero una está un poco más clara que la otra y por lo tanto, es más sencilla de explicar.
  • bomba_fork()
    Es el nombre de la función y cómo se define ésta en bash.
    En el código ofuscado, el nombre de la función es ":".
  • bomba_fork
    Es la llamada a la función. Cada vez que escribimos esto, lo que hacemos es una llamada a la función previamente definida y por lo tanto ejecuta lo que hay dentro de la misma.
    Recordar que en el código ofuscado, el nombre de la función es ":".
  • bomba_fork | bomba_fork
    Esta en una llamada a la función y puesto que está dentro de la función es recursiva. Acordaros lo que vimos en el punto anterior, bomba_fork es el nombre de la función, cada vez que la llamemos se ejecuta la función.
    Con el pipe, "|", lo que conseguimos es que en cada llamada a la función se llame a la misma dos veces.
  • &
    Esto hace que la función quede en segundo plano y no se muera, consumiendo recursos de la máquina.
Quizás así ahora esté ya más claro de por qué este código tan simple hace tanto daño. Como vemos, consume recursos infinitamente hasta que estos se agotan, ya que las llamadas recursivas nunca terminan.
Leer más

Conseguir permisos para guardar ficheros desde vi

Fijo que no soy al único que le pasa lo de editar un fichero en vi y cuando vas a guardarlo te das cuenta de que no tienes permisos para hacerlo. Si las modificaciones que has realizado son pocas y pequeñas, aun puede no molestar demasiado, pero sino, efectivamente volver a aplicarlas nuevamente esta vez ya con permisos resulta molesto. A la mayoría de los administradores cuando nos sucede esto lo que hacemos es escribir en un fichero temporal los datos y luego "machacar" el original. Por suerte vi para estas cosas nos facilita la vida, y con un simple
:w /tmp/ssh.config
logramos que se guarde en el fichero temporal que deseemos, ya luego es cuestión de mover los datos.
Sin embargo, si estamos editando y obtenemos alguno de estos errores,
W10: Advertencia: cambiando un fichero de sólo lectura 58,1 Final

E45: Está activa la opción 'readonly' (añada «!» para forzar).

E212: No puedo abrir el fichero para escribir en él.
antes de optar por guardar con otro nombre, quizás sea mejor obtener desde vi los permisos necesarios y así evitar la molestia y la inseguridad que puede provocar dejar un fichero de configuración, por ejemplo, en un directorio temporal. Para ello,
:w !sudo tee %
[sudo] password for javier: 

Si te parece útil este truco, úsalo y compártelo!

Leer más

Cambiar disco fallido en RAID software (mdadm)

mdadm es un método de implementar a nivel software las facilidades del RAID a nivel hardware. Aunque en la actualidad, especialmente los servidores de producción, suelen traer todos consigo la posibilidad de crear diferentes tipos de RAID hardware, es cierto que pueden no traerlo. En ese caso y como proteger nuestros datos (y por lo tanto la disponibilidad de los mismos) debería de estar por encima de todo, la opción de tener disponible una solución de RAID puede resultar francamente útil y para hacerlo está mdadm.
mdadm crea el RAID, pero no evita que un disco pueda fallar. Sí tenéis una salida similar a la siguiente,
shell> mdadm -D /dev/md0
/dev/md0:
        Version : 00.90.00
  Creation Time : Thu Ene  2 12:27:05 2014
     Raid Level : raid1
     Array Size : 64128 (62.63 MiB 65.67 MB)
    Device Size : 64128 (62.63 MiB 65.67 MB)
   Raid Devices : 2
  Total Devices : 1
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Tue Ene  2 18:54:59 2014
          State : active, degraded
 Active Devices : 1
Working Devices : 1
 Failed Devices : 0
  Spare Devices : 0

           UUID : 40e3ae0f:fd3ef12a...
         Events : 0.91

Number  Major  Minor  RaidDevice  State
0       0      0      0           faulty removed
1       8      1      1           active sync   /dev/sda1
querrá decir que uno de los discos que compone el RAID ha fallado. Como se puede observar, hay dos discos en el RAID y uno de ellos ya no está presente (/dev/sdb1).
La solución ahora pasa por marcar el RAID como fallido, cambiar el disco y volver a reconstruir el RAID nuevamente. Para hacerlo, os dejo aquí los pasos.
  • Indicamos al RAID que la partición ha fallado
    shell> mdadm --manage /dev/md0 --fail /dev/sdb1
    
  • Eliminamos la partición de RAID
    shell> mdadm --manage /dev/md0 --remove /dev/sdb1
    
  • Apagamos el equipo y cambiamos el disco
  • Replicamos estructura del disco sda al nuevo disco sdb
    shell> sfdisk -d /dev/sda | sfdisk /dev/sdb
    
  • Incluimos en nuevo disco en el RAID
    shell> mdadm --manage /dev/md0 --add /dev/sdb1
    
  • Esperamos a que sincronicen los datos (según el tipo de RAID)
    Durante este tiempo se puede trabajar perfectamente con el equipo, aunque irá un poco más lento, probablemente.
Si algún día lo tenéis que usar, espero que os sea de ayuda y sino, mejor que mejor.
Leer más

Comandos interesantes, dtrx

Hoy es uno de estos días en los que te das cuenta de que GNU/Linux puede ser bueno y simplificarte la vida. También puede ser el día en el que te des cuenta de que vas mayor y ya no quieres acordarte de los parámetros que le pasas a un comando. Sea como sea, hoy voy a hablar del comando dtrx. Quizás alguno ya lo conozcáis, y otros todavía no. dtrx descomprime o extrae los fichero de un número muy grande de formatos. En la versión 6.6, soporta tar, zip, cpio, rpm, deb, gem, 7z, cab, rar, gzip, bzip2, lzma, compress and InstallShield. Como veis una gran cantidad de formatos que muchas veces tenemos que andar recordando cómo se hace. Gracias a dtrx esto ya no será necesario.
Para usarlo, nada más simple que,
shell> dtrx zabbix-2.0.8.tar.gz
Por defecto y si no le pasamos parámetros detecta el tipo de fichero y lo descomprime. En caso de que le pasemos como parámetro la opción -l/-t, podemos sacar un listado de los ficheros que están dentro del contenedor, sin extraer su contenido.

Sin duda, uno de esos comandos que te simplifican la vida.

La entrada Comandos interesantes, dtrx la puedes leer en Puppet Linux.
Leer más

Interfaces de red en tcpdump

tcpdump es uno de los mejores programas que existen para capturar tráfico de red. Tanto la versión para Windows, como especialmente la versión de GNU/Linux funcionan perfectamente y permiten poner uno (o varios) interfaces de red en modo promiscuo para capturar el tráfico de red que recibe. Sin embargo, si estamos conectados a un equipo con varias tarjetas de red, quizás saber cómo se llaman o en cual poner a escuchar nuestro tcpdump puede resultar más complicado. Si echamos un vistazo al manual del programa, podemos ver cómo existe una opción (-D) que nos lista todas las interfaces de red disponibles.
shell> tcpdump -D
1.eth0
2.eth0.20
3.eth0.30
4.usbmon1 (USB bus number 1)
5.eth1
6.usbmon2 (USB bus number 2)
7.usbmon3 (USB bus number 3)
8.eth2
9.any (Pseudo-device that captures on all interfaces)
10.lo
En la salida que vemos, se puede observar el listado de interfaces que tiene un equipo. En ellas, incluso de pueden ver los interfaces virtuales que existen sobre una de las tarjetas. tcpdump también permite escuchar sobre interfaces virtuales. También destaca los puertos USB del equipo, aunque de esto ya hablamos en otro artículo.
Existe también un interfaz especial denominado any y que, como dice su descripción es un pseudo-interfaz que captura en todas las interfaces. En caso de que queramos escuchar en todas las interfaces de red del equipo, any será nuestra tarjeta.
shell> tcpdump -i any

El artículo Interfaces de red en tcpdump lo puedes leer en Puppet Linux.
Leer más

Permisos especiales: Sticky bit, SetUID y SetGID

El tema de permisos en los sistemas GNU/Linux es un referente. Aunque se suele decir que estos permisos son algo especial, en realidad se establecen en el sistema de ficheros, que así lo soporta. Y esto, lógicamente ofrece una gran ventaja respecto de sistemas de archivos en Windows. NTFS lo intentó, pero no consiguió lo que ext3/ext4, entre otros, tiene.
Para definir los permisos en GNU/Linux se suele emplear el comando chmod con un número octal (0..7) y en este número se hace la agrupación para definir si un fichero tiene permisos de lectura, escritura y/o ejecuciónrwx (y sus permutaciones) es la combinación más típica de permisos que se suele dar, pero a mayores de esos permisos, hay otros más ocultos que permiten hacer cosas completamente diferentes. Estos permisos son los que vamos a ver a continuación: el sticky bit, el bit SGID y el bit SGUID y su representación octal es la que sigue,
Sticky bit --> 1000
Bit setgid --> 2000
Bit setuid --> 4000

Sticky bit

Aunque en la actualidad no es muy empleado, en los antiguos sistemas Unix este bit activado le indicaba al sistema operativo que mantuviese a dicho programa en memoria, con el fin de facilitar su ejecución. Puesto que estaba en memoria no es necesario volver a cargarlo y su ejecución es mucho más rápida. Con la evolución de la tecnología este bit ya no tiene esa funcionalidad, ya que la carga de programas actualmente es mucho más rápida.
Actualmente se emplea este Sticky bit para definir aquellos ficheros o directorios que interesa que sólo el propietario los pueda cambiar. Este bit prevalece sobre el resto de permisos, por lo que sólo el propietario tendrá acceso al fichero.
Un ejemplo de uso es el directorio /tmp, que presenta los siguientes permisos,
shell> ls -l /
...
drwxrwxrwt  10 root root  4096 jun  3 08:42 tmp
...
Para establecer un fichero o directorio con esta propiedad hay que elegir una de ambas opciones,
shell> chmod 1755 /tmp
shell> chmod a+t /tmp

Bit suid

Bit SUID es uno de los permisos más peligrosos que se pueda establecer, ya que permite al usuario que ejecute dicho fichero tener los mismos permisos durante toda la ejecución que el usuario que ha creado el fichero. De forma más clara, si el usuario root crea un fichero y le da permisos de setuid, todo aquel que lo ejecute tendrá permisos de root durante la ejecución de dicho binario. La forma de activarlo (una de las dos),
shell> chmod 4775 /usr/local/bin-ls
shell> chmod u+s /usr/local/bin-ls
La representación octal es 4000, como ya se dijo anteriormente y cuando se establece también hay que establecer los permisos de ejecución pertinentes. Cuando tengamos el setuid establecido, los permisos aparecerán con una 's' o una 'S', según el permiso de ejecución esté o no establecido.

Bit sgid

Es lo mismo que lo que acabamos de explicar para el setuid, pero aplicable al grupo. Si estableciendo el bit anterior conseguíamos establecer los permisos como un EUID (Efective UID) en este caso lo que vamos a lograr es lo mismo, pero a nivel de grupo EGID (Efective GID). La forma de establecer dichos permisos es con 2000, en su representación octal.
shell> chmod 2770 /usr/local/sbin

La entrada Permisos especiales: Sticky bit, SUID Y SGID la puedes leer en El mundo en bits.
Leer más

Linux benchmark I

Hoy vamos a comenzar por una serie de artículos relacionados con los test de estrés a sistemas GNU/Linux. Todos sabemos la importancia de un buen rendimiento de nuestros equipos y mucho mayor la importación de dicho benchmark en servidores. Un servidor al que acceda un número bastante elevado de personas tendrá que tener un buen rendimiento para soportar la carga, en caso contrario los usuarios experimentarán cuelgues o paradas molestas. Dependiendo de para qué vaya a estar destinado el equipo, será mejor idea tener un buen rendimiento en CPU, en I/O, en red, etc.
Hoy para comenzar, vamos a presentar el software sysbench, que permite realizar diferentes tipos de test sobre la máquina para averiguar su rendimiento en cuanto a cálculo, I/O, memoria, etc. sysbench está disponible para prácticamente todos los sistemas, y para sistemas Debian y derivados , la instalación es inmediata desde los repositorios.
shell> apt-get install sysbench
Una vez instalado tendremos ya a nuestra disposición el comando con el que podremos realizar los tests.

Test de CPU

Con este benchmark podremos testear el rendimiento de la CPU de nuestro equipo, obligándole a realizar algunos cálculos que se consideran costosos y mostrándonos el tiempo final. Esto es especialmente útil sobre todo en máquinas virtuales o compartidas, en las que no sabemos el chip que tenemos debajo ni cuanta prioridad nos dio el administrador.
shell> sysbench --test=cpu --num-threads=1 --cpu-max-prime=20000 run
sysbench 0.4.12:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 1

Doing CPU performance benchmark

Threads started!
Done.

Maximum prime number checked in CPU test: 20000


Test execution summary:
    total time:                          43.9480s
    total number of events:              10000
    total time taken by event execution: 43.9363
    per-request statistics:
         min:                                  4.28ms
         avg:                                  4.39ms
         max:                                  6.55ms
         approx.  95 percentile:               4.48ms

Threads fairness:
    events (avg/stddev):           10000.0000/0.00
    execution time (avg/stddev):   43.9363/0.00
Como podéis observar, se le indica el proceso a ejecutar y también el número de hilos que nos interesa que emplee. Esto nos da un resultado final que es el que tendremos que comparar con una máquina referencia de la que sí conozcamos el chip y el rendimiento que ofrece.

Test de I/O

Este es el otro test importante que se puede evaluar y efectuar con sysbench. Permite evaluar la potencia de I/O de los discos, algo que suele definir el rendimiento final de un equipo, la entrada/salida. Aquí existen muchas opciones que se le pueden pasar para realizar las comprobaciones, pero lo principal es preparar los ficheros con los que se operará. Se recomienda emplear ficheros que dupliquen por lo menos la cantidad de RAM disponible en el sistema. Si esto no es posible, habrá que indicarle que no emplee memoria caché, para evitar obtener resultados no reales.
Pues comenzamos por lo tanto creando el entorno de trabajo (los ficheros).
shell> sysbench --test=fileio --file-total-size=5G prepare
Una vez creados, ya sólo nos queda ejecutar el test y esperar por lo resultados.
shell> sysbench --test=fileio --file-total-size=5G \
       --file-test-mode=rndrw --init-rng=on \
       --max-time=300 --max-requests=0 run
sysbench 0.4.12:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 1
Initializing random number generator from timer.


Extra file open flags: 0
128 files, 40Mb each
5Gb total file size
Block size 16Kb
Number of random requests for random IO: 0
Read/Write ratio for combined random IO test: 1.50
Periodic FSYNC enabled, calling fsync() each 100 requests.
Calling fsync() at the end of test, Enabled.
Using synchronous I/O mode
Doing random r/w test
Threads started!
Time limit exceeded, exiting...
Done.

Operations performed:  29580 Read, 19720 Write, 62984 Other = 112284 Total
Read 462.19Mb Written 308.12Mb Total transferred 770.31Mb (2.5676Mb/sec)
  164.32 Requests/sec executed

Test execution summary:
    total time:                          300.0167s
    total number of events:              49300
    total time taken by event execution: 279.2442
    per-request statistics:
         min:                                  0.01ms
         avg:                                  5.66ms
         max:                                302.36ms
         approx.  95 percentile:              15.31ms

Threads fairness:
    events (avg/stddev):           49300.0000/0.00
    execution time (avg/stddev):   279.2442/0.00
Para finalizar, borramos todo el espacio de disco que hemos ocupado, pues ya tenemos los resultados deseados.
shell> sysbench --test=fileio --file-total-size=5G cleanup

Para más información sobre sysbench, consultar la pagina man.
En breves saldrá la nuevo entrada Linux benchmark II, donde explicaremos el benchmarck a MySQL.

La entrada Linux benchmark I la puede leer en Puppet Linux.
Leer más

Comandos interesantes, ioping

Recientemente he publicado una entrada sobre iostat, cómo usarlo y cómo interpretar los resultados que se obtenían de su ejecución. Hoy acabo de descubrir una nueva utilidad que sirve para hacer algo muy similar. No ofrece tanta información, pero sí la importante y de forma sencilla y rápida nos permite consultar el rendimiento de entrada/salida de un disco. Esta nueva herramienta se llama ioping. Sí, ping I/O. Está disponible en los repositorios de Ubuntu y también en los de Debian, aunque actualmente sólo de testing en adelante.
ioping permite obtener el rendimiento del acceso a disco de un equipo al igual que si estuviésemos ejecutando un ping a la red. De hecho, qué mejor que un ejemplo de la salida para verlo,
shell> ioping -c 10 -s 1M -D /tmp
1048576 bytes from /tmp (ext4 /dev/sda1): request=1 time=34.0 ms
1048576 bytes from /tmp (ext4 /dev/sda1): request=2 time=23.0 ms
1048576 bytes from /tmp (ext4 /dev/sda1): request=3 time=23.2 ms
...

--- /tmp (ext4 /dev/sda1) ioping statistics ---
10 requests completed in 9268.4 ms, 37 iops, 37.4 mb/s
min/avg/max/mdev = 23.0/26.7/34.0/4.4 ms
Por lo tanto, ioping permite obtener la latencia de entrada/salida de disco pudiéndonos ser útil para saber la potencia de lectura o escrita que el disco ofrece, empleando o no la caché. Las principales opciones que presenta son:
  • -c count
    Se ejecuta count veces y luego termina ofreciendo una estadística de resultados.
  • -s size
    Establece el tamaño de la lectura/escritura que realizará.
  • -L
    Realiza las operaciones de forma secuencial y no aleatorias.
  • -C
    Comprueba la latencia del disco empleando la caché.
  • -D
    Comprueba la latencia escribiendo en disco directamente.
Para más información, consultar la página de su manual.
Página oficial de ioping: code.google.com/ioping

La entrada Comandos interesantes, ioping la puede leer en Puppet Linux.
Leer más

iostat

iostat es una de esas utilidades de GNU/Linux que todo administrador debería de conocer y comprender perfectamente. iostat permite monitorizar los parámetros de entrada/salida de los diferentes dispositivos del sistema, para observar los diferentes ratios de transferencia.
Una de las típicas salidas de iostat es la siguiente,



shell> iostat
Linux 2.6.32-5-686 (desktop)   03/31/13   _i686_ (2 CPU)

avg-cpu:  %user       %nice     %system   %iowait    %steal  %idle
           4,25        0,00        1,01      0,51      0,00  94,22

Device:     tps  Blk_read/s  Blk_wrtn/s  Blk_read  Blk_wrtn
sda        7,32       66,51      112,61    835334   1414278
Aunque aquí nos muestra también el consumo de CPU del sistema, la parte más importante está a continuación y es la que se refiere a los discos. De hecho, si llamamos a iostat para que nos saque información continuada de los discos, vemos que se suprime la información relativa a la carga de CPU.
shell> iostat -d 2 3
Linux 2.6.32-5-686 (desktop)   03/31/13   _i686_ (2 CPU)

Device:     tps   kB_read/s   kB_wrtn/s   kB_read   kB_wrtn
sda       11,79      210,97       95,91   1171053    532364

Device:     tps   kB_read/s   kB_wrtn/s   kB_read   kB_wrtn
sda        2,79       80,45        0,00       144         0

Device:     tps   kB_read/s   kB_wrtn/s   kB_read   kB_wrtn
sda       24,16        0,00      191,01         0       340
Pero el problema de iostat no está en conseguir hacer funcionar el comando, sino en saber interpretar la salida. Saber qué significa tps, kB_wrtn, etc. Esto es muy sencillo,
  • tps
    Es la transferencia a disco por segundo.
  • Bls_read/s (kB_read/s, MB_read/s)
    Es la cantidad de bloques leídos por segundo.
  • Bls_wrtn/s (kB_wrtn/s, MB_wrtn/s)
    Representa la cantidad de bloques escritos por segundo.
  • Blk_read (kB_read, MB_read)
    Bloques totales leídos.
  • Blk_wrtn (kB_wrtn, MB_wrtn)
    Bloques totales escritos.

La entrada iostat la puedes leer en Puppet Linux.
Leer más

Automater y la información en la red

Fin de semana lluvioso. Google Reader cerrará sus puertas en poco tiempo. Qué mejor qué hacer que ir suprimiendo artículos pendientes de lectura. En este caso, me refiero a un post de hace ya un mes que salió en Security by default y que hacía repaso a la herramienta Automater, un pequeño programa escrito en Python que permite obtener información sobre direcciones IP's o URL's. Automater es uno de esos script que siempre hay que tener a mano para analizar cualquier IP que nos interese. Permite obtener información muy rápida y válida. Desde localizaciones geográficas de la misma hasta el operador propietario de la misma. También permite saber si dicha IP/URL está en alguna de las listas negras reconocidas de la red y como truco interesante, permite analizar la URL destino de un acortador de URL's.
Para aclarar mejor para qué sirve, nada mejor que verlo en funcionamiento.
shell> python Automater.py -t *.*.*.7
  ___        _                        _            
 / _ \      | |                      | |           
/ /_\ \_   _| |_ ___  _ __ ___   __ _| |_ ___ _ __ 
|  _  | | | | __/ _ \| '_ ` _ \ / _` | __/ _ \ '__|
| | | | |_| | || (_) | | | | | | (_| | ||  __/ |   
\_| |_/\__,_|\__\___/|_| |_| |_|\__,_|\__\___|_|   

--------------------------------
[*] *.*.*.7 is an IP. 
[*] Running IP toolset
[+] A records from Robtex: domain.eu
[+] A records from Robtex: int-static-*-7.---.es
[+] A records from Robtex: ---.es
[+] A records from Robtex: ---.com
[+] A records from Robtex: ---.com
[+] A records from Robtex: ---.es
[+] A records from Robtex: ---.net
[+] A records from Robtex: ---.org
[+] A records from Robtex: www.---.es
[*] Scanning host now on IPVoid.com.  May take a few seconds.
[-] IP is not listed in a blacklist
[+] The ISP for this IP is: R Cable y Telecomunicaciones Galicia, S.A.
[+] Geographic Location: (ES) Spain
[-] FortiGuard URL Categorization: Uncategorized
[-] IP is not listed in AlienVault IP reputation database
En este ejemplo obtenemos información relativa a la IP solicitada. Vemos todas las resoluciones DNS inversas que tiene (sólo de tipo A) así como la localización de la misma y el ISP propietario de la misma.
shell> python Automater.py -t https://mail.google.com/
  ___        _                        _            
 / _ \      | |                      | |           
/ /_\ \_   _| |_ ___  _ __ ___   __ _| |_ ___ _ __ 
|  _  | | | | __/ _ \| '_ ` _ \ / _` | __/ _ \ '__|
| | | | |_| | || (_) | | | | | | (_| | ||  __/ |   
\_| |_/\__,_|\__\___/|_| |_| |_|\__,_|\__\___|_|   

--------------------------------
[*] https://mail.google.com/ is a URL.  
[*] Running URL toolset
[-] https://mail.google.com/ is not a recognized shortened URL.
[*] Scanning host now on URLVoid.com.  May take a few seconds.
[+] Host IP Address is 173.194.35.53
[-] IP is not listed in a blacklist
[+] Latitude / Longitude: 37.4192 / -122.057
[+] Country:  (US) United States
[+] Domain creation date: 1997-09-15 (16 years ago)
[-] FortiGuard URL Categorization: Uncategorized
En este ejemplo, realizamos la petición sobre una URL bastente conocida, de la que obtenermos información más exacta sobre su localización, así como información relativa a la creación de su dominio.
Y ya para finalizar, podemos ver qué sucede si pedimos información sobre un enlace acortado,
shell> python Automater.py -t bit.ly/123WhVJ 
  ___        _                        _            
 / _ \      | |                      | |           
/ /_\ \_   _| |_ ___  _ __ ___   __ _| |_ ___ _ __ 
|  _  | | | | __/ _ \| '_ ` _ \ / _` | __/ _ \ '__|
| | | | |_| | || (_) | | | | | | (_| | ||  __/ |   
\_| |_/\__,_|\__\___/|_| |_| |_|\__,_|\__\___|_|   

--------------------------------
[*] bit.ly/123WhVJ is a URL.  
[*] Running URL toolset
[+] bit.ly/123WhVJ redirects to: http://www.enricozini.org/2013/debian/on-gender-imbalance/
[+] Host IP Address is 69.58.188.39
[+] Host is listed in blacklist at http://www.phishtank.com/
[+] Host is listed in blacklist at http://www.scumware.org/search.scumware
[+] Host is listed in blacklist at http://www.spamhaus.org/query/domain/bit.ly
[+] Latitude / Longitude: 40.733 / -74.0078
[+] Country:  (US) United States
[+] Domain creation date: 2008-05-18 (5 years ago)
[-] FortiGuard URL Categorization: Uncategorized

Más información: SecurityByDefault.

La entrada Automater y la información en la red, la puedes leer en Puppet Linux.
Leer más

Formulario de contacto

Nombre

Correo electrónico *

Mensaje *

Últimos comentarios