Como esperar por uma resposta no lado de entrada do socket usando o comando NC em BusyBox?

3

Estou tendo problemas ao usar o Netcat que vem com o BusyBox 1.1.3 para fazer uma solicitação HTTP e depois receber a resposta. O comando NC parece sair assim que atinge o final do arquivo de solicitação que estou enviando. A opção -w parece ser projetada para este caso, mas olhando para o código-fonte, não parece possível que a opção -w possa ter algum efeito no comportamento de recebimento.

O código fonte para esta versão NC no BusyBox está aqui ...

link

O que estou fazendo de errado? Existe alguma maneira de enviar um arquivo para um servidor através desta versão do NC e, em seguida, aguarde para receber uma resposta? Alguma idéia criativa de outras maneiras possíveis de fazer isso em um script?

Note que este é um sistema embarcado e eu não tenho a capacidade de atualizar a versão do BusyBox ou carregar novos executáveis - eu só posso usar arquivos de script e o executável do BusyBox já disponível. Observe também que não há WGET disponível no sistema.

Obrigado!

-josh

    
por bigjosh 02.01.2014 / 02:43

2 respostas

3

Tente isto:

(echo "GET / HTTP/1.0"; sleep 1) | nc HOST 80
    
por 10.11.2015 / 19:01
1

Tem certeza de que não está confuso sobre nc? A página de manual do BusyBox afirma:

nc
nc [OPTIONS] HOST PORT - connect nc [OPTIONS] -l -p PORT [HOST] [PORT] - listen

Options:

    -e PROG         Run PROG after connect (must be last)
    -l              Listen mode, for inbound connects
    -n              Don't do DNS resolution
    -s ADDR         Local address
    -p PORT         Local port
    -u              UDP mode
    -v              Verbose
    -w SEC          Timeout for connects and final net reads
    -i SEC          Delay interval for lines sent
    -o FILE         Hex dump traffic
    -z              Zero-I/O mode (scanning)

então parece que a opção para ouvir em uma porta é (a tradicional) -l , enquanto -w é o tempo limite para conexões e net final lê.

Se o seu problema é continuar ouvindo mesmo depois de uma conexão ter se fechado, você pode usar um laço eterno, enquanto verdadeiro nc -l ... .

Editar:

Depois de ler as mensagens, percebo que não entendi o que o OP estava pedindo. A razão pela qual eu não entendi é que você não pode usar uma instância nc para ambos enviarem e receber. Você precisa de uma porta separada e uma instância separada de nc para isso. Não há um meio para manter uma transmissão instância de nc aberta, se você não puder receber na mesma porta.

    
por 02.01.2014 / 09:22