¿Cómo podemos usar el netcat ( nc
) para determinar si una máquina en particular está ejecutando servicios web, de correo o SSH?
Para identificar si un servidor se está ejecutando, solo necesita determinar si el puerto está abierto para solicitudes. Usando netcat, puede consultar un servidor como este:
nc -z www.example.com 80
Esto te dirá si está escuchando en el puerto 80, el puerto web, pero no te dirá nada más sobre el servidor.
Para utilizar netcat para obtener más información, debe pasar los datos correctos para obtener una respuesta válida. Eso significa que debe comprender http si desea averiguar si está ejecutando un servidor web, smtp si está ejecutando un remitente de correo, etc. Debe saber en qué puerto se ejecuta un servidor web, el nombre del servidor, el protocolo , todo.
Este es un ejemplo simple de cómo determinaría si www.example.com alojaba un servidor web en vivo utilizando netcat.
echo -e "GET http://www.example.com HTTP/1.0\n\n" | nc www.example.com 80 | less
Si vuelve con una respuesta que contiene HTTP/1.0 200 OK
, está ejecutando un servidor web en el puerto 80. De lo contrario, puede que no esté ejecutando un servidor web típico.
Tendrá que descubrir y comprender los protocolos de los servidores de correo y los servidores ssh si desea consultarlos de manera similar.
Sin embargo, Netcat es realmente la herramienta incorrecta para este trabajo. Si desea identificar los tipos de servidores que está ejecutando un host, nmap es una herramienta mucho mejor, ya que se mantiene al día con las diversas huellas dactilares de los servidores comunes que probablemente encuentre.
Esto puede responder a su pregunta; Netcat puede hacer un escaneo de puertos:
"El escaneo de puertos es un método popular para explorar lo que hay por ahí. Netcat acepta sus comandos con opciones primero, luego el host de destino, y todo a partir de entonces se interpreta como nombres de puerto o números, o Rangos de puertos en sintaxis M-N. CUEVA: algunos nombres de puertos en
/etc/services
contiene guiones - netcat actualmente no lo hará correctamente analice esos, así que especifique rangos usando números si puede. Si mas de así se especifica un puerto, netcat se conecta a todos de ellos, enviando el mismo lote de datos desde la entrada estándar [hasta 8K] a cada uno que está conectado con éxito a Especificando múltiples puertos también suprime los mensajes de diagnóstico sobre conexiones rechazadas, a menos que-v
sea especificado dos veces para "más verbosidad". De esta manera usted normalmente obtiene Solo se le notifica acerca de conexiones realmente abiertas. Ejemplo:nc -v -w 2 -z target 20-30
intentará conectarse a cada puerto entre 20 y 30 [inclusive] en el destino, y probablemente le informará acerca de un FTP servidor, servidor telnet y correo en el camino. El interruptor-z
Evita el envío de datos a una conexión TCP y una sonda muy limitada. datos a una conexión UDP, y por lo tanto es útil como un modo de escaneo rápido Solo para ver en qué puertos está escuchando el objetivo. Para limitar el escaneo Si lo desea, a velocidad,-i
insertará un retraso entre cada sonda de puerto. Hay algunos escollos con respecto al escaneo UDP, que se describen más adelante, pero en general funciona bien ".
Como dije en superuser.com:
Sí, usa HPing para hacer eso:
$ sudo hping -S -p 80 google.com HPING google.com (p5p1 77.237.27.37): S set, 40 headers + 0 data bytes len=46 ip=77.237.27.37 ttl=58 id=25706 sport=80 flags=SA seq=0 win=29200 rtt=7.5 ms len=46 ip=77.237.27.37 ttl=58 id=25707 sport=80 flags=SA seq=1 win=29200 rtt=7.4 ms len=46 ip=77.237.27.37 ttl=58 id=25708 sport=80 flags=SA seq=2 win=29200 rtt=8.5 ms len=46 ip=77.237.27.37 ttl=58 id=25709 sport=80 flags=SA seq=3 win=29200 rtt=7.8 ms ^C --- google.com hping statistic --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 7.4/7.8/8.5 ms
Tenga en cuenta que necesita privilegios de root (o capacidades de SELinux) para crear paquetes de IP sin procesar, al igual que ping (que es más probable que suid en su sistema).
Fuente: enlace