From b9946b9c7aa6cb9a0e3372aeebb545d62ba196f7 Mon Sep 17 00:00:00 2001 From: scriptos Date: Sun, 22 Feb 2026 22:27:50 +0100 Subject: [PATCH 1/2] =?UTF-8?q?Interaktives=20Men=C3=BC=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 64 ++++++++++++- dockernet-inspector.v1.sh | 186 +++++++++++++++++++++++++++++--------- 2 files changed, 202 insertions(+), 48 deletions(-) diff --git a/README.md b/README.md index 8e3550e..569d900 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,19 @@ Ein Bash-Script zur Verwaltung und Analyse von Docker-Netzwerken. ## Beschreibung -**Dockernet Inspector** hilft bei der täglichen Arbeit mit Docker-Netzwerken und bietet vier Hauptfunktionen: +**Dockernet Inspector** hilft bei der täglichen Arbeit mit Docker-Netzwerken durch zwei Nutzungsmodi: + +**Interaktiver Modus (Menü):** +- Benutzerfreundliches Menü ohne Kommandozeilenargumente +- Intuitive Netzwerk-Auswahl aus einer Liste +- Fehlerbehandlung bei ungültigen Eingaben + +**Kommandozeilen-Modus (CLI):** +- Schnelle automatisierte Abfragen +- Scripting-freundlich +- Rückwärtskompatibel + +Das Script bietet vier Hauptfunktionen: 1. Alle Netzwerke auflisten 2. Netzwerk-Details inspizieren @@ -33,7 +45,22 @@ chmod +x dockernet-inspector.v1.sh ## Verwendung -### Syntax +Das Script kann auf zwei Arten verwendet werden: + +### 1. Interaktiver Modus (Menü) + +```bash +bash ./dockernet-inspector.v1.sh +``` + +Das Script startet dann ein interaktives Menü, über das Sie folgende Optionen wählen können: +- **1** - Alle Netzwerke auflisten +- **2** - Detaillierte Infos zu einem Netzwerk (mit Netzwerk-Auswahl) +- **3** - IPs eines Netzwerks anzeigen (mit Netzwerk-Auswahl) +- **4** - Alle belegten IPs anzeigen +- **0** - Beenden + +### 2. Kommandozeilen-Modus (CLI) ```bash bash ./dockernet-inspector.v1.sh [BEFEHL] [OPTIONEN] @@ -43,6 +70,7 @@ bash ./dockernet-inspector.v1.sh [BEFEHL] [OPTIONEN] | Befehl | Beschreibung | |--------|--------------| +| *(keine)* | Startet interaktiven Modus | | `networks` | Listet alle verfügbaren Docker-Netzwerke auf | | `inspect ` | Zeigt detaillierte Informationen zu einem Netzwerk | | `ips ` | Zeigt alle belegten IPv4-Adressen im angegebenen Netzwerk | @@ -52,6 +80,30 @@ bash ./dockernet-inspector.v1.sh [BEFEHL] [OPTIONEN] ### Beispiele +#### Interaktiver Modus + +```bash +# Interaktives Menü starten +bash ./dockernet-inspector.v1.sh + +# Output: +# ================================================================================ +# Dockernet Inspector - Interaktives Menü +# ================================================================================ +# +# 1. Alle Netzwerke auflisten +# 2. Detaillierte Infos zu einem Netzwerk +# 3. IPs eines Netzwerks anzeigen +# 4. Alle belegten IPs anzeigen +# 0. Beenden +# +# Bitte waehlen Sie eine Option (0-4): +``` + +Im Menü können Sie einfach die Nummer eingeben. Bei den Optionen 2 und 3 werden Sie aufgefordert, ein Netzwerk aus einer Liste zu wählen. + +#### Kommandozeilen-Modus + ```bash # Alle Docker-Netzwerke auflisten bash ./dockernet-inspector.v1.sh networks @@ -122,12 +174,18 @@ matrixnetwork matrix-synapse-db 172.19.0.11 Das Script gibt unter anderem folgende Fehlermeldungen aus: -- Kein Befehl angegeben: `Fehler: Befehl erforderlich. Verwendung: $0 networks|inspect|ips|ips-all|help` +**CLI-Modus:** - Keine Netzwerk-Angabe bei `inspect`: `Fehler: Netzwerkname erforderlich. Verwendung: $0 inspect ` - Keine Netzwerk-Angabe bei `ips`: `Fehler: Netzwerkname erforderlich. Verwendung: $0 ips ` - Netzwerk nicht gefunden: `Fehler: Netzwerk '' nicht gefunden.` - Docker-Netzwerke konnten nicht abgerufen werden: `Fehler: Docker Netzwerke konnten nicht abgerufen werden.` +**Interaktiver Modus:** +- Ungültige Eingabe: `FEHLER: Ungueltige Eingabe. Bitte geben Sie eine Nummer zwischen 0 und 4 ein.` +- Keine Netzwerke vorhanden: `Fehler: Keine Docker Netzwerke gefunden.` + +Das Script unterstützt auch Fehlerbehandlung bei ungültigen Eingaben und ermöglicht dem Nutzer, die Eingabe zu korrigieren, ohne dass das Script abstürzt. + ## Voraussetzungen - Docker ist installiert und läuft diff --git a/dockernet-inspector.v1.sh b/dockernet-inspector.v1.sh index b0d5c42..2088806 100644 --- a/dockernet-inspector.v1.sh +++ b/dockernet-inspector.v1.sh @@ -20,9 +20,10 @@ # Modifikation: IP-Listen pro Netzwerk und netzwerkuebergreifend hinzugefuegt ##################################################### -set -euo pipefail +set -uo pipefail TABLE_LINE_WIDTH=80 +INTERACTIVE_MODE=false print_rule() { local char="$1" @@ -41,6 +42,7 @@ show_help() { Dockernet Inspector v1.2.0 - Docker Netzwerk Verwaltungstool VERWENDUNG: + $0 - Interaktiver Modus (Menü) $0 networks - Alle Docker Netzwerke auflisten $0 inspect - Details zu einem Netzwerk anzeigen $0 ips - Belegte IPs in einem Netzwerk anzeigen @@ -155,6 +157,137 @@ list_ips_all_networks() { print_dynamic_table "$table_data" } +# Interaktive Menü-Funktion +interactive_menu() { + while true; do + echo "" + print_rule "=" + echo "Dockernet Inspector - Interaktives Menü" + print_rule "=" + echo "" + echo "1. Alle Netzwerke auflisten" + echo "2. Detaillierte Infos zu einem Netzwerk" + echo "3. IPs eines Netzwerks anzeigen" + echo "4. Alle belegten IPs anzeigen" + echo "0. Beenden" + echo "" + read -p "Bitte waehlen Sie eine Option (0-4): " choice + echo "" + + case "$choice" in + 1) + list_networks + ;; + 2) + if select_and_inspect_network; then + : + fi + ;; + 3) + nets="$(docker network ls --format '{{.Name}}' 2>/dev/null || true)" + if [[ -z "$nets" ]]; then + echo "Fehler: Keine Docker Netzwerke gefunden." + continue + fi + + echo "Verfuegbare Netzwerke:" + select net in $nets; do + if [[ -n "$net" ]]; then + list_ips_in_network "$net" + break + else + echo "Ungueltige Auswahl. Bitte versuchen Sie es erneut." + fi + done + ;; + 4) + list_ips_all_networks + ;; + 0) + echo "Auf Wiedersehen!" + exit 0 + ;; + *) + echo "FEHLER: Ungueltige Eingabe '$choice'. Bitte geben Sie eine Nummer zwischen 0 und 4 ein." + sleep 1 + ;; + esac + done +} + +# Funktion zur Auswahl und Inspektion eines Netzwerks +select_and_inspect_network() { + local nets net + + nets="$(docker network ls --format '{{.Name}}' 2>/dev/null || true)" + if [[ -z "$nets" ]]; then + echo "Fehler: Keine Docker Netzwerke gefunden." + return 1 + fi + + echo "Verfuegbare Netzwerke:" + select net in $nets; do + if [[ -n "$net" ]]; then + NET="$net" + inspect_network "$NET" + return 0 + else + echo "Ungueltige Auswahl. Bitte versuchen Sie es erneut." + fi + done +} + +# Separate Funktion fuer Netzwerk-Inspektion +inspect_network() { + local NET="$1" + + # 1) Netzwerk-ID und Bridge-Name separat holen + local ID BR_RAW IF SUBNET GATEWAY state rxb txb rxp txp + ID="$(docker network inspect "$NET" --format '{{.Id}}' 2>/dev/null || true)" + [[ -z "$ID" ]] && { echo "Fehler: Netzwerk '$NET' nicht gefunden."; return 2; } + + BR_RAW="$(docker network inspect "$NET" --format '{{index .Options "com.docker.network.bridge.name"}}' 2>/dev/null || true)" + + # 2) Falls kein eigener Bridge-Name: Standardname br- + if [[ -z "$BR_RAW" || "$BR_RAW" == "" ]]; then + IF="br-${ID:0:12}" + else + IF="$BR_RAW" + fi + + # 3) Subnet/Gateway + SUBNET="$(docker network inspect "$NET" --format '{{(index .IPAM.Config 0).Subnet}}' 2>/dev/null || true)" + GATEWAY="$(docker network inspect "$NET" --format '{{(index .IPAM.Config 0).Gateway}}' 2>/dev/null || true)" + + # 4) Interface-Status & Stats + state="unknown"; rxb=0; txb=0; rxp=0; txp=0 + if ip link show "$IF" &>/dev/null; then + state="$(cat /sys/class/net/"$IF"/operstate 2>/dev/null || echo unknown)" + rxb="$(cat /sys/class/net/"$IF"/statistics/rx_bytes 2>/dev/null || echo 0)" + txb="$(cat /sys/class/net/"$IF"/statistics/tx_bytes 2>/dev/null || echo 0)" + rxp="$(cat /sys/class/net/"$IF"/statistics/rx_packets 2>/dev/null || echo 0)" + txp="$(cat /sys/class/net/"$IF"/statistics/tx_packets 2>/dev/null || echo 0)" + else + echo "WARN: Interface $IF existiert (noch) nicht auf dem Host." + fi + + echo "" + print_rule "=" + echo "Detaillerte Informationen fuer Netzwerk: $NET" + print_rule "=" + echo "" + cat <"; exit 1; } + inspect_network "$NET" + exit 0 ;; "") - echo "Fehler: Befehl erforderlich. Verwendung: $0 networks|inspect|ips|ips-all|help" - exit 1 + # Starte interaktiven Modus, wenn keine Argumente uebergeben wurden + interactive_menu + exit 0 ;; *) # Kompatibilitaet: Wenn erstes Argument kein bekannter Befehl ist, behandle es als Netzwerkname NET="$COMMAND" + inspect_network "$NET" + exit 0 ;; esac - -# Hauptlogik fuer die Inspektion eines Netzwerks -[[ -z "${NET:-}" ]] && { echo "Fehler: Netzwerkname erforderlich. Verwendung: $0 "; exit 1; } - -# 1) Netzwerk-ID und Bridge-Name separat holen -ID="$(docker network inspect "$NET" --format '{{.Id}}' 2>/dev/null || true)" -[[ -z "$ID" ]] && { echo "Fehler: Netzwerk '$NET' nicht gefunden."; exit 2; } - -BR_RAW="$(docker network inspect "$NET" --format '{{index .Options "com.docker.network.bridge.name"}}' 2>/dev/null || true)" - -# 2) Falls kein eigener Bridge-Name: Standardname br- -if [[ -z "$BR_RAW" || "$BR_RAW" == "" ]]; then - IF="br-${ID:0:12}" -else - IF="$BR_RAW" -fi - -# 3) Subnet/Gateway -SUBNET="$(docker network inspect "$NET" --format '{{(index .IPAM.Config 0).Subnet}}' 2>/dev/null || true)" -GATEWAY="$(docker network inspect "$NET" --format '{{(index .IPAM.Config 0).Gateway}}' 2>/dev/null || true)" - -# 4) Interface-Status & Stats -state="unknown"; rxb=0; txb=0; rxp=0; txp=0 -if ip link show "$IF" &>/dev/null; then - state="$(cat /sys/class/net/"$IF"/operstate 2>/dev/null || echo unknown)" - rxb="$(cat /sys/class/net/"$IF"/statistics/rx_bytes 2>/dev/null || echo 0)" - txb="$(cat /sys/class/net/"$IF"/statistics/tx_bytes 2>/dev/null || echo 0)" - rxp="$(cat /sys/class/net/"$IF"/statistics/rx_packets 2>/dev/null || echo 0)" - txp="$(cat /sys/class/net/"$IF"/statistics/tx_packets 2>/dev/null || echo 0)" -else - echo "WARN: Interface $IF existiert (noch) nicht auf dem Host." -fi - -cat < Date: Sun, 22 Feb 2026 22:28:53 +0100 Subject: [PATCH 2/2] v1.3.0 --- dockernet-inspector.v1.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dockernet-inspector.v1.sh b/dockernet-inspector.v1.sh index 2088806..0a162ec 100644 --- a/dockernet-inspector.v1.sh +++ b/dockernet-inspector.v1.sh @@ -15,9 +15,9 @@ # Autor: Patrick Asmus # Web: https://www.cleveradmin.de # Git-Reposit.: https://git.techniverse.net/scriptos/dockernet-inspector.git -# Version: 1.2.0 -# Datum: 18.02.2026 -# Modifikation: IP-Listen pro Netzwerk und netzwerkuebergreifend hinzugefuegt +# Version: 1.3.0 +# Datum: 22.02.2026 +# Modifikation: Ineraktives Menü hinzugefügt, Fehlerbehandlung verbessert, Ausgabe formatiert, Kompatibilität erweitert ##################################################### set -uo pipefail