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.