Netcat não funciona (pelo menos, não que eu possa dizer)

0
Na noite passada, descobri que netcat, estava se comportando ... bem, estranhamente, para dizer o mínimo. Quando invocado (não usei flags, apenas o básico "netcat [nome do host] [número da porta]), ele faria uma das duas coisas dependendo do que estava sendo usado. Ou seja, ele se comportava de forma um pouco diferente se eu executasse uma ação script que usa o netcat, ao invés de usá-lo na linha de comando. O script, que também usava o eco para fornecer uma solicitação HEAD na porta 80, solicitaria a entrada do usuário normalmente. Imediatamente depois de pressionar enter, o script instantaneamente fim e me retornar à linha de comando.Na linha de comando, porém, invocar netcat com um nome de host e número de porta iria iniciar uma nova linha sem linha de comando.Depois de alguns segundos, ele iria para a próxima linha e eu Resumindo, tentei consertá-lo usando sudo para remover os arquivos netcat de / bin / (em retrospectiva, não sei por que achei que ajudaria) antes de perceber imediatamente que eu tinha estragado e nunca depois de backup, então eu reinstalei a VM, que retornou netcat para a ordem de trabalho. Agora, porque está fazendo a mesma coisa novamente. Existe algo que eu possa fazer para solucionar isso?
EDIT: Eu não sabia que ainda estou executando 13.04, o que poderia (espero) ter algo a ver com o netcat não está funcionando. Quando eu tiver a versão 14.04 em execução, verei se o netcat funciona novamente e edite a pergunta novamente para compartilhar os resultados. Se funcionar, também esperarei por um ou dois dias para ver se o problema reaparece. Se isso não acontecer, adicionarei uma resposta.
Edição: Agora estou muito confuso. O Netcat ainda estava se comportando da mesma maneira depois que eu atualizei para o 14.04. Pior ainda, o problema não foi corrigido, mesmo temporariamente, reinstalando o 14.04 por meio de um .iso. Se alguém puder me ajudar a consertar isso, eu ficaria extremamente grato.

    
por Pierce 10.07.2014 / 03:28

1 resposta

0

Seu exemplo, INPUT=hostname; echo -e "HEAD / HTTP/1.1\nhost: $INPUT\n\n" | nc $INPUT 80 , funciona na linha de comando (mostra o resultado ok do servidor), mas não quando colocado em um script, contendo apenas a linha (mostra erro de solicitação incorreto do servidor).

É causada por uma complicada incompatibilidade de shell relacionada a dash :

Você executa o shell script com o shell minimalista /bin/dash - que também está vinculado como /bin/sh , o shell padrão. É usado quando não há linha "shebang" ou #!/bin/sh .

O problema é causado pelo comando echo builtin do dash, que não suporta a opção -e . O -e é literalmente passado como parte da solicitação HTTP - o que faz com que o servidor retorne um erro "400 Bad Request".

Para corrigir, use bash em vez de dash , por exemplo, usando a primeira linha de script #!/bin/bash

    
por Volker Siegel 10.07.2014 / 04:32