Questão Como baixar um URL da internet pelo netcat?


Eu posso usar netcat para transferir arquivos entre dois computadores.

# Server
nc -l -p 8080 < file

# client
nc 192.168.1.101 8080 > file

Eu posso usar netcat para baixar um URL da Internet como wget?


3


origem




Respostas:


Supondo que você esteja falando de um URL HTTP comum, é possível, mas requer que você digite manualmente a solicitação HTTP. Se o URL exigir um HTTP POST com um formulário com codificação de URL ou procurar cabeçalhos específicos, isso pode ser bastante incômodo.

Você precisará fornecer uma solicitação HTTP válida para o stdin do netcat. A ideia geral é:

Execute o comando nc example.com 80

O netcat começará a ler a partir de stdin, e tudo o que você digitar ou colar no terminal será enviado pela rede para o servidor remoto na porta selecionada (80 é a porta HTTP padrão).

Agora você precisa digitar ou colar uma solicitação HTTP, como:

GET / HTTP/1.1
Host: example.com
User-Agent: netcat

Você também precisará de algumas novas linhas no final, então pressione enter repetidamente até obter a resposta HTTP de volta. Então você terá que analisar manualmente a resposta.

O netcat funciona na camada TCP, portanto, qualquer protocolo baseado em HTTP pode tecnicamente ser usado com o netcat, mas para protocolos que não se adequam à entrada humana (como ssh e https), pode ser difícil usá-lo se você não for scripting de um programa. E se você está escrevendo um programa, por que você não está apenas usando soquetes TCP normais?

As limitações do netcat para este fim são as seguintes:

  • O netcat não entende HTTP, FTP, HTTPS, SSH ou qualquer outro protocolo de camada de aplicativo. Qualquer que seja o script, o programa ou a codificação manual que você usar, essa entrada precisará ter conhecimento suficiente do protocolo de fio da camada de aplicativo para interagir adequadamente com o servidor.
  • Mesmo protocolos simples como o HTTP podem ter complicações que exigem conhecimento detalhado do protocolo - codificação em partes, formulários codificados em url, comportamento diferente dependendo dos cookies fornecidos, agente do usuário, etc, e HTTPS que requerem um handshake SSL bem-sucedido. Eu não conheço ninguém que possa digitar manualmente um handshake SSL usando apenas o cérebro deles :)
  • Desde netcat é burro, ele fornece não vantagens sobre apenas usando um soquete TCP programático se você estiver escrevendo um programa. Se você está apenas digitando no terminal, é mais fácil usar um programa que suporte protocolos de camada de aplicativo apropriados, como wget, curl, lftp, ssh e assim por diante.

6





# create a request file
$ cat req
GET / HTTP/1.1
Host: superuser.com
User-Agent: Mozilla/5.0

# send request to get response
$ nc superuser.com 80 <req >res

1