netcat (a menudo abreviado como nc ) es una utilidad de red de computadoras para leer y escribir en conexiones de red usando TCP o UDP . El comando está diseñado para ser un back-end confiable que se puede usar directa o fácilmente con otros programas y scripts. Al mismo tiempo, es una herramienta de investigación y depuración de red rica en funciones, ya que puede producir casi cualquier tipo de conexión que su usuario pueda necesitar y tiene una serie de capacidades integradas.
Autor (es) original (es) | * Hobbit * |
---|---|
Desarrollador (es) | Investigación aviar |
Versión inicial | 28 de octubre de 1995 [1] |
Lanzamiento estable | 1.10 / 2 de enero de 2007 |
Sistema operativo | Unix y similar a Unix , DOS , Microsoft Windows , Windows CE |
Tipo | Utilidad de red |
Licencia | Versión original: licencia personalizada y permisiva Versión GNU: GPL Versión OpenBSD: BSD |
Sitio web | nc110 |
Su lista de características incluye escaneo de puertos, transferencia de archivos y escucha de puertos, y se puede usar como puerta trasera .
Características
Las características del netcat original incluyen: [2]
- Conexiones salientes o entrantes, TCP o UDP, hacia o desde cualquier puerto
- Verificación completa de DNS hacia adelante / atrás , con las advertencias adecuadas
- Posibilidad de utilizar cualquier puerto de origen local
- Capacidad para utilizar cualquier dirección de origen de red configurada localmente
- Capacidades integradas de escaneo de puertos, con aleatorización
- Capacidad incorporada de enrutamiento de fuente suelto
- Puede leer argumentos de línea de comando desde la entrada estándar
- Modo de envío lento, una línea cada N segundos
- Volcado hexadecimal de datos transmitidos y recibidos
- Capacidad opcional para permitir que otro servicio de programa establezca conexiones
- Contestador de opciones de telnet opcional
Las reescrituras como las de GNU y OpenBSD admiten funciones adicionales. Por ejemplo, nc de OpenBSD es compatible con TLS , y GNU netcat admite de forma nativa un modo de tunelización que admite UDP y TCP (opcionalmente permite que uno sea tunelizado sobre el otro) en un solo comando, [3] donde otras versiones pueden requerir datos de canalización de una instancia de netcat a otro.
Ejemplos de
Abrir una conexión sin procesar al puerto 25
nc mail.server.net 25
Realizar una solicitud HTTP
printf "OBTENER /index.html HTTP / 1.0 \ r \ nHost: info.cern.ch \ r \ n \ r \ n" | nc info.cern.ch 80
La respuesta completa (incluidos los encabezados HTTP) se volcará a la salida estándar.
Configuración de un servidor web one-shot en el puerto 8080 para presentar el contenido de un archivo
{ printf 'HTTP / 1.0 200 OK \ r \ n Longitud del contenido:% d \ r \ n \ r \ n' " $ ( wc -c ún>) " ; cat some.file ; } | nc -l 8080
A continuación, se puede acceder al archivo a través de un navegador web en http: // nombre del servidor: 8080 /. Netcat solo entrega el archivo una vez al primer cliente que se conecta y luego sale; también proporciona la longitud del contenido para los navegadores que lo esperan. (Esto debería funcionar bien en una LAN, pero podría fallar con cualquier tipo de firewall en el medio). En algunas versiones de netcat como netcat-traditional en Debian 8.6, debe especificar -p antes del número de puerto.
Comprobación de si los puertos UDP (-u) 80–90 están abiertos en 192.168.0.1 usando E / S de modo cero (-z)
nc -vzu 192.168.0.1 80-90
Tenga en cuenta que las pruebas UDP siempre se mostrarán como "abiertas".
Pruebe si el puerto UDP está abierto: servidor y cliente UDP simple
Esta prueba es útil si tiene acceso de shell al servidor que debe probarse, pero no sabe si hay un firewall que bloquea un puerto UDP específico en el servidor.
En el host que escucha, es decir, en el servidor cuyo puerto debe comprobarse, haga lo siguiente:
nc -l -u -p 4172
En el host de envío, haga lo siguiente: tenga en cuenta que servname
es el nombre de host del host de escucha:
nc -u nombreservidor 4172
Si el texto escrito en el host de envío (escriba algo y presione enter) también se muestra en el host de escucha, entonces el puerto UDP 4172 está abierto. Si no está abierto, obtendrá un error como "Conexión rechazada".
Hay una salvedad. En algunas máquinas, IPv6 puede ser la versión de IP predeterminada que debe utilizar netcat
. Por lo tanto, el host especificado por el nombre de host se contacta mediante IPv6 y es posible que el usuario no lo sepa. Los puertos pueden aparecer cerrados en la prueba, aunque estarían abiertos al usar IPv4 . Esto puede ser difícil de notar y puede causar la falsa impresión de que el puerto está bloqueado, mientras que en realidad está abierto. Puede forzar el uso de IPv4 agregando -4
opciones de los nc
comandos.
Canalice a través de UDP (-u) con un tiempo de espera (-w) de 1 segundo a "loggerhost" en el puerto 514
echo '<0> mensaje' | nc -w 1 -u loggerhost 514
Escaneo de puertos
Un uso poco común de netcat
es el escaneo de puertos . Netcat no se considera la mejor herramienta para este trabajo, pero puede ser suficiente (una herramienta más avanzada es nmap )
nc -v -n -z -w 1192.168.1.2 1-1000
El -n
parámetro aquí evita la búsqueda de DNS, -z
hace que nc
no reciba ningún dato del servidor y -w 1
hace que el tiempo de espera de la conexión se agote después de 1 segundo de inactividad.
Proxying
Otro comportamiento útil es utilizarlo netcat
como proxy. Se pueden redirigir tanto los puertos como los hosts. Mira este ejemplo:
nc -l 12345 | nc www.google.com 80
El puerto 12345 representa la solicitud.
Esto inicia un nc
servidor en el puerto 12345 y todas las conexiones se redirigen al google.com:80
. Si un navegador web realiza una solicitud nc
, la solicitud se enviará a Google, pero la respuesta no se enviará al navegador web. Eso se debe a que las tuberías son unidireccionales. Esto se puede solucionar con una tubería con nombre para redirigir la entrada y la salida .
backpipe mkfifonc -l 12345 0nc www.google.com 80 1> backpipe
La -c
opción también se puede utilizar con la ncat
implementación: [4]
ncat -l 12345 -c 'nc www.google.com 80'
El uso de una tubería con nombre es un método más confiable porque el uso de la -c
opción proporciona solo un proxy de una sola vez.
Otra característica útil es la de proxy de conexiones SSL. De esta manera, el tráfico no se puede ver en aplicaciones de rastreo de cables como wirehark . Esto se puede lograr en UNIXes mediante la utilización de mkfifo
, netcat
, y openssl
.
mkfifo tmp mkfifo tmp2 nc -l 8080 -k> tmp & while true ; hacer openssl s_client -connect www.google.com:443 -quiet tmp2 hecho
Hacer de cualquier proceso un servidor
netcat
se puede utilizar para convertir cualquier proceso en un servidor de red. Puede escuchar en un puerto y canalizar la entrada que recibe a ese proceso.
La -e
opción genera el ejecutable con su entrada y salida redirigidas a través de un conector de red.
Por ejemplo, es posible exponer un proceso de bourne shell a equipos remotos.
Para hacerlo, en una computadora A con dirección IP 192.168.1.2, ejecute este comando:
$ nc -l -p 1234 -e / bin / sh
Luego, desde cualquier otra computadora en la misma red, se podría ejecutar este nc
comando:
$ nc 192 .168.1.2 1234 ls -la total 4288 drwxr-xr-x 15 usuarios ficticios 4096 2009-02-17 07:47. drwxr-xr-x 4 usuarios ficticios 4096 2009-01-18 21:22 .. -rw ------- 1 usuarios ficticios 8192 2009-02-16 19:30 .bash_history -rw-r - r- - 1 usuarios ficticios 220 2009-01-18 21:04 .bash_logout ...
De esta forma, la -e
opción se puede utilizar para crear una puerta trasera rudimentaria . Algunos administradores perciben esto como un riesgo y, por lo tanto, no lo permiten netcat
en una computadora.
ncat
Ncat es una herramienta similar a netcat proporcionada por la suite Nmap . [5] "Si bien Ncat no se basa en ningún código del Netcat" tradicional "(o cualquier otra implementación), Ncat definitivamente se basa en Netcat en espíritu y funcionalidad". [6]
Las características de Ncat incluyen: capacidad para encadenar Ncats, redirigir puertos TCP y UDP a otros sitios, compatibilidad con SSL y conexiones de proxy a través de proxies SOCKS4 o HTTP (método CONNECT) (con autenticación de proxy opcional también). [7]
- Conéctese a example.org en el puerto TCP 8080.:
ncat example.org 8080
- Escuche las conexiones en el puerto TCP 8080.:
ncat -l 8080
- Redirigir el puerto TCP 8080 en la máquina local al host en el puerto 80.:
ncat --sh-exec "ncat example.org 80" -l 8080 --keep-open
- Conéctese al puerto TCP 8081 y adjunte / bin / bash para que el mundo acceda libremente. :
ncat --exec "/bin/bash" -l 8081 --keep-open
- Vincule un shell al puerto TCP 8081, limite el acceso a los hosts en una red local y limite el número máximo de conexiones simultáneas a 3:
ncat --exec "/bin/bash" --max-conns 3 --allow 192.168.0.0/24 -l 8081 --keep-open
- Conéctese a smtphost: 25 a través de un servidor SOCKS4 en el puerto 1080:
ncat --proxy socks4host --proxy-type socks4 --proxy-auth user smtphost 25
- Cree un servidor proxy HTTP en el puerto localhost 8888.:
ncat -l --proxy-type http localhost 8888
- Envíe un archivo a través del puerto TCP 9899 desde host2 (cliente) a host1 (servidor).
usuario @ HOST1 $ ncat -l 9899 > archivo de salida usuario @ HOST2 $ ncat HOST1 9899 < archivo de entrada
- Transfiera en la otra dirección, convirtiendo Ncat en un servidor de "un archivo".
usuario @ HOST1 $ ncat -l 9899
usuario @ HOST2 $ ncat HOST1 9899 > archivo de salida
Transferencia de archivos encriptados
Suponga que tiene un túnel SSH y desea copiar un archivo a la máquina remota. Podrías scp
hacerlo directamente, pero eso abre otra conexión. El objetivo es reutilizar la conexión existente. Puede usar netcat para hacer esto:
Cuando ingrese SSH, agregue -L 31000:127.0.0.1:31000
(esto es reenvío de puertos, enviando todo desde el puerto 31000 en la máquina remota al mismo puerto en la máquina local)
- En el control remoto:
ncat -lvnp 31000 127.0.0.1 > file
- En el local:
ncat -v -w 2 127.0.0.1 31000 < file
Sin gastos generales adicionales. TCP se encarga de la corrección de errores. SSH ya ha cifrado la tubería.
Puertos y reimplementaciones
La versión original de netcat era un programa Unix . La última versión (1.10) se publicó en marzo de 1996 [2].
Hay varias implementaciones en sistemas POSIX , incluyendo reescrituras desde cero como GNU netcat [8] u OpenBSD netcat, [9] la última de las cuales soporta IPv6 y TLS . La versión de OpenBSD se ha portado a la base de FreeBSD [10] y Windows / Cygwin. [11] Mac OS X viene con netcat instalado a partir de OSX 10.13 o los usuarios pueden usar MacPorts para instalar una variante. [12]
Una versión DOS de netcat llamada NTOOL se incluye en el grupo de redes de paquetes FreeDOS . [13] Se basa en la pila WatTCP y tiene licencia de la Licencia pública de la Unión Europea Versión 1.1. [14]
Los puertos conocidos para sistemas integrados incluyen versiones para Windows CE (llamadas "Netcat 4 wince" [15] ) o para iPhone . [dieciséis]
BusyBox incluye por defecto una versión ligera de netcat.
Solaris 11 incluye la implementación de netcat basada en OpenBSD netcat.
Socat [17] es una variante más compleja de netcat . Es más grande y flexible y tiene más opciones que deben configurarse para una tarea determinada. El 1 de febrero de 2016, Santiago Zanella-Beguelin y Microsoft Vulnerability Research emitieron un aviso de seguridad con respecto a un parámetro compuesto Diffie-Hellman que había sido codificado en la implementación OpenSSL de socat . [18] La inverosimilitud de que un compuesto pudiera haberse introducido involuntariamente donde se requiere un número primo ha llevado a sospechar de sabotaje para introducir una vulnerabilidad de software de puerta trasera . [19] Este error de socat afectó a la versión 1.7.3.0 y 2.0.0-b8 y se corrigió en las siguientes versiones de 1.7.3.1 y 2.0.0-b9. [18]
Cryptcat [20] es una versión de netcat con capacidades de cifrado de transporte integradas.
A mediados de 2005, Nmap anunció otra encarnación de netcat llamada Ncat. [5] Presenta nuevas posibilidades como "Intermediación de conexiones", Redirección TCP / UDP, soporte de servidor y cliente SOCKS4, capacidad de "encadenar" procesos Ncat, proxy HTTP CONNECT (y encadenamiento de proxy), soporte de conexión / escucha SSL y dirección IP / filtrado de conexiones. Al igual que Nmap , Ncat es multiplataforma .
En algunos sistemas, las versiones modificadas o utilidades netcat similares reciben el nombre de comando (s) nc
, ncat
, pnetcat
, socat
, sock
, socket
, sbd
.
Ver también
- Lista de comandos de Unix
- Nmap
- OpenSSL
- Telnet
- Plink
- Remitente del paquete
- Agarrar pancartas
Referencias
- ↑ Hobbit (28 de octubre de 1995). "Nueva herramienta disponible: Netcat" . Lista de correo de Bugtraq . Consultado el 5 de junio de 2019 .
- ^ a b "Netcat 1,10" . nc110.sourceforge.net . 2008-02-14 . Consultado el 5 de junio de 2019 .
- ^ Giovanni Giacobbi (1 de noviembre de 2006). "El proyecto GNU Netcat" . Consultado el 22 de marzo de 2020 .
- ^ "Guía de usuarios de Ncat: ejecución de comandos" . Nmap . Consultado el 5 de junio de 2019 .
- ^ a b "Ncat - Netcat para el siglo XXI" . Nmap . 2009-07-08 . Consultado el 5 de junio de 2019 .
- ^ "ncat (1) - Guía de referencia de Ncat" . manpages.debian.org . 2016-12-18 . Consultado el 5 de junio de 2019 .
- ^ https://nmap.org/ncat/
- ^ Giovanni Giacobbi (1 de noviembre de 2006). "El proyecto GNU Netcat" . Consultado el 5 de junio de 2019 .
- ^ "OpenBSD CVSWeb: /src/usr.bin/nc/" . OpenBSD . Consultado el 5 de junio de 2019 .
- ^ delphij (6 de febrero de 2005). "Contenido de /release/5.4.0/usr.bin/nc/Makefile" . FreeBSD . Consultado el 5 de junio de 2019 .
- ^ Thomas Linden (2 de marzo de 2011). "Puerto Netcat OpenBSD Cygwin 1.10.2.3" . Daemon.de . Consultado el 5 de junio de 2019 .
- ^ "MacPorts Portfiles: netcat" . MacPorts . Consultado el 5 de junio de 2019 .
- ^ "ibiblio.org FreeDOS Group - Redes" . ibiblio . 2019-03-03 . Consultado el 5 de junio de 2019 .
- ^ Jürgen Hoffmann (3 de noviembre de 2018). "varias herramientas" . Consultado el 5 de junio de 2019 .
- ^ Andreas Bischoff (7 de junio de 2010). "Netcat 4 se estremece" . Consultado el 5 de junio de 2019 .
- ^ "Revisión 835: / trunk / data / netcat" . 2008-08-18 . Consultado el 5 de junio de 2019 .
- ^ "socat - Relé multiusos" . 2019-04-06 . Consultado el 5 de junio de 2019 .
- ^ a b "Aviso de seguridad de Socat 7" . 2016-02-01 . Consultado el 5 de junio de 2019 .
- ^ Chirgwin, Richard (3 de febrero de 2016). "Socat cierra la puerta trasera, provoca una novela de novela emocionante" . El registro . Consultado el 5 de junio de 2019 .
- ^ "Proyecto CryptCat" . 2005-10-18 . Consultado el 5 de junio de 2019 .
enlaces externos
- Página web oficial
- - Manual de comandos de usuario de Linux