Obtener hostname y demás info de un equipo remoto a través de la IP

nmap_logo_vx

En más de una ocasión me he encontrado ante la duda de qué máquina hay detrás de una IP. Siempre hay herramientas que nos pueden ayudar con este tema, y aquí os presento la que yo utilizo: el fantástico nmap. La verdad es que hay pocas herramientas tan útiles…

Lo que me suele ayudar para identificar máquinas, es buscando el hostname, que te lo devuelve el campo «Service Info«.

[root@host01:~]# nmap -A 10.114.99.29
Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2014-03-03 17:14 CET
Interesting ports on sede1-10-114-99-29.wnet (10.114.99.29):
Not shown: 1673 closed ports
PORT     STATE SERVICE    VERSION
21/tcp   open  ftp        OpenBSD ftpd 6.4 (Linux port 6.4)
22/tcp   open  ssh         (protocol 2.0)
80/tcp   open  http       Microsoft IIS webserver 7.5
111/tcp  open  rpcbind     2 (rpc #100000)
3128/tcp open  http-proxy Squid webproxy 3.1.20
6000/tcp open  X11        X.Org (open)
8080/tcp open  http       Microsoft IIS webserver 6.0
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at http://www.insecure.org/cgi-bin/servicefp-submit.cgi :
SF-Port22-TCP:V=4.11%I=7%D=3/3%Time=5314AA54%P=i686-suse-linux-gnu%r(NULL,
SF:20,"SSH-2\.0-OpenSSH_6\.0p1\x20Debian-4\r\n");
Device type: general purpose
Running: Linux 2.4.X
OS details: Linux 2.4.18 - 2.4.27
Service Info: Host: host39.cosmos.es.ftgroup; OSs: Linux, Windows, Unix

Nmap finished: 1 IP address (1 host up) scanned in 13.901 seconds

Ver MAC de interfaz de red en Linux

Existe una forma interesante para poder sacar la MAC asociada a una interfaz de RED. Hay un fichero que tiene almacenada la MAC de la interfaz de Red, y existen tantos ficheros de este estilo, como interfaces de red tenga la máquina.

El fichero en cuestión es: /sys/class/net/eth0/address, donde eth0, identifica la interfaz de red.

Ejemplo:

[10:47:19 root@coloso01:~]# cat  /sys/class/net/eth0/address
00:14:5e:2a:55:c0

Logear mensajes personales en el /var/log/messages

Para logear mensajes personales en el fichero /var/log/messages puedes usar la herramienta logger de unix.

Un ejemplo sencillo sería:

logger Esto es una prueba cutrecilla

y podrías observar el resultado así:

tail -20 /var/log/messages

Puedes incluso poner más información (Esto tiene que ser incluído en el código de un bash script):

logger -t `basename $0` i am still testing

Fuente

Pasar un proceso de Unix de Foreground a Background

Muchas veces me he encontrado en la necesidad de utilizar una terminal en la que se está ejecutando un proceso, y por ello finalmente no poder usarla.

La solución para esto es pasar el proceso a background, de modo que nos libera la terminal, y podemos interactuar de nuevo con la máquina.

¡Ojo! Si el proceso escupe texto, y no hemos redireccionado la salida estandar, nos saldrán los mensajes del proceso en la terminal, así que no te asustes si lo ves 😛

Para pasar el proceso a background:

  1. Pulsa Control+Z.
  2. Ejecuta el comando bg.
  3. Puedes observar el estado de tus procesos con el comando jobs.
lpr -Pps23 part[1-8].ps
^Z
Stopped
bg
[1]    lpr -Pps23 interface.ps &
jobs
[1]    Running              lpr -Pps7 interface.ps

Para volver a pasarlo a Foreground podemos usar el comando fg.

También es posible dejar un comando en background directamente al ejecutarlo, añadiendo el carácter &.

lpr -Pps23 interface.ps &

Eliminar procesos «zombies» de SSH

Hay veces que con SSH se cierran mal las conexiones, y se quedan procesos abiertos (zombies) en la máquina que tiene el demonio de SSH.

Ejemplo:

#ps -ef
calidad   7762  7761  0 Nov03 ?        00:00:00 [scp] <defunct>
root      1898  2384  0 Nov03 ?        00:00:00 sshd -i -f /etc/ssh/sshd_config
calidad   1913  1898  0 Nov03 ?        00:00:00 sshd -i -f /etc/ssh/sshd_config
calidad   1914  1913  0 Nov03 ?        00:00:00 [scp] <defunct>
root      4664  2384  0 Nov03 ?        00:00:00 sshd -i -f /etc/ssh/sshd_config
calidad   4669  4664  0 Nov03 ?        00:00:00 sshd -i -f /etc/ssh/sshd_config
calidad   4670  4669  0 Nov03 ?        00:00:00 [scp] <defunct>
root      6344  2384  0 Nov03 ?        00:00:00 sshd -i -f /etc/ssh/sshd_config
calidad   6349  6344  0 Nov03 ?        00:00:00 sshd -i -f /etc/ssh/sshd_config
calidad   6350  6349  0 Nov03 ?        00:00:00 [scp] <defunct>

Para eliminar estas sesiones que se quedan sin cerrar correctamente, se puede enviar la señal de reinicio al proceso de SSH, por cada una de las sesiones mal cerradas:

pstree -cpal | egrep [s]shd | perl -lne '($i)=(/(d+)/); `kill -1 $i`'

Con esto conseguimos que se reinicien todas las conexiones de SSH que tiene la máquina.

(Recuerda que hay que tener Perl instalado para poder ejecutar el comando anterior).

Conectar a una VPN con vpnc

vpnc es un cliente libre de redes VPN para Unix, que se usa a través de la consola. Existen otros clientes de este estilo que incluso utilizan la interfaz gráfica.

Para instalarlo utilizaremos lo siguiente:

sudo apt-get install vpnc

Que tendrá en cuenta que todas las dependencias con otras librerias están correctamente instaladas.

vpnc buscará los ficheros /etc/vpnc.conf o /etc/vpnc/default.conf, si ninguno de estos ficheros existe, al ejecutar vpnc pedirá por consola los parámetros necesarios.

Para que vpnc utilize un fichero de configuración distinto a los anteriores, tiene que utilizar se puede utilizar la siguiente orden:

sudo vpnc miconfiguracion

o

sudo vpnc miconfiguracion.conf

cuyo fichero tiene que estar en el directorio /etc/vpnc/ y necesita la extensión .conf.

El aspecto de este fichero es el siguiente:

IPSec gateway gateway
IPSec ID nombre_del_grupo
IPSec secret contraseña_del_grupo
Xauth username mi_usuario
Xauth password mi_contraseña

Para desconectar de la VPN, se usa el siguiente comando:

sudo vpnc-disconnect

Fuente.

Qué son los ficheros FIFO

FIFO es el acrónimo de First Input First Output (Primero que entra, primero que sale). En informática se suele utilizar para crear estructuras de datos.

Usando esta teoría, en UNIX existen una especie de ficheros que se utilizan para comunicar procesos, de modo que se puedan sincronizar e intercambiar información. El funcionamiento es bastante sencillo, un proceso se  encarga de escribir en el fichero FIFO, y otro de leer. Cada uno de los procesos se quedarán bloqueados hasta que el otro actúe.

Esto lo podemos probar del siguiente modo:

$ mkfifo /tmp/fi

Con el comando anterior, habrás creado el fichero FIFO. Puedes comprobarlo con un ls -l /tmp

$ echo Hola Mundo > /tmp/fi

El proceso que hemos lanzado, se quedará bloqueado intentando escribir hasta que haya otro proceso lea ese fichero. Para ello lanzamos este comando:

$ cat /tmp/fi
Hola Mundo

En este momento, habrán quedado ambos procesos desbloqueados.

lsof (List Open Files)

Ya hice una pequeña introducción de lsof, pero se merece una entrada completa. Se trata de una de las herramientas más útiles para administrar un sistema basado en Unix. El nombre de lsof viene de Lists Open files y nos puede dar toda la información que necesitamos acerca de los descriptores que tiene el sistema en un momento determinado. Entiéndase descriptores, tanto las conexiones de red, como descriptores de ficheros.

Los usos más interesantes son los siguientes:

  • lsof -i :80: Muestra información acerca de los procesos que están en estado LISTEN en el puerto 80.
  • lsof -iTCP: Muestra las conexiones TCP.
  • lsof  +D /home/usuario: Muestra qué procesos están utilizando el directorio /home/usuario.
  • lsof -u usuario: Muestra los descriptores de fichero abiertos por el usuario.
  • lsof -i@192.168.1.5: Muestra conexiones con una determinada IP.
  • lsof -i@192.168.1.5:2322: Muestra conexiones con una determinada IP y un determinado puerto.
  • lsof -c httpd: Muestra los ficheros y conexiones tiene abiertas un proceso determinado, dado el nombre del proceso.
  • lsof -p 12212: Muestra los descriptores de fichero asociados a un proceso, dado su PID.
  • kill -HUP `lsof -t -c sshd`: Enviaría una señal a los procesos que estén corriendo de sshd.
  • lsof +L1: Muestra los ficheros que tienen menos de un enlace apuntando a ellos. Suelen ser ficheros que un cracker intenta ocultar.

Fuente: lsof, lsof 2