Una de las utilidades más utilizadas por sysadmin es wget. Puede ser muy útil durante la resolución de problemas relacionados con la web.
Tabla de contenido
¿Qué es el comando wget?
El comando wget es una popular utilidad de línea de comandos de Unix/Linux para obtener contenido de la web. Es de uso gratuito y proporciona una forma no interactiva de descargar archivos de la web. El comando wget es compatible con los protocolos HTTPS, HTTP y FTP listos para usar. Además, también puede usar proxies HTTP con él.
¿Cómo lo ayuda wget a solucionar problemas?
Hay muchas maneras.
Como administrador de sistemas, la mayor parte del tiempo, trabajará en una terminal y, al solucionar problemas relacionados con aplicaciones web, es posible que no desee verificar toda la página, sino solo la conectividad. O bien, desea verificar los sitios web de la intranet. O bien, desea descargar una página determinada para verificar el contenido.
wget no es interactivo, lo que significa que puede ejecutarlo en segundo plano incluso cuando está desconectado. Puede haber muchos casos en los que sea esencial que se desconecte del sistema incluso al recuperar archivos de la web. En segundo plano, el wget se ejecutará y finalizará el trabajo asignado.
También se puede usar para obtener todo el sitio web en sus máquinas locales. Puede seguir enlaces en páginas XHTML y HTML para crear una versión local. Para ello, tiene que descargar la página de forma recursiva. Esto es muy útil ya que puede usarlo para descargar páginas o sitios importantes para verlos sin conexión.
Veámoslos en acción. La sintaxis del wget es la siguiente.
wget [option] [URL]
Descargar una página web
Intentemos descargar una página. Ej: github.com
wget github.com
Si la conectividad está bien, descargará la página de inicio y mostrará el resultado como se muestra a continuación.
[email protected]:~# wget github.com URL transformed to HTTPS due to an HSTS policy --2020-02-23 10:45:52-- https://github.com/ Resolving github.com (github.com)... 140.82.118.3 Connecting to github.com (github.com)|140.82.118.3|:443... connected. HTTP request sent, awaiting response... 200 OK Length: unspecified [text/html] Saving to: ‘index.html’ index.html [ <=> ] 131.96K --.-KB/s in 0.04s 2020-02-23 10:45:52 (2.89 MB/s) - ‘index.html’ saved [135126] [email protected]:~#
Descargar varios archivos
Útil cuando tienes que descargar varios archivos a la vez. Esto puede darle una idea sobre cómo automatizar la descarga de archivos a través de algunos scripts.
Intentemos descargar los archivos de Python 3.8.1 y 3.5.1.
wget https://www.python.org/ftp/python/3.8.1/Python-3.8.1.tgz https://www.python.org/ftp/python/3.5.1/Python-3.5.1.tgz
Entonces, como puede adivinar, la sintaxis es la siguiente.
wget URL1 URL2 URL3
Solo tienes que asegurarte de dejar espacio entre las URL.
Limitar la velocidad de descarga
Sería útil cuando desee comprobar cuánto tiempo tarda su archivo en descargarse con un ancho de banda diferente.
Con la opción –limit-rate, puede limitar la velocidad de descarga.
Aquí está el resultado de la descarga del archivo Nodejs.
[email protected]:~# wget https://nodejs.org/dist/v12.16.1/node-v12.16.1-linux-x64.tar.xz --2020-02-23 10:59:58-- https://nodejs.org/dist/v12.16.1/node-v12.16.1-linux-x64.tar.xz Resolving nodejs.org (nodejs.org)... 104.20.23.46, 104.20.22.46, 2606:4700:10::6814:162e, ... Connecting to nodejs.org (nodejs.org)|104.20.23.46|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 14591852 (14M) [application/x-xz] Saving to: ‘node-v12.16.1-linux-x64.tar.xz’ node-v12.16.1-linux-x64.tar.xz 100%[===========================================================================================>] 13.92M --.-KB/s in 0.05s 2020-02-23 10:59:58 (272 MB/s) - ‘node-v12.16.1-linux-x64.tar.xz’ saved [14591852/14591852]
Se tardó 0,05 segundos en descargar archivos de 13,92 MB. Ahora, intentemos limitar la velocidad a 500K.
[email protected]:~# wget --limit-rate=500k https://nodejs.org/dist/v12.16.1/node-v12.16.1-linux-x64.tar.xz --2020-02-23 11:00:18-- https://nodejs.org/dist/v12.16.1/node-v12.16.1-linux-x64.tar.xz Resolving nodejs.org (nodejs.org)... 104.20.23.46, 104.20.22.46, 2606:4700:10::6814:162e, ... Connecting to nodejs.org (nodejs.org)|104.20.23.46|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 14591852 (14M) [application/x-xz] Saving to: ‘node-v12.16.1-linux-x64.tar.xz.1’ node-v12.16.1-linux-x64.tar.xz.1 100%[===========================================================================================>] 13.92M 501KB/s in 28s 2020-02-23 11:00:46 (500 KB/s) - ‘node-v12.16.1-linux-x64.tar.xz.1’ saved [14591852/14591852]
Reducir el ancho de banda tomó más tiempo para descargar: 28 segundos. Imagínese, sus usuarios se quejan de la descarga lenta y usted sabe que el ancho de banda de su red es bajo. Puede probar rápidamente –limit-rate para simular el problema.
Descargar en segundo plano
La descarga de archivos grandes puede llevar tiempo o el ejemplo anterior en el que también desea establecer el límite de velocidad. Esto es de esperar, pero ¿y si no quieres mirar tu terminal?
Bueno, puede usar el argumento -b para iniciar wget en segundo plano.
[email protected]:~# wget -b https://slack.com Continuing in background, pid 25430. Output will be written to ‘wget-log.1’. [email protected]:~#
Ignorar error de certificado
Esto es útil cuando necesita verificar las aplicaciones web de la intranet que no tienen el certificado adecuado. De forma predeterminada, wget arrojará un error cuando un certificado no sea válido.
[email protected]:~# wget https://expired.badssl.com/ --2020-02-23 11:24:59-- https://expired.badssl.com/ Resolving expired.badssl.com (expired.badssl.com)... 104.154.89.105 Connecting to expired.badssl.com (expired.badssl.com)|104.154.89.105|:443... connected. ERROR: cannot verify expired.badssl.com's certificate, issued by ‘CN=COMODO RSA Domain Validation Secure Server CA,O=COMODO CA Limited,L=Salford,ST=Greater Manchester,C=GB’: Issued certificate has expired. To connect to expired.badssl.com insecurely, use `--no-check-certificate'.
El ejemplo anterior es para la URL en la que ha caducado el certificado. Como puede ver, ha sugerido usar –no-check-certificate que ignorará cualquier validación de certificado.
[email protected]:~# wget https://untrusted-root.badssl.com/ --no-check-certificate --2020-02-23 11:33:45-- https://untrusted-root.badssl.com/ Resolving untrusted-root.badssl.com (untrusted-root.badssl.com)... 104.154.89.105 Connecting to untrusted-root.badssl.com (untrusted-root.badssl.com)|104.154.89.105|:443... connected. WARNING: cannot verify untrusted-root.badssl.com's certificate, issued by ‘CN=BadSSL Untrusted Root Certificate Authority,O=BadSSL,L=San Francisco,ST=California,C=US’: Self-signed certificate encountered. HTTP request sent, awaiting response... 200 OK Length: 600 [text/html] Saving to: ‘index.html.6’ index.html.6 100%[===========================================================================================>] 600 --.-KB/s in 0s 2020-02-23 11:33:45 (122 MB/s) - ‘index.html.6’ saved [600/600] [email protected]:~#
Genial, ¿no?
Vea el encabezado de respuesta HTTP de un sitio determinado en la terminal.
El uso de -S imprimirá el encabezado, como puede ver a continuación para Coursera.
[email protected]:~# wget https://www.coursera.org -S --2020-02-23 11:47:01-- https://www.coursera.org/ Resolving www.coursera.org (www.coursera.org)... 13.224.241.48, 13.224.241.124, 13.224.241.82, ... Connecting to www.coursera.org (www.coursera.org)|13.224.241.48|:443... connected. HTTP request sent, awaiting response... HTTP/1.1 200 OK Content-Type: text/html Content-Length: 511551 Connection: keep-alive Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0 Date: Sun, 23 Feb 2020 11:47:01 GMT etag: W/"7156d-WcZHnHFl4b4aDOL4ZSrXP0iBX3o" Server: envoy Set-Cookie: CSRF3-Token=1583322421.s1b4QL6OXSUGHnRI; Max-Age=864000; Expires=Wed, 04 Mar 2020 11:47:02 GMT; Path=/; Domain=.coursera.org Set-Cookie: __204u=9205355775-1582458421174; Max-Age=31536000; Expires=Mon, 22 Feb 2021 11:47:02 GMT; Path=/; Domain=.coursera.org Strict-Transport-Security: max-age=31536000; includeSubDomains; preload X-Content-Type-Options: nosniff x-coursera-render-mode: html x-coursera-render-version: v2 X-Coursera-Request-Id: NCnPPlYyEeqfcxIHPk5Gqw X-Coursera-Trace-Id-Hex: a5ef7028d77ae8f8 x-envoy-upstream-service-time: 1090 X-Frame-Options: SAMEORIGIN x-powered-by: Express X-XSS-Protection: 1; mode=block X-Cache: Miss from cloudfront Via: 1.1 884d101a3faeefd4fb32a5d2a8a076b7.cloudfront.net (CloudFront) X-Amz-Cf-Pop: LHR62-C3 X-Amz-Cf-Id: vqvX6ZUQgtZAde62t7qjafIAqHXQ8BLAv8UhkPHwyTMpvH617yeIbQ== Length: 511551 (500K) [text/html]
Manipular el agente de usuario
Puede haber una situación en la que desee conectar un sitio mediante un agente de usuario personalizado. O el agente de usuario del navegador específico. Esto se puede hacer especificando –user-agent. El siguiente ejemplo es para el agente de usuario como MyCustomUserAgent.
[email protected]:~# wget https://gf.dev --user-agent="MyCustomUserAgent"
Cuando una aplicación aún está en desarrollo, es posible que no tenga una URL adecuada para probarla. O bien, es posible que desee probar una instancia HTTP individual mediante IP, pero debe proporcionar el encabezado del host para que la aplicación funcione correctamente. En esta situación, –header sería útil.
Tomemos un ejemplo de prueba http://10.10.10.1 con encabezado de host como application.com
wget --header="Host: application.com" http://10.10.10.1
No solo aloja, sino que puedes inyectar cualquier encabezado que desees.
Conéctate usando Proxy
Si está trabajando en un entorno DMZ, es posible que no tenga acceso a sitios de Internet. Pero puede aprovechar el proxy para conectarse.
wget -e use_proxy=yes http_proxy=$PROXYHOST:PORT http://externalsite.com
No olvide actualizar la variable $PROXYHOST:PORT con las reales.
Conéctese usando un protocolo TLS específico
Por lo general, recomendaría usar OpenSSL para probar el protocolo TLS. Pero también puedes usar wget.
wget –protocolo seguro=TLSv1_2 https://example.com
Lo anterior obligará a wget a conectarse a través de TLS 1.2.
Conclusión
Conocer el comando necesario puede ayudarte en el trabajo. Espero que lo anterior le dé una idea de lo que puede hacer con wget.