Eines der von Sysadmin häufig verwendeten Dienstprogramme ist wget. Es kann bei der Fehlersuche im Web sehr nützlich sein.

Was ist der Befehl wget?

der Befehl wget ist ein beliebtes Unix/Linux-Befehlszeilenprogramm zum Abrufen von Inhalten aus dem Internet. Es ist kostenlos und bietet eine nicht-interaktive Möglichkeit zum Herunterladen von Dateien aus dem Internet. Der Befehl wget unterstützt von Haus aus die Protokolle HTTPS, HTTP und FTP. Außerdem können Sie damit auch HTTP-Proxys verwenden.

Wie hilft Ihnen wget bei der Fehlersuche?

Es gibt viele Möglichkeiten.

Als Systemadministrator werden Sie meistens an einem Terminal arbeiten und bei der Fehlersuche im Zusammenhang mit Webanwendungen möchten Sie vielleicht nicht die gesamte Seite, sondern nur die Konnektivität überprüfen. Oder Sie möchten Intranet-Websites überprüfen. Oder Sie möchten eine bestimmte Seite herunterladen, um den Inhalt zu überprüfen.

wget ist nicht interaktiv, d.h. Sie können es im Hintergrund laufen lassen, auch wenn Sie abgemeldet sind. Es gibt viele Fälle, in denen es unerlässlich ist, die Verbindung zum System zu unterbrechen, auch wenn Sie Dateien aus dem Internet abrufen. Im Hintergrund wird wget ausgeführt und beendet die ihm zugewiesene Aufgabe.

Es kann auch verwendet werden, um die gesamte Website auf Ihre lokalen Rechner zu holen. Es kann Links in XHTML- und HTML-Seiten folgen, um eine lokale Version zu erstellen. Zu diesem Zweck muss es die Seite rekursiv herunterladen. Dies ist sehr nützlich, da Sie damit wichtige Seiten oder Websites zur Offline-Ansicht herunterladen können.

Sehen wir sie uns in Aktion an. Die Syntax von wget lautet wie folgt.

wget [Option] [URL]

Herunterladen einer Webseite

Lassen Sie uns versuchen, eine Seite herunterzuladen. Beispiel: github.com

wget github.com

Wenn die Verbindung gut ist, wird die Homepage heruntergeladen und die folgende Ausgabe angezeigt.

root@trends:~# wget github.com
Die URL wurde aufgrund einer HSTS-Richtlinie in HTTPS umgewandelt
--2020-02-23 10:45:52-- https://github.com/
Auflösen von github.com (github.com)... 140.82.118.3
Verbindung zu github.com (github.com)|140.82.118.3|:443... hergestellt.
HTTP-Anfrage gesendet, warte auf Antwort... 200 OK
Länge: unbestimmt [text/html]
Speichern in: 'index.html'

index.html [ <=> ] 131.96K --.-KB/s in 0.04s   

2020-02-23 10:45:52 (2.89 MB/s) - 'index.html' gespeichert [135126]

root@trends:~#

Mehrere Dateien herunterladen

Praktisch, wenn Sie mehrere Dateien auf einmal herunterladen müssen. Dies kann Ihnen eine Vorstellung davon geben, wie Sie das Herunterladen von Dateien mit Hilfe einiger Skripte automatisieren können.

Lassen Sie uns versuchen, die Dateien Python 3.8.1 und 3.5.1 herunterzuladen.

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

Wie Sie sich denken können, lautet die Syntax wie folgt.

wget URL1 URL2 URL3

Sie müssen nur darauf achten, dass zwischen den URLs ein Leerzeichen steht.

Download-Geschwindigkeit begrenzen

Es ist nützlich, wenn Sie prüfen möchten, wie lange das Herunterladen Ihrer Datei bei unterschiedlichen Bandbreiten dauert.

Mit der Option --limit-rate können Sie die Download-Geschwindigkeit begrenzen.

Hier ist die Ausgabe des Herunterladens der Nodejs-Datei.

