Cuando ejecuto este comando cat index.html | nc -lnvp 2222 y luego abra la dirección local del servidor en el navegador con este encabezado: GET / HTTP/1.1 Host: 192.168.146.131:2222 User-Agent: "my user agent here" Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: de,en-US;q=0.7,en;q=0.3 Accept-Encoding: gzip, deflate DNT: 1 Connection: keep-alive
y esto como el index.html: hi whats up (eso es todo)
Recibo la solicitud http en la terminal donde se ejecuta netcat y mi navegador en mi otra máquina está esperando. Solo cuando hago CTRL-C la conexión en el terminal obtengo la respuesta en el navegador.
Mi uname -a imprime: Linux kali 4.0.0-kali1-amd64 #1 SMP Debian 4.0.4-1+kali2 (2015-06-03) x86_64 GNU/Linux
Cuando trato de usar cat index.html | nc -l 2222 no funciona en absoluto. Mi máquina Kali ni siquiera recibe una solicitud http. Cuando pruebo lo mismo en una máquina Ubuntu, funciona como quiero que funcione: simplemente envía el index.html al navegador sin esperar a que yo presione CTRL-C netcat.
¿Alguien tiene una idea de por qué netcat se comporta tan raro?
Hay dos netcat s diferentes, y estás usando uno de cada uno:
El netcat tradicional evitará cerrar la conexión de forma predeterminada, porque el cliente podría enviar más datos.
OpenBSD netcat cierra la conexión por defecto cuando no hay más datos para enviar.
Las versiones antiguas de HTTP (como las que está utilizando) esperan que la conexión se cierre, por lo que funciona de manera predeterminada con OpenBSD netcat.
También puede hacer que netcat tradicional cierre la conexión en eof, usando -q 0 :
stuff | nc.traditional -l -p 2222 -q 0man nc escribe:
"netcat sigue ejecutándose hasta que se cierra el lado de la red ", por lo que su navegador esperará para siempre a que finalicen los datos. Use la opción -q para salir, vea la página del manual nuevamente: "después de EOF en stdin, espere el número especificado de segundos y luego salga".
cat index.html | nc -lnvp 2222 -q 0 nc -l 2222 no tiene sentido, necesita usar -p para especificar el puerto.