netcat nello script della shell fornisce una connessione non valida


13

Ho uno script di shell che usa netcatper ascoltare localhostsulla porta 1111 per richieste web. Ogni volta che provo ad accedere localhost:1111/index.htmlad esempio ottengo:

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

il numero alla fine (60038) sembra aumentare ogni volta che accedo localhost.

Qualche suggerimento su cosa non va? E qual è la default localhostdirectory? Dove dovrei metterne uno index.htmlche localhost:1111/index.htmlfunzioni?

MODIFICARE

ecco lo script 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

Il numero alla fine è la porta di origine, che viene scelta casualmente; questa è la porta utilizzata dal tuo browser per aprire la richiesta in uscita. Non ti preoccupare. Puoi pubblicare la tua netcatriga di comando? Il messaggio "connessione non valida" proviene da netcato un altro strumento?
MR

Ho appena aggiunto lo script completo. Non sono sicuro che netcat stia dando il messaggio, potrebbe essere impostato. Non sono sicuro di che set fa anche!
MinaHany

Quella sceneggiatura è il lato dell'ascolto. Puoi pubblicare anche il lato client?
jw013

Risposte:


6

Lo script originale richiede che la connessione provenga da un host denominato localhost, ma per qualche motivo il filtro non riesce. Insolito, perché corrisponde esattamente al nome elencato nell'errore:invalid connection to [127.0.0.1] from localhost [127.0.0.1] 60038

Questo comando ascolterà sull'interfaccia di localhostrete (e ignorerà le richieste da altre interfacce, come la tua 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"
'

Se vuoi ascoltare le richieste su tutte le interfacce, puoi eliminare del -stutto la parte:

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

Sul mio sistema, se voglio fare lo stesso tipo di filtro host di origine senza -s, devo usare uno 127.0.0.1o localhost.localdomain:

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

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

In ogni caso, una delle opzioni sopra dovrebbe funzionare per te:

$ 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
$

Molte grazie! cambiando localhost in 127.0.0.1 sembrava fare il trucco su Firefox. Chrome sta gestendo le cose in modo diverso immagino.
MinaHany il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.