root@trends:~# 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
Auflösen von nodejs.org (nodejs.org)... 104.20.23.46, 104.20.22.46, 2606:4700:10::6814:162e, ...
Verbindung zu nodejs.org (nodejs.org)|104.20.23.46|:443... hergestellt.
HTTP-Anfrage gesendet, warte auf Antwort... 200 OK
Länge: 14591852 (14M) [application/x-xz]
Speichern in: ‘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' gespeichert [14591852/14591852]

Es hat 0,05 Sekunden gedauert, um 13,92 MB große Dateien herunterzuladen. Lassen Sie uns nun versuchen, die Geschwindigkeit auf 500K zu begrenzen.

root@trends:~# 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
Auflösen von nodejs.org (nodejs.org)... 104.20.23.46, 104.20.22.46, 2606:4700:10::6814:162e, ...
Verbindung zu nodejs.org (nodejs.org)|104.20.23.46|:443... hergestellt.
HTTP-Anfrage gesendet, warte auf Antwort... 200 OK
Länge: 14591852 (14M) [application/x-xz]
Speichern in: ‘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' gespeichert [14591852/14591852]

Durch die Reduzierung der Bandbreite dauerte der Download länger – 28 Sekunden. Stellen Sie sich vor, Ihre Benutzer beschweren sich über langsame Downloads und Sie wissen, dass ihre Netzwerkbandbreite gering ist. Sie können schnell --limit-rate ausprobieren, um das Problem zu simulieren.

Herunterladen im Hintergrund

Das Herunterladen großer Dateien kann so viel Zeit in Anspruch nehmen wie im obigen Beispiel, bei dem Sie ebenfalls ein Ratenlimit festlegen möchten. Das ist zu erwarten, aber was, wenn Sie nicht auf Ihr Terminal starren wollen?

Nun, Sie können das Argument -b verwenden, um wget im Hintergrund zu starten.

root@trends:~# wget -b https://slack.com
Wird im Hintergrund fortgesetzt, pid 25430.
Die Ausgabe wird in 'wget-log.1' geschrieben.
root@trends:~#

Zertifikatsfehler ignorieren

Dies ist praktisch, wenn Sie Intranet-Webanwendungen überprüfen müssen, die nicht über das richtige Zertifikat verfügen. Standardmäßig gibt wget einen Fehler aus, wenn ein Zertifikat nicht gültig ist.

root@trends:~# wget https://expired.badssl.com/
--2020-02-23 11:24:59-- https://expired.badssl.com/
Auflösen von expired.badssl.com (expired.badssl.com)... 104.154.89.105
Verbindung zu expired.badssl.com (expired.badssl.com)|104.154.89.105|:443... hergestellt.
ERROR: Das Zertifikat von expired.badssl.com, ausgestellt von 'CN=COMODO RSA Domain Validation Secure Server CA,O=COMODO CA Limited,L=Salford,ST=Greater Manchester,C=GB', kann nicht verifiziert werden:
  Das ausgestellte Zertifikat ist abgelaufen.
