interactive #4

Merged
scriptos merged 2 commits from interactive into main 2026-02-22 21:29:06 +00:00
2 changed files with 205 additions and 51 deletions
+61 -3
View File
@@ -4,7 +4,19 @@ Ein Bash-Script zur Verwaltung und Analyse von Docker-Netzwerken.
## Beschreibung ## 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 1. Alle Netzwerke auflisten
2. Netzwerk-Details inspizieren 2. Netzwerk-Details inspizieren
@@ -33,7 +45,22 @@ chmod +x dockernet-inspector.v1.sh
## Verwendung ## 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
bash ./dockernet-inspector.v1.sh [BEFEHL] [OPTIONEN] bash ./dockernet-inspector.v1.sh [BEFEHL] [OPTIONEN]
@@ -43,6 +70,7 @@ bash ./dockernet-inspector.v1.sh [BEFEHL] [OPTIONEN]
| Befehl | Beschreibung | | Befehl | Beschreibung |
|--------|--------------| |--------|--------------|
| *(keine)* | Startet interaktiven Modus |
| `networks` | Listet alle verfügbaren Docker-Netzwerke auf | | `networks` | Listet alle verfügbaren Docker-Netzwerke auf |
| `inspect <netzwerk>` | Zeigt detaillierte Informationen zu einem Netzwerk | | `inspect <netzwerk>` | Zeigt detaillierte Informationen zu einem Netzwerk |
| `ips <netzwerk>` | Zeigt alle belegten IPv4-Adressen im angegebenen Netzwerk | | `ips <netzwerk>` | Zeigt alle belegten IPv4-Adressen im angegebenen Netzwerk |
@@ -52,6 +80,30 @@ bash ./dockernet-inspector.v1.sh [BEFEHL] [OPTIONEN]
### Beispiele ### 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 ```bash
# Alle Docker-Netzwerke auflisten # Alle Docker-Netzwerke auflisten
bash ./dockernet-inspector.v1.sh networks 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: 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 <docker-network-name>` - Keine Netzwerk-Angabe bei `inspect`: `Fehler: Netzwerkname erforderlich. Verwendung: $0 inspect <docker-network-name>`
- Keine Netzwerk-Angabe bei `ips`: `Fehler: Netzwerkname erforderlich. Verwendung: $0 ips <docker-network-name>` - Keine Netzwerk-Angabe bei `ips`: `Fehler: Netzwerkname erforderlich. Verwendung: $0 ips <docker-network-name>`
- Netzwerk nicht gefunden: `Fehler: Netzwerk '<name>' nicht gefunden.` - Netzwerk nicht gefunden: `Fehler: Netzwerk '<name>' nicht gefunden.`
- Docker-Netzwerke konnten nicht abgerufen werden: `Fehler: Docker Netzwerke konnten nicht abgerufen werden.` - 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 ## Voraussetzungen
- Docker ist installiert und läuft - Docker ist installiert und läuft
+128 -32
View File
@@ -15,14 +15,15 @@
# Autor: Patrick Asmus # Autor: Patrick Asmus
# Web: https://www.cleveradmin.de # Web: https://www.cleveradmin.de
# Git-Reposit.: https://git.techniverse.net/scriptos/dockernet-inspector.git # Git-Reposit.: https://git.techniverse.net/scriptos/dockernet-inspector.git
# Version: 1.2.0 # Version: 1.3.0
# Datum: 18.02.2026 # Datum: 22.02.2026
# Modifikation: IP-Listen pro Netzwerk und netzwerkuebergreifend hinzugefuegt # Modifikation: Ineraktives Menü hinzugefügt, Fehlerbehandlung verbessert, Ausgabe formatiert, Kompatibilität erweitert
##################################################### #####################################################
set -euo pipefail set -uo pipefail
TABLE_LINE_WIDTH=80 TABLE_LINE_WIDTH=80
INTERACTIVE_MODE=false
print_rule() { print_rule() {
local char="$1" local char="$1"
@@ -41,6 +42,7 @@ show_help() {
Dockernet Inspector v1.2.0 - Docker Netzwerk Verwaltungstool Dockernet Inspector v1.2.0 - Docker Netzwerk Verwaltungstool
VERWENDUNG: VERWENDUNG:
$0 - Interaktiver Modus (Menü)
$0 networks - Alle Docker Netzwerke auflisten $0 networks - Alle Docker Netzwerke auflisten
$0 inspect <netzwerk> - Details zu einem Netzwerk anzeigen $0 inspect <netzwerk> - Details zu einem Netzwerk anzeigen
$0 ips <netzwerk> - Belegte IPs in einem Netzwerk anzeigen $0 ips <netzwerk> - Belegte IPs in einem Netzwerk anzeigen
@@ -155,47 +157,94 @@ list_ips_all_networks() {
print_dynamic_table "$table_data" print_dynamic_table "$table_data"
} }
# Argument-Verarbeitung # Interaktive Menü-Funktion
COMMAND="${1:-}" interactive_menu() {
case "$COMMAND" in while true; do
networks) 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 list_networks
exit 0
;; ;;
ips) 2)
NET="${2:-}" if select_and_inspect_network; then
[[ -z "$NET" ]] && { echo "Fehler: Netzwerkname erforderlich. Verwendung: $0 ips <docker-network-name>"; exit 1; } :
list_ips_in_network "$NET" fi
exit 0
;; ;;
ips-all) 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 list_ips_all_networks
;;
0)
echo "Auf Wiedersehen!"
exit 0 exit 0
;; ;;
help | -h | --help)
show_help
exit 0
;;
inspect)
NET="${2:-}"
[[ -z "$NET" ]] && { echo "Fehler: Netzwerkname erforderlich. Verwendung: $0 inspect <docker-network-name>"; exit 1; }
;;
"")
echo "Fehler: Befehl erforderlich. Verwendung: $0 networks|inspect|ips|ips-all|help"
exit 1
;;
*) *)
# Kompatibilitaet: Wenn erstes Argument kein bekannter Befehl ist, behandle es als Netzwerkname echo "FEHLER: Ungueltige Eingabe '$choice'. Bitte geben Sie eine Nummer zwischen 0 und 4 ein."
NET="$COMMAND" sleep 1
;; ;;
esac esac
done
}
# Hauptlogik fuer die Inspektion eines Netzwerks # Funktion zur Auswahl und Inspektion eines Netzwerks
[[ -z "${NET:-}" ]] && { echo "Fehler: Netzwerkname erforderlich. Verwendung: $0 <docker-network-name>"; exit 1; } 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 # 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)" ID="$(docker network inspect "$NET" --format '{{.Id}}' 2>/dev/null || true)"
[[ -z "$ID" ]] && { echo "Fehler: Netzwerk '$NET' nicht gefunden."; exit 2; } [[ -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)" BR_RAW="$(docker network inspect "$NET" --format '{{index .Options "com.docker.network.bridge.name"}}' 2>/dev/null || true)"
@@ -222,6 +271,11 @@ else
echo "WARN: Interface $IF existiert (noch) nicht auf dem Host." echo "WARN: Interface $IF existiert (noch) nicht auf dem Host."
fi fi
echo ""
print_rule "="
echo "Detaillerte Informationen fuer Netzwerk: $NET"
print_rule "="
echo ""
cat <<OUT cat <<OUT
Docker-Netzwerk : $NET Docker-Netzwerk : $NET
Driver : $(docker network inspect "$NET" --format '{{.Driver}}') Driver : $(docker network inspect "$NET" --format '{{.Driver}}')
@@ -231,3 +285,45 @@ OperState : $state
RX bytes/packets : $rxb / $rxp RX bytes/packets : $rxb / $rxp
TX bytes/packets : $txb / $txp TX bytes/packets : $txb / $txp
OUT OUT
echo ""
}
# Argument-Verarbeitung
COMMAND="${1:-}"
case "$COMMAND" in
networks)
list_networks
exit 0
;;
ips)
NET="${2:-}"
[[ -z "$NET" ]] && { echo "Fehler: Netzwerkname erforderlich. Verwendung: $0 ips <docker-network-name>"; exit 1; }
list_ips_in_network "$NET"
exit 0
;;
ips-all)
list_ips_all_networks
exit 0
;;
help | -h | --help)
show_help
exit 0
;;
inspect)
NET="${2:-}"
[[ -z "$NET" ]] && { echo "Fehler: Netzwerkname erforderlich. Verwendung: $0 inspect <docker-network-name>"; exit 1; }
inspect_network "$NET"
exit 0
;;
"")
# 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