Como baixar um URL da internet pelo netcat?

3

Eu posso usar netcat para transferir arquivos entre dois computadores.

# Server
nc -l -p 8080 < file

# client
nc 192.168.1.101 8080 > file

Posso usar o netcat para fazer download de um URL da Internet como wget ?

    
por kev 16.11.2012 / 16:01

2 respostas

6

Supondo que você quer dizer uma URL HTTP comum, é possível, mas exige 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 complicado.

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 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 usar se você não são scripts 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 propósito 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 usada, essa entrada precisará ter conhecimento suficiente do protocolo de fio da camada de aplicativo para interagir adequadamente com o servidor.
  • Até mesmo protocolos simples como 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. Não conheço ninguém que possa digitar manualmente um handshake SSL usando apenas o cérebro deles:)
  • Como o netcat é burro, ele fornece vantagens no apenas ao usar 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 adequados da camada de aplicação, como wget, curl, lftp, ssh e assim por diante.
por 16.11.2012 / 16:17
1
# 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
    
por 16.11.2012 / 16:16

Tags