jueves, 31 de octubre de 2013

Listando equipos en redes Windows

No hace mucho que descubrí en la terminal de comandos de mi sistema Linux la utilidad smbtree. Acompaña a smblient (en el paquete del mismo nombre) y, como sugiere su nombre, muestra un pantalla un árbol con los distintos equipos detectados en la red que corran el protocolo SMB, usado típicamente en redes Microsoft donde se comparten carpetas e impresoras. Como la salida en pantalla es muy extensa, te obliga a paginarla (p. ej. con less) o a desplazarte varias páginas hacia arriba, y como el "dibujo del árbol" no es compacto, sigue sin ser fácil de captar de un vistazo. Una de las ventajas de Linux y Bash es la facilidad con que se pueden crear nuevos comandos o personalizar los existentes si no nos gusta su funcionamiento. En mi caso, lo que me interesaba era un simple listado de equipos conectados en la red, por lo que tras un par de pruebas en la línea de comandos filtrando la salida de smbtree, di con la tubería adecuada, que para poder usarla a partir de ese momento como un comando más, convertí en un alias de la siguiente forma:

alias smblist='smbtree -N|egrep '\''\\\\[^\\]+$'\''|awk '\''{print $1}'\'''

El festival de comillas simples repetidas (y algunas escapadas con \) es para poder utilizarlas dentro de las comillas simples más externas que definen el alias. A continuación paso a aclarar los comandos:
  • El parámetro -N de smbtree es para que no pida contraseña.
  • He usado egrep para poder usar el cuantificador + en la expresión regular, y significa "una o más ocurrencias del caracter anterior" (en este caso, cualquier caracter que no sea backslash).
  • La expresión regular completa podría traducirse por "cadena que empiece por dos backslash (\) seguidos y luego uno o más caracteres distintos a backslash y el final de la línea ($)". Lo que consigue es dejar solo las líneas con nombres de equipo en formato NetBIOS.
  • El comando awk final simplemente se queda con la primera columna de cada línea para acabar de limpiar los datos.
Guardando esa definición del alias en nuestro archivo .bashrc (o donde se definan los alias de usuario en nuestro sistema) tendremos un nuevo comando disponible, en este caso para listar los equipos de la red que "hablan" el protocolo SMB. De utilidad en redes SOHO ;-)