netcat no shell script dando conexão inválida


13

Eu tenho um script de shell que usa netcatpara ouvir localhostna porta 1111 para solicitações da web. Toda vez que tento acessar, localhost:1111/index.htmlpor exemplo, recebo:

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

o número no final (60038) parece estar aumentando cada vez que acesso localhost.

Alguma sugestão sobre o que está errado? E qual é o default localhostdiretório? Onde devo colocar um index.htmlpara que localhost:1111/index.htmlfuncione?

EDITAR

aqui está o 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

O número no final é a porta de origem, escolhida aleatoriamente; essa é a porta usada pelo seu navegador para abrir a solicitação de saída. Não se preocupe com isso. Você pode postar sua netcatlinha de comando? A mensagem 'conexão inválida' vem de netcatoutra ferramenta?
Mrb 8/08

Acabei de adicionar o script completo. Não tenho certeza se o netcat está dando a mensagem, ela pode estar definida. Eu não tenho certeza do que o conjunto faz!
MinaHany 8/08

Esse script é o lado da escuta. Você também pode postar o lado do cliente?
Jw013

Respostas:


6

Seu script original requer que a conexão venha de um host nomeado localhost, mas por algum motivo a filtragem está falhando. Incomum, porque corresponde exatamente ao nome listado no erro:invalid connection to [127.0.0.1] from localhost [127.0.0.1] 60038

Este comando escutará na localhostinterface de rede (e ignorará solicitações de outras interfaces, como sua 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 você deseja escutar solicitações em todas as interfaces, pode soltar a -sparte completamente:

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

No meu sistema, se eu quiser fazer o mesmo tipo de filtragem de host de origem sem -s, preciso usar um 127.0.0.1ou localhost.localdomain:

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

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

De qualquer forma, uma das opções acima deve funcionar para você:

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

Muito obrigado! alterar localhost para 127.0.0.1 parecia fazer o truque no firefox. O Chrome está lidando com as coisas de maneira diferente, eu acho.
MinaHany #
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.