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 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 una máquina Ubuntu 18.04 usando apt install
o compilándolo desde el 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 desde el código 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.
Descargue el código fuente del sitio web de 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 hacerlo puedes 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 encontró un compilador C aceptable en $PATH" al ejecutar el comando ./configure, asegúrese de haber instalado el compilador gcc. Para instalarlo escribe el siguiente comando:
apt-get install build-essential
Ejecutando configure
toma un tiempo.
Una vez que la configuración haya finalizado 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, ejecute make distclean
comando.
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 en 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, 22 puertos)
Connection to 192.168.40.146 22 port [tcp/*] succeeded!
SSH-2.0-OpenSSH_7.6p1 Ubuntu-4
2) Realizar 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) Realizar 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) 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 del remitente al host del receptor a través del puerto 2424. asegúrese de permitir las conexiones entrantes en el puerto 2424 en el 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) desde una imagen de disco comprimida almacenada en un host remoto
En el host local ejecute:
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) Ejecutar un chat en línea no seguro entre dos anfitriones
En un host (por ejemplo, 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 comando a continuación en el host local (por ejemplo, 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 puertos conocidos (1-1023)
while true; do sudo nc -lp 80 < test.html; done
Ahora abre http://192.168.40.144/test.html
desde otro host para acceder a él.
11) Escuche en un puerto TCP usando una dirección IPv6
Puede usar el siguiente comando para permitir que nc use la dirección IPv6 cuando escuche 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 cliente (192.168.40.146):
nc 192.168.40.144 2424 | mplayer -vo x11 -caché 3000 -
Leer también:
- Cómo usar Linux Netcat Command 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 solución de problemas y experimentación relacionados con redes. Es por eso que muchas distribuciones de Linux se entregan con netcat preinstalado.