netcat en el script de shell que proporciona una conexión no válida

13

Tengo un script de shell que se utiliza netcatpara escuchar en localhostel puerto 1111 las solicitudes web. Cada vez que intento acceder, localhost:1111/index.htmlpor ejemplo, obtengo:

invalid connection to [127.0.0.1] from localhost [127.0.0.1] 60038

El número al final (60038) parece estar aumentando cada vez que accedo localhost.

¿Alguna sugerencia sobre lo que va mal? ¿Y cuál es el default localhostdirectorio? ¿Dónde debo poner un index.htmlpara que localhost:1111/index.htmlfuncione?

EDITAR

Aquí está el guión completo:

#!/bin/sh
while true
do
netcat -vvl localhost -p 1111 -c '
    set -x
    read http_request
    echo HTTP/1.0 200 OK
    echo
    echo "Received HTTP request: $http_request"
'   
done
MinaHany
fuente
El número al final es el puerto de origen, que se elige al azar; ese es el puerto utilizado por su navegador para abrir la solicitud saliente. No te preocupes por eso. ¿Puedes publicar tu netcatlínea de comando? ¿El mensaje de "conexión no válida" proviene de netcatotra herramienta?
mrb
Acabo de agregar el script completo. No estoy seguro de si netcat está dando el mensaje, se puede configurar. ¡Aunque no estoy seguro de qué conjunto hace!
MinaHany
Ese guión es el lado que escucha. ¿También puedes publicar el lado del cliente?
jw013

Respuestas:

6

Su script original requiere que la conexión provenga de un host llamado localhost, pero por alguna razón, el filtrado está fallando. Inusual, porque coincide exactamente con el nombre que aparece en el error:invalid connection to [127.0.0.1] from localhost [127.0.0.1] 60038

Este comando escuchará en la localhostinterfaz de red (e ignorará las solicitudes de otras interfaces, como su LAN):

netcat -vvl -s localhost -p 1111 -c '
    set -x
    read http_request
    echo HTTP/1.0 200 OK
    echo
    echo "Received HTTP request: $http_request"
'

Si desea escuchar las solicitudes en todas las interfaces, puede descartar la -sparte por completo:

netcat -vvl -p 1111 -c '...'

En mi sistema, si quiero hacer el mismo tipo de filtrado de host de origen sin -s, necesito usar 127.0.0.1o localhost.localdomain:

netcat -vvl localhost.localdomain -p 1111 -c '...'

netcat -vvl 127.0.0.1 -p 1111 -c '...'

En cualquier caso, una de las opciones anteriores debería funcionar para usted:

$ netcat -vvl 127.0.0.1 -p 1111 -c '
quote>     set -x
quote>     read http_request
quote>     echo HTTP/1.0 200 OK
quote>     echo
quote>     echo "Received HTTP request: $http_request"
quote> '
listening on [any] 1111 ...
connect to [127.0.0.1] from localhost.localdomain [127.0.0.1] 35368
+ read http_request
+ echo HTTP/1.0 200 OK
+ echo
+ echo Received HTTP request: GET / HTTP/1.1
$
mrb
fuente
¡Muchas gracias! cambiar localhost a 127.0.0.1 parecía hacer el truco en firefox. Chrome está manejando las cosas de manera diferente, supongo.
MinaHany