Com o comando telnet docs.python.org 80
, eu posso fazer uma solicitação HTTP manual para http://docs.python.org/2/license.html
, digitando a solicitação real.
Agora, em vez de digitá-lo ao vivo, gostaria de alimentar a solicitação de um arquivo de texto.
Eu tentei isso:
cat request.txt|telnet docs.python.org 80
request.txt :
GET /2/license.html HTTP/1.1
Host: docs.python.org
(Você precisa finalizar o arquivo com uma linha em branco ou poderá receber uma solicitação incorreta!)
Mas a conexão com o servidor é fechada imediatamente.
Como devo adequadamente tubulação request.txt para telnet docs.python.org 80
?
editar:
É bom saber; se você usar em HEAD
vez de GET
, receberá a mesma resposta como se tivesse feito uma GET
solicitação, exceto o corpo da mensagem.
Portanto, use HEAD
se você quiser apenas examinar os cabeçalhos HTTP. (ou seja, para que o conteúdo da resposta não atrapalhe a saída do shell.)
GET
você postou, recebo um408 Request Time-out
erro. Além disso,wget http://docs.python.org/2/license.html
não é uma opção?telnet docs.python.org 80
, então você precisa se apressar e digitar essas duas linhas (copiar e colar se necessário) dentro de alguns segundos ou o servidor retornará um erro de tempo limite.telnet docs.python.org 80
<ENTER>
GET /2/license.html HTTP/1.1
<ENTER>
Host: docs.python.org
<ENTER>
<ENTER>
<ENTER>
uma segunda vez no final é porque o protocolo HTTP requer uma linha vazia extra após os cabeçalhos da solicitação. Veja a seção de mensagem de solicitação do artigo da wiki HTTPtelnet < request.txt
mas não consigo que oGET
comando funcione.Respostas:
Use netcat (comando nc) em vez de "telnet", para
O Telnet é um hack rápido e fácil, mas o netcat é, aparentemente, a ferramenta correta para o trabalho.
fonte
Eu realmente não tenho nenhuma experiência com,
telnet
mas é preciso receber informações do redirecionamento de arquivo:Posso fazer com que ele se conecte ao servidor corretamente da seguinte maneira:
Talvez você possa descobrir como fazê-lo aceitar o
GET
comando, mas eu não consegui. Uma alternativa é usar umexpect
script:Você pode salvar o script como
telnet.exp
, torná-lo executável e executá-lo:fonte
expect
! Eu escolhi a resposta da davidgo porque é apenas a melhor solução para este caso. Não vejo diferença de uso entre netcap e telnet para o que eu queria alcançar. Obrigado pelo esforço, no entanto, Terdon, se eu pudesse votar mais na sua resposta, eu o faria.nc
é a melhor solução, você deve aceitá-lo.interact
é o caminho certo para terminar esseexpect
script.interact
"dá o controle do processo atual ao usuário, para que as teclas sejam enviadas ao processo atual e o stdout e o stderr do processo atual sejam retornados" (é deman expect
). Portanto,interact
é a maneira de fornecer ao usuário uma maneira de realmente usar a conexão telnet.telnet
vez de interagir com ele, acho que você deveria terminar comclose -i $spawn_id
algo assim. Então o script será encerrado. Cominteract
, na verdade, não consegui sairtelnet
e tive que fechar meu terminal. Bastante miserável (embora possa ter sido parcialmente culpa minha.)