Información blog

Linux, tutoriales, noticias, sistemas, redes y seguridad informática, entre otras cosas.

martes, 8 de marzo de 2016

Rizando el rizo: Curl, una evolución de wget

La mayoría de las personas que hemos comenzado a interactuar con una shell, hemos llegado a notar que en bastantes ocasiones necesitamos navegar por Internet o que necesitamos realizar transferencias con otros elementos de red, tales como páginas web... Debido a que se carece de un navegador, es necesario recurrir a ciertos elementos de la consola, de los cuales hay uno especialmente conocido llamado wget. Dicho recurso ha sido usado durante años con bastante eficiencia pero hoy en día existen herramientas más avanzadas que pueden hacer la misma tarea e incluso más acciones; una de ellas se llama curl. Mientras que wget es usado para descargarse archivos simples, curl puede descargar archivos , htmls,  conjuntos de archivos, etc... ¡Incluso puede interactuar con un proxy! Es decir que puede considerarse una herramienta mejorada de su "predecesora", que es muy interesante conocer.


Es por eso que lo primero que habría que tener en cuenta es que curl , a diferencia de wget, no suele estar instalado en muchas distribuciones e incluso en alguna de éstas solo viene instalado en los CDs completos y no en las versiones "net install" con lo que qué mejor que asegurarnos de que esta utilidad se encuentra realmente instalada. Aunque curl viene ya incluido en la gran mayoría de los repositorios actuales, con el fin de evitar que nadie se quede sin poder usar esta utilidad recurriremos al método manual, es decir a la descarga, compilación e instalación del paquete.Esto se consigue recurriendo primero al comando wget (sí, irónicamente usaremos esta herramienta para instalar a su sucesor); en este caso estaríamos descargando la versión 7.47.1, pero si leéis este articulo en el futuro puede que la versión actual sea superior:

wget "https://curl.haxx.se/download/curl-7.47.1.tar.gz"

Tras un rato usaríamos una de las combinaciones más usadas para tratar los paquetes de este tipo; la mundialmente conocida combinación de:

make && make install

Pasados unos minutos ya tendremos la utilidad instalada y completamente operativa, con lo que perfectamente podemos empezar a usar curl y "descartar" el uso de wget. Para ello lo mejor es ir viendo paulatinamente los usos que ofrece curl.

Comencemos con la operación más básica de todas, la descarga de un archivo, es decir la que emularía a su predecesor; aquí hemos de ser un poco más cuidadosos que con wget, ya que es necesario usar el parámetro -o seguido del nombre que le queremos asignar al fichero a descargar; para que tengáis una idea más clara de cómo funciona dicho comando he aquí un pequeño ejemplo en el que descargaríamos el mismo archivo que antes pero con curl:

curl -o descarga.tar.gz "https://curl.haxx.se/download/curl-7.47.1.tar.gz"

Este mismo concepto puede ser aplicado para descargarnos un html de una página web, es decir que en vez de bajarnos un fichero simple, el mismo comando sería válido para un html, por ejemplo, este comando podría aplicarse para este blog:

curl -o pagina.html "http://bytelearning.blogspot.com.es"

Si en vez de querer poner un nombre personalizado queremos poner el mismo nombre que el del archivo original, podemos hacer uso del parámetro -O; es decir que para los dos ejemplos anteriores sería así:

  1. curl -O "https://curl.haxx.se/download/curl-7.47.1.tar.gz"
  2. curl -O "http://bytelearning.blogspot.com.es"

Tal y como he comentado antes, curl también puede interactuar con varios ficheros, es decir que puede por ejemplo descargarse tres ficheros en vez de uno; eso se realiza mediante uso de rangos muy parecidos a los usados en sentencias find; Por ejemplo podemos decir que queremos descargarnos ficheros que tengan la misma nomenclatura inicial, pero que su última letra se diferente (de la a a la z), o que queremos descargarnos todas las versiones de un programa... Si quisiésemos aplicar esto último sobre curl (por ejemplo) podríamos hacer uso de la siguiente sentencia:

curl -O "https://curl.haxx.se/download/curl-[0-9].[1-50].[0-9].tar.gz"

Obviamente curl puede hacer más cosas a parte de descargar ficheros; también puede subirlos a un destino vía ftp, es decir que sirve tanto para transferencias de subida como de bajada; en este caso el parámetro usado cambiaría, ya que haríamos uso del parámetro -T; un ejemplo de su uso podría ser el siguiente:

curl -T "archivo.txt" ftp://192.168.1.8/ftpserver/

Estas funcionalidades son la mar de interesantes, especialmente la de la subida de archivos ya que con una sola herramienta puedes englobar varias opciones, pero hay una funcionalidad que a mí personalmente me llama mucho la atención y es la interacción de curl con un proxy. A veces no es posible interactuar directamente con el "exterior" y necesitamos recurrir al uso de proxys, o simplemente queremos que la ip de origen de la "recogida" de datos no sea la nuestra; es por eso que mediante cups podemos hacer que pase por una dirección ip que haga de enmascarador; esto se conseguiría gracias al parámetro -x y tendría la siguiente estructura:

curl -x URL_proxy:puerto usuario:contraseña

Después de dicha estructura tendríamos que añadir la acción a realizar (-o, -O, -t...) junto con la URL final... Usando como base esa estructura un ejemplo que podríamos elaborar, tomando como referencia ejemplos anteriores y usando como puerto el de por defecto de bind9, sería:

curl -x 192.168.1.10:3128 ivan:ivan "http://bytelearning.blogspot.com.es"

Con esto haríamos una conexión la URL pasando a través de un proxy que enmascararía nuestra ip; el fin de dicha utilidad no es realizar actividades ilícitas, sino que está diseñada para poder acceder a archivos a los que nos sería imposible acceder sin dicho proxy.

Estas son las funciones más conocidas y usadas dentro de curl, pero esto podría considerase como la punta del iceberg; curl puede rizar el rizo de varias maneras y usar muchos parámetros "pequeños" para ayudarnos a hilar fino; aún así, teniendo estos conceptos básicos acumulados, no tendría que sernos dificil aventurarnos con el resto; simplemente habría que jugar con las diferentes posibilidades hasta encontrar la más adecuada de todas... Una buena ayuda para orientarnos por este basto abanico de posibilidades sería el uso del poderoso man.

Espero que os haya resultado útil.

Saludos.

No hay comentarios :

Publicar un comentario