Netcat, la navaja suiza de TCP/IP
Netcat es una de las herramientas más potentes y flexibles que existen en el campo de la programación, depuración, análisis y manipulación de redes y servicios TCP/IP. Es un recurso imprescindible tanto para expertos en seguridad de redes como para hackers. Esta receta incluye varios ejemplos de uso de GNU netcat.
Introducción
Aunque netcat puede hacer muchas cosas, su función principal es muy simple:
- Crea un socket con el destino indicado si es cliente, o en el puerto indicado, si es servidor
- Una vez conectado, envía por el socket todo lo que llegue en su entrada estándar y envía a su salida estándar todo lo que llegue por el socket
Algo tan simple resulta ser extraordinariamente potente y flexible como vas a ver e continuación. Por simplicidad se utilizan conexiones locales aunque, por supuesto, se pueden utilizar entre máquinas diferentes.
Ingredientes
- netcat
- bash (o equivalente)
- utilidades GNU básicas
Sintaxis
nc [-options] hostname port[s] [ports] nc -l -p port [-options] [hostname] [port]
Parámetros básicos
- -l: modo ‘listen’, queda a la espera de conexiones entrantes.
- -p: puerto local
- -u: modo UDP
- -e: ejecuta el comando dado después de conectar
- -c: ejecuta órdenes de shell (hace /bin/sh -c [comando] después de conectar
Un chat para dos
Servidor
Cliente
Transferencia de ficheros
La instancia de nc que escucha recibe el fichero. El receptor ejecuta:
Y el emisor:
Servidor de echo
Ponemos un servidor que ejecuta cat de modo que devolverá todo lo que
se le envíe
Y en otra consola:
Servidor de daytime
Exactamente lo mismo que el ejemplo anterior pero ejecutando date en lugar de cat.
Y en otra consola:
shell remota estilo telnet
Servidor
Cliente
Telnet inverso
En esta ocasión es el cliente quien pone el terminal remoto
Servidor
Cliente
Cliente de IRC
y a partir de ahí puedes introducir cualquier comando de IRC:
- LIST
- JOIN #canal
- PART #canal
- PRIVMSG #canal :mensaje
- WHO #canal
- QUIT
Cliente de correo SMTP
Podemos usar netcat para enviar correo electrónico por medio de un servidor SMTP, utilizando el protocolo directamente:
HTTP
Es sencillo conseguir un cliente y un servidor HTTP rudimentarios.
Servidor
Al cual podemos conectar con cualquier navegador HTTP, como por ejemplo firefox.
Cliente
Streaming de audio
Un sencillo ejemplo para hacer streaming de un fichero .mp3:
Servidor
y para servir todos los .mp3 de un directorio:
Cliente
Streaming de video
Servidor
Cliente
Proxy
Sirva para redirigir una conexión a otro puerto u otra máquina:
El tráfico recibido en el puerto 2000 de esta máquina se redirige a la máquina example.org:22. Permite incluso que la conexión entrante sea UDP pero la redirección sea TCP o viceversa!
Clonar un disco a través de la red
Esto se debe usar con muchísima precaución. ¡Si no estás 100% seguro, no lo hagas! No digas que no te avisé.
Es este ejemplo voy a copiar un pen drive USB que está conectado al servidor a un fichero en el cliente y después lo voy a montar para acceder al contenido.
Servidor
Cliente
Ratón remoto
Es decir, usar el ratón conectado a una máquina para usar el entorno gráfico de otra. El ejemplo está pensado para Xorg.
Servidor
Cliente
Editar el fichero /etc/X11/xorg.conf
y modificar la configuración del ratón para que queda así:
Section "InputDevice" Driver "mouse" ... Option "Device" "/tmp/fakemouse" .... EndSection
Medir el ancho de banda
Servidor
Cliente
Imprimir un documento en formato PostScript
Funciona en impresoras que soporten el estándar AppSocket/JetDirect, que son la mayoría de las que se conectan por Ethernet.