Um eine unsichere Verbindung zu expired.badssl.com herzustellen, verwenden Sie `--no-check-certificate'.

Das obige Beispiel bezieht sich auf die URL, für die das Zertifikat abgelaufen ist. Wie Sie sehen können, wird die Verwendung von --no-check-certificate vorgeschlagen , wodurch eine Zertifikatsüberprüfung ignoriert wird.

root@trends:~# wget https://untrusted-root.badssl.com/ --no-check-certificate
--2020-02-23 11:33:45-- https://untrusted-root.badssl.com/
Auflösen von untrusted-root.badssl.com (untrusted-root.badssl.com)... 104.154.89.105
Verbindung zu untrusted-root.badssl.com (untrusted-root.badssl.com)|104.154.89.105|:443... hergestellt.
WARNUNG: Das Zertifikat von untrusted-root.badssl.com, ausgestellt von 'CN=BadSSL Untrusted Root Certificate Authority,O=BadSSL,L=San Francisco,ST=California,C=US', kann nicht verifiziert werden:
  Ein selbstsigniertes Zertifikat wurde gefunden.
HTTP-Anfrage gesendet, warte auf Antwort... 200 OK
Länge: 600 [text/html]
Speichern in: 'index.html.6'

index.html.6 100%[===========================================================================================>]     600 --.-KB/s in 0s  

2020-02-23 11:33:45 (122 MB/s) - 'index.html.6' gespeichert [600/600]

root@trends:~#

Cool, nicht wahr?

HTTP-Antwort-Header

Sehen Sie sich den HTTP-Antwort-Header einer bestimmten Website auf dem Terminal an.

Mit -S können Sie den Header ausgeben, wie Sie unten für Coursera sehen können.

root@trends:~# wget https://www.coursera.org -S
--2020-02-23 11:47:01-- https://www.coursera.org/
Auflösen von www.coursera.org (www.coursera.org)... 13.224.241.48, 13.224.241.124, 13.224.241.82, ...
Verbindung zu www.coursera.org (www.coursera.org)|13.224.241.48|:443... hergestellt.
HTTP-Anfrage gesendet, erwarte Antwort... 
  HTTP/1.1 200 OK
  Inhalt-Typ: text/html
  Inhalt-Länge: 511551
  Verbindung: keep-alive
  Cache-Kontrolle: privat, 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-zeit: 1090
  X-Frame-Options: SAMEORIGIN
  x-powered-by: Express
  X-XSS-Schutz: 1; mode=block
  X-Cache: Miss von cloudfront
  Über: 1.1 884d101a3faeefd4fb32a5d2a8a076b7.cloudfront.net (CloudFront)
  X-Amz-Cf-Pop: LHR62-C3
  X-Amz-Cf-Id: vqvX6ZUQgtZAde62t7qjafIAqHXQ8BLAv8UhkPHwyTMpvH617yeIbQ==
Länge: 511551 (500K) [text/html]

Manipulieren Sie den User-Agent

Es kann vorkommen, dass Sie eine Website mit einem benutzerdefinierten User-Agent aufrufen möchten. Oder den Benutzer-Agenten eines bestimmten Browsers. Dies ist durch die Angabe von --user-agent möglich . Das folgende Beispiel bezieht sich auf den Benutzeragenten MyCustomUserAgent.

root@trends:~# wget https://gf.dev --user-agent="MeinKundenBenutzerAgent"

Host-Kopfzeile

Wenn sich eine Anwendung noch in der Entwicklung befindet, haben Sie möglicherweise keine geeignete URL, um sie zu testen. Oder Sie möchten eine einzelne HTTP-Instanz über IP testen, müssen aber den Host-Header angeben, damit die Anwendung richtig funktioniert. In dieser Situation wäre --header nützlich.

Nehmen wir ein Beispiel für das Testen von http://10.10.10.1 mit dem Host-Header als application.com

wget --header="Host: application.com" http://10.10.10.1

Sie können nicht nur host, sondern jede beliebige Kopfzeile einfügen.

Verbindung über Proxy

Wenn Sie in einer DMZ-Umgebung arbeiten, haben Sie möglicherweise keinen Zugriff auf Internet-Seiten. Aber Sie können die Vorteile eines Proxys nutzen, um eine Verbindung herzustellen.

wget -e use_proxy=yes http_proxy=$PROXYHOST:PORT http://externalsite.com

Vergessen Sie nicht, die Variable $PROXYHOST:PORT mit den tatsächlichen Werten zu aktualisieren.

Verbindung über ein bestimmtes TLS-Protokoll

Normalerweise empfehle ich die Verwendung von OpenSSL zum Testen des TLS-Protokolls. Sie können aber auch wget verwenden.

wget --secure-protocol=TLSv1_2 https://example.com

Damit wird wget gezwungen, eine Verbindung über TLS 1.2 herzustellen.

Fazit

Die Kenntnis der notwendigen Befehle kann Ihnen bei der Arbeit helfen. Ich hoffe, die obigen Ausführungen geben Ihnen einen Eindruck davon, was Sie mit wget tun können.