
Quando tento executar o seguinte comando:
echo -e "GET / HTTP/1.1\n\n" | /dev/tcp/74.125.225.19/80
Eu recebi a seguinte mensagem de erro:
bash: /dev/tcp/74.125.225.19/80: No such file or directory
O comando a seguir funciona perfeitamente, então o problema envolve como estou usando /dev/tcp
:
echo -e "GET / HTTP/1.1\n\n" | nc 74.125.225.19 80
Estou no Ubuntu 13.04, então a capacidadedeveestar no meu sistema. O que estou fazendo de errado? Quais são as regras para usar /dev/tcp
corretamente?
Responder1
Você tem que usá-lo emredirecionamentos:
Bash lida com vários nomes de arquivos especialmente quando eles são usados em redirecionamentos, conforme descrito na tabela a seguir:
...
/dev/tcp/host/porta
Se host for um nome de host ou endereço de Internet válido e port for um número inteiro de porta ou nome de serviço, o Bash tentará abrir o soquete TCP correspondente.
Então:
printf "GET / HTTP/1.1\n\n" > /dev/tcp/74.125.225.19/80
é a maneira certa de usá-lo.
Quando você usou /dev/tcp/74.125.225.19/80
um pipe, bash
tentou executar um comando chamado /dev/tcp/74.125.225.19/80
e relatou um erro porque esse arquivo não existia.
A capacidade de manipular /dev/tcp/host/port
e /dev/udp/host/port
redirecionar foi adicionada bash
na versão 2.04.
Você precisa compilar bash
com --enable-net-redirections
a opção.