¿Cómo descargar una URL desde internet por netcat?

3

Puedo usar netcat Para transferir archivos entre dos computadoras.

# Server
nc -l -p 8080 < file

# client
nc 192.168.1.101 8080 > file

Puedo usar netcat para descargar una URL de internet como wget?

kev
fuente

Respuestas:

6

Suponiendo que te refieres a una URL HTTP regular, es posible pero requiere que escribas manualmente la solicitud HTTP. Si la URL requiere un HTTP POST con un formulario codificado con url o busca encabezados específicos, esto puede ser bastante engorroso.

Deberá proporcionar una solicitud HTTP válida al stdin de netcat. La idea general es:

Ejecutar el comando nc example.com 80

netcat comenzará a leer desde stdiny todo lo que escriba o pegue en el terminal se enviará a través de la red al servidor remoto en el puerto que seleccionó (80 es el puerto HTTP predeterminado).

Ahora necesitas escribir o pegar una solicitud HTTP, como:

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

También necesitará algunas líneas nuevas al final, así que presione enter varias veces hasta que obtenga la respuesta HTTP. Entonces tendrás que analizar manualmente la respuesta.

netcat funciona en la capa TCP, por lo que cualquier protocolo basado en HTTP se puede usar técnicamente con netcat, pero para los protocolos que no se adaptan a la entrada humana (como ssh y https), puede ser difícil de usar si no lo está. scripting desde un programa. Y si ESTÁ escribiendo un programa, ¿por qué no está usando sockets TCP normales?

Las limitaciones de netcat para este propósito son las siguientes:

  • netcat no entiende HTTP, ni FTP, ni HTTPS, ni SSH, ni ningún otro protocolo de nivel de aplicación. Cualquiera que sea la secuencia de comandos, el programa o la codificación manual que use, esa entrada tendrá que tener un conocimiento suficiente del protocolo de conexión de capa de aplicación para poder interactuar adecuadamente con el servidor.
  • Incluso los protocolos simples como HTTP pueden tener complicaciones que requieren un conocimiento detallado del protocolo: codificación fragmentada, formularios con codificación url, comportamiento diferente según las cookies suministradas, el agente de usuario, etc. y HTTPS que requieren un protocolo de enlace SSL exitoso. No conozco a nadie que pueda ingresar manualmente un protocolo SSL usando solo su cerebro :)
  • Dado que netcat es tonto, proporciona no ventajas sobre el simple uso de un socket TCP programático si está escribiendo un programa. Si solo está escribiendo en el terminal, es más fácil usar un programa que admita los protocolos de capa de aplicación adecuados, como wget, curl, lftp, ssh, etc.
allquixotic
fuente
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
kev
fuente