Cómo usar los comandos de Netcat con ejemplos

El comando Netcat (nc) es una poderosa herramienta para analizar conexiones de red, escanear puertos abiertos, transferir datos, etc. Es una utilidad de red para leer y escribir en conexiones de red utilizando protocolos TCP o UDP.
Cómo instalar netcat
Es una herramienta multiplataforma y está disponible para Linux, macOS, Windows y BSD. Instalaremos netcat en la máquina Ubuntu 18.04 usando apt install
o compilándolo a partir del código fuente.
Instalar usando apt es bastante simple, simplemente escriba el siguiente comando en la terminal:
sudo apt install netcat
En CentOS 8
Ncat se puede instalar con el paquete nmap en RHEL 8/CentOS 8. Use el comando dnf como se muestra a continuación
sudo dnf install nmap
Cómo instalar netcat desde el código fuente
Compilar netcat desde la fuente no es tan fácil como instalar a través de apt install
pero si sigue los pasos a continuación, puede instalarlo fácilmente.
Descarga el código fuente de sitio netcat con el siguiente comando
wget http://sourceforge.net/projects/netcat/files/netcat/0.7.1/netcat-0.7.1.tar.gz
Extraiga el archivo recién descargado. Para hacer esto, puede ejecutar:
tar -xzvf netcat-0.7.1.tar.gz
cd
en el directorio que contiene el código fuente y el tipo de paquete ./configure
para configurar el paquete para su sistema.
cd netcat-0.7.1
./configure
Si recibe un mensaje de error como este: «no se encontró un compilador C aceptable en $PATH» cuando ejecuta el comando ./configure, asegúrese de tener instalado el compilador gcc. Para instalarlo escribe el siguiente comando:
apt-get install build-essential
Correr configure
lleva algo de tiempo.
Una vez que la configuración se haya completado con éxito, ejecute:
sudo make
y
sudo make install
Puede eliminar los binarios del programa y los archivos de objetos del directorio del código fuente escribiendo make clean
. Para eliminar también los archivos que configure
creado, ejecutar make distclean
dominio.
Ejemplos de netcat
Antes de comenzar a explorar algunos comandos de netcat, es importante saber que si se vincula a puertos conocidos (0-1023) con nc, necesita privilegios de root. De lo contrario, puede ejecutar nc como un usuario normal.
1) Probar si un puerto TCP específico de un host remoto está abierto
nc -vn 192.168.40.146 2424
Salga si el puerto 2424 en el servidor remoto está cerrado
nc: connect to 192.168.40.146 port 2424 (tcp) failed: Connection refused
Salida si el puerto en el servidor remoto está abierto (por ejemplo, puerto 22)
Connection to 192.168.40.146 22 port [tcp/*] succeeded!
SSH-2.0-OpenSSH_7.6p1 Ubuntu-4
2) Realice un escaneo de puertos TCP contra un host remoto
El siguiente comando verificará los puertos 20 a 25 en el host remoto e imprimirá el resultado.
nc -vnz -w 1 192.168.40.146 20-25
La salida se verá así
nc: connect to 192.168.40.146 port 20 (tcp) failed: Connection refused
nc: connect to 192.168.40.146 port 21 (tcp) failed: Connection refused
Connection to 192.168.40.146 22 port [tcp/*] succeeded!
nc: connect to 192.168.40.146 port 23 (tcp) failed: Connection refused
nc: connect to 192.168.40.146 port 24 (tcp) failed: Connection refused
nc: connect to 192.168.40.146 port 25 (tcp) failed: Connection refused
3) Realice un escaneo de puertos UDP contra un host remoto
nc -vnzu 192.168.40.146 1-65535
La salida solo mostrará los puertos que permiten conexiones udp.
Connection to 192.168.40.146 2424 port [udp/*] succeeded!
Connection to 192.168.40.146 12354 port [udp/*] succeeded!
4) Enviar un paquete UDP de prueba a un host remoto
echo -n "udp test" | nc -u -w1 192.168.40.146 2424
El comando anterior enviará un paquete UDP de prueba con un tiempo de espera de 1 segundo a un host remoto en el puerto 2424
5) Copie un archivo (por ejemplo, test.txt) de un host a otro
En el host receptor (192.168.40.146 en mi caso) ejecute:
nc -lp 2424 > test.txt
En el host del remitente (192.168.40.144), ejecute el siguiente comando:
nc 192.168.40.146 2424 < test.txt
Esto copiará el archivo test.txt del host remitente al host receptor a través del puerto 2424. Asegúrese de permitir las conexiones entrantes en el puerto 2424 del host receptor.
6) Transferir un directorio completo (incluido su contenido) de un host a otro
En la ejecución del host del receptor:
nc -l 2424 | tar xvf -
En el host del remitente, ejecute el siguiente comando:
tar cvf - /path/to/dir | nc 192.168.40.146 2424
7) Cree una copia de seguridad del disco duro comprimido (por ejemplo, /dev/sdc) en un host remoto
En la ejecución del host remoto:
nc -lp 2424 | sudo dd of=/path/to/image.img.gz
En localhost, ejecute el siguiente comando:
dd if=/dev/sdc | gzip -c | nc 192.168.40.146 2424
8) Restaurar un disco duro (p. ej., /dev/sdc) desde una imagen de disco comprimida almacenada en un host remoto
En localhost se ejecuta:
nc -lp 2424 | gunzip -c | sudo dd of=/dev/sdc
En el host remoto, ejecute el siguiente comando:
cat /path/to/image.img.gz | nc 192.168.40.144 2424
9) Ejecute un chat en línea inseguro entre dos hosts
En un host (p. ej., 192.168.40.144), ejecute el siguiente comando:
nc -lp 2424
En otro host (p. ej., 192.168.40.146), ejecute el siguiente comando:
nc 192.168.40.144 2424
Después de ejecutar estos comandos, todo lo que se escriba en ambos terminales se verá en ambas máquinas host.
10) Ejecutar un servidor web con una página web estática
Ejecute el siguiente comando en localhost (p. ej., 192.168.40.144) para iniciar un servidor web que sirve test.html en el puerto 80. Tenga en cuenta que debe ejecutar con privilegios sudo ya que 80 está en el rango de puerto conocido (1-1023)
while true; do sudo nc -lp 80 < test.html; done
Ahora abierto http://192.168.40.144/test.html
de otro host para acceder a él.
11) Escuche en un puerto TCP usando la dirección IPv6
Puede usar el siguiente comando para permitir que nc use la dirección IPv6 cuando escucha en un puerto TCP.
nc -6 -l 2424
Compruebe si funciona con el siguiente comando
sudo netstat -nap | grep 2424
La salida se verá así
tcp6 0 0 :::2424 :::* LISTEN 15665/nc
12) Transmita un archivo de video desde un servidor para que el cliente vea el video transmitido usando el reproductor de video (por ejemplo, mplayer)
En un servidor de video (192.168.40.144):
cat sample_video.avi | nc -l 2424
En un host cliente (192.168.40.146):
nc 192.168.40.144 2424 | mplayer -vo x11 -cache 3000 –
Lea también:
Como puede ver, netcat es una gran herramienta para redes TCP/IP y es una de las herramientas preferidas por los administradores de sistemas cuando se trata de solución de problemas y experimentación de redes. Es por eso que muchas distribuciones de Linux vienen con netcat preinstalado.