htprobe - Web Request Analyzer
Das CLI-Programm htprobe dient zur Analyse von Webrequests auf der Kommandozeile. Oft ist es wichtig, schnell einer Redirect-Kette zu folgen, ein Zertifikat zu überprüfen oder die zurück gesendeten Header zu untersuchen. Natürlich können das auch alle modernen Browser mit Hilfe ihrer jeweiligen Entwickler-Tools - aber manchmal ist es auf der Kommandozeile einfach schneller.
Syntax
Der Aufruf von htprobe geschieht so:
$ htprobe <subcommand> URL [URL ...][flags]
Die optionalen globalen Flags können überall auf der Kommandozeile nach htprobe angegeben werden, Flags, die zu einem Subkommando gehören, aber erst nach diesem Kommando. Mit dem Subkommando help oder dem Schalter -h|--help kann jederzeit eine Hilfe angezeigt werden, mit
$ htprobe <subcommand> --help
die Hilfeseite für ein bestimmtes Subkommando.
Die verfügbaren Module sind:
- certificate: Analysiert Server-Zertifikate und zeigt sie an
- completion: Erzeugt die Autovervollständigung für die vorgegebene Shell
- content: Führt einen Webrequest durch und zeigt den Inhalt an, falls vorhanden.
- cookies: Zeigt die Request- und Response-Cookies eines Webrequests
- headers: Zeigt die Request- und Response-Header eines Webrequests
- help: Zeigt die Hilfe von htprobe oder eines Subkommandos an
- redirects: Folgt der Redirect-Kette eines Webrequests und zeigt sie an
Installation
htprobe ist in Go geschrieben. man benötigt daher eine funktionierende Entwicklungsumgebung für diese Sprache. Hinweise zur Installation und einen Downloadlink für die verschiedenen Plattformen finden sich auf der Webseite von Go.
Sofern alles erfolgreich installiert wurde, sollte dieser Befehl funktionieren:
$ go version
go version go1.22.2 linux/amd64
Danach muss dieses Repository geklont werden und Programm kompiliert werden:
$ git clone https://github.com/hleinders/htprobe.git
$ cd htprobe
$ go mod tidy
$ go build # or go install, if GOBIN is set
Beispiele
Rufe nasa.gov auf und zeige die Redirect-Kette an:
$ htprobe redirects nasa.gov
URL: http://nasa.gov [GET]
┣━━ (301) ⮕ [GET] https://nasa.gov/
┣━━ (302) ⮕ [GET] https://www.nasa.gov/
┗━━ (200) ⮕ 200 OK
$ htprobe headers https://www.nasa.gov/
1: URL: https://www.nasa.gov/ [GET] (200)
═══════════════════════════════════════════
Request Header:
• User-Agent: HtProbe Request Analyzer v1.2 (2024-04-05)
Response Header:
• Accept-Ranges: bytes
• Age: 89
• Cache-Control: max-age=300, must-revalidate
• Content-Type: text/html; charset=UTF-8
• Date: Thu, 04 Apr 2024 09:31:54 GMT
• Host-Header: a9130478a60e5f9135f765b23f26593b
• Server: nginx
• Strict-Transport-Security: max-age=31536000
• Vary: Accept-Encoding
• X-Cache: hit
• X-Launch-Status: Go Flight!
• X-Rq: hhn1 85 188 443
$ htprobe certificate https://www.nasa.gov/
1: URL: https://www.nasa.gov/ [GET] (200)
═══════════════════════════════════════════
Certificate(s):
• CN: nasa.gov
SANs: nasa.gov, www.nasa.gov
Valid until: 2024-06-25 13:02:10 +0000 UTC
CA-Chain: nasa.gov
⋘ R3 (Let's Encrypt)
Aliase
Ich persönlich benutze folgende Aliase in meiner Shell:
alias checkRedirects="htprobe redirects"
alias checkHeader="htprobe headers"
alias checkCert="htprobe certificate"
alias checkCookies="htprobe cookies"
Damit kann man die obigen Aufrufe ein wenig vereinfachen, zum Beispiel:
$ checkRedirects nasa.gov
URL: http://nasa.gov [GET]
┣━━ (301) ⮕ [GET] https://nasa.gov/
┣━━ (302) ⮕ [GET] https://www.nasa.gov/
┗━━ (200) ⮕ 200 OK
$ checkCert https://www.nasa.gov/
1: URL: https://www.nasa.gov/ [GET] (200)
═══════════════════════════════════════════
Certificate(s):
• CN: nasa.gov
SANs: nasa.gov, www.nasa.gov
Valid until: 2024-06-25 13:02:10 +0000 UTC
CA-Chain: nasa.gov
⋘ R3 (Let's Encrypt)
Shell Completion
Die meisten modernen Shells (bash, zsh, ...) haben die Fähigkeit, Programme und deren Subkommandos oder Parameter automatisch zu vervollständigen. Den entsprechenden Code erhält man mit
$ htprobe completion zsh
Die kann man automatisieren, z.B. für die zsh, in dem man in der $HOME/.zshrc folgende Zeile einfügt:
source <(htprobe completion zsh)