Cómo utilizar comandos Netcat con ejemplos

El comando Netcat (nc) es una herramienta poderosa para analizar conexiones de red, buscar puertos abiertos, transferir datos, etc. Es una utilidad de red para leer y escribir en conexiones de red usando protocolos TCP o UDP.

Cómo instalar netcat

Es una herramienta multiplataforma y está disponible para Linux, macOS, Windows y BSD. Vamos a instalar netcat en la máquina Ubuntu 18.04 usando apt install o compilarlo a partir del código fuente.

La instalación usando apt es bastante simple, solo necesita escribir el siguiente comando en la terminal:

sudo apt install netcat

En CentOS 8

El 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 a partir del código fuente no es tan fácil como instalarlo 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 web de netcat con el siguiente comando

wget https://sourceforge.net/projects/netcat/files/netcat/0.7.1/netcat-0.7.1.tar.gz

Extraiga el archivo recién descargado. Para hacerlo, puede ejecutar:

tar -xzvf netcat-0.7.1.tar.gz

cd al directorio que contiene el código fuente del paquete y escriba ./configure para configurar el paquete para su sistema.

cd netcat-0.7.1
./configure

Si recibe un mensaje de error como este: “no se ha encontrado un compilador C aceptable en $ PATH” al ejecutar el comando ./configure, asegúrese de haber instalado el compilador gcc. Para instalarlo, escriba el siguiente comando:

apt-get install build-essential

Corriendo configure toma un tiempo.

Una vez que la configuración haya finalizado correctamente, ejecute:

sudo make

y

sudo make install

Puede eliminar los archivos binarios del programa y los archivos de objeto del directorio del código fuente escribiendo make clean. Para eliminar también los archivos que configure creado, ejecutar make distclean mando.

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) Pruebe si un puerto TCP particular de un host remoto está abierto

nc -vn 192.168.40.146 2424

Salida 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 del 20 al 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 mostrará solo 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) Envíe 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 del 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 del remitente al host del receptor a través del puerto 2424. asegúrese de permitir las conexiones entrantes en el puerto 2424 del host del receptor.

6) Transferir un directorio completo (incluido su contenido) de un host a otro

En el host del receptor, ejecute:

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 comprimida del disco duro (por ejemplo, / dev / sdc) en un host remoto

En el host remoto, ejecute:

nc -lp 2424 | sudo dd of=/path/to/image.img.gz

En el host local, ejecute el siguiente comando:

dd if=/dev/sdc | gzip -c | nc 192.168.40.146 2424

8) Restaurar un disco duro (por ejemplo, / dev / sdc) a partir de una imagen de disco comprimida almacenada en un host remoto

En la ejecución del host local:

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 (por ejemplo, 192.168.40.144) ejecute el siguiente comando:

nc -lp 2424

En otro host (por ejemplo, 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) Ejecute un servidor web con una página web estática

Ejecute el siguiente comando en el host local (por ejemplo, 192.168.40.144) para iniciar un servidor web que sirva test.html en el puerto 80. Tenga en cuenta que debe ejecutar con sudo privilegios ya que 80 está en el rango de puertos conocidos (1-1023)

while true; do sudo nc -lp 80 < test.html; done

Ahora abierto https://192.168.40.144/test.html desde 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 un 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 de cliente (192.168.40.146):

nc 192.168.40.144 2424 | mplayer -vo x11 -caché 3000 –

Leer también:

  • Cómo utilizar el comando Netcat de Linux como escáner de puertos
  • Cómo crear un chat simple con netcat en Linux

Como puede ver, netcat es una gran herramienta para redes TCP / IP y es una de las herramientas favoritas de los administradores de sistemas cuando se trata de resolver problemas y experimentar con redes. Es por eso que muchas distribuciones de Linux se entregan con netcat preinstalado.