Pingtool für die Bash (Linux)

Das Pingtool ist ein Bash-Programm zur fortlaufenden Überprüfung von IPv4- und IPv6-Verbindungen unter Debian und anderen Linux-Systemen. Die neueste Messung steht immer direkt unter der festen Tabellenüberschrift.

📡 Funktionen

  • Beim Start eine Domain eingeben oder alternativ IPv4- und IPv6-Adressen manuell festlegen
  • Bei einer Domain automatisch je eine IPv4- und IPv6-Adresse über DNS ermitteln
  • Die verwendeten Zieladressen dauerhaft oberhalb der Tabelle anzeigen
  • IPv4 und IPv6 nacheinander anpingen; Antwortzeiten in Millisekunden anzeigen
  • Erfolgreiche Pings grün, Ausfälle rot; neueste Messungen zuerst
  • Die Anzahl der sichtbaren Messungen an die Terminalhöhe anpassen
  • Mit Strg+C beenden

🖥️ Beispielausgabe

IPv4 / IPv6 PING-MONITOR
Domain: freifunk-halle.org
IPv4:   37.221.193.24
IPv6:   2a03:4000:8:f3a::1

Datum      Uhrzeit  IPv4          IPv6
------------------------------------------------------
22.10.2026 00:35:20 OK 41.3 ms    OK 19.9 ms
22.10.2026 00:35:19 AUSFALL       OK 11.1 ms
22.10.2026 00:35:18 OK 7.67 ms    AUSFALL

🛠️ Installation über Bash

Der folgende Code kann vollständig kopiert und in ein Terminal eingefügt werden. Er legt /usr/local/bin/pingtool.sh an und erstellt den symbolischen Link /usr/local/bin/pingtool. Eine vorhandene Skriptversion wird zuvor mit Zeitstempel gesichert.

#!/usr/bin/env bash
set -e
ZIEL=/usr/local/bin/pingtool.sh
if [[ -f "$ZIEL" ]]; then
  SICHERUNG="/usr/local/bin/pingtool-$(date +%Y-%m-%d-%H-%M-%S).sh.bak"
  sudo cp -a "$ZIEL" "$SICHERUNG"
  echo "Sicherung: $SICHERUNG"
fi
sudo tee "$ZIEL" >/dev/null <<'PINGTOOL'
#!/usr/bin/env bash
# IPv4 / IPv6 Ping-Monitor
GRUEN=$'\033[1;32m'
ROT=$'\033[1;31m'
NORMAL=$'\033[0m'
read -r -p 'Domain (leer = IPv4/IPv6 manuell): ' DOMAIN </dev/tty
if [[ -n "$DOMAIN" ]]; then
  IPV4=$(getent ahostsv4 "$DOMAIN" | awk '$2=="STREAM" {print $1; exit}')
  IPV6=$(getent ahostsv6 "$DOMAIN" | awk '$2=="STREAM" {print $1; exit}')
else
  read -r -p 'IPv4-Adresse (leer = überspringen): ' IPV4 </dev/tty
  read -r -p 'IPv6-Adresse (leer = überspringen): ' IPV6 </dev/tty
fi
if [[ -z "$IPV4" && -z "$IPV6" ]]; then
  echo 'Keine Ziele gefunden oder eingegeben.' >&2
  exit 1
fi
ping_test() {
  local version="$1" ziel="$2" ausgabe ms
  [[ -n "$ziel" ]] || { printf '%s' '---'; return; }
  if ausgabe=$(LC_ALL=C ping -"$version" -n -c 1 -W 2 "$ziel" 2>/dev/null); then
    ms=$(sed -n 's/.*time=\([0-9.]*\).*/\1/p' <<< "$ausgabe" | head -1)
    printf 'OK %s ms' "${ms:-?}"
  else
    printf 'AUSFALL'
  fi
}
VERLAUF=()
trap 'printf "\033[0m\n"; exit 0' INT TERM
while true; do
  DATUM=$(date '+%d.%m.%Y')
  UHRZEIT=$(date '+%H:%M:%S')
  ERG4=$(ping_test 4 "$IPV4")
  ERG6=$(ping_test 6 "$IPV6")
  VERLAUF=("$DATUM|$UHRZEIT|$ERG4|$ERG6" "${VERLAUF[@]}")
  HOEHE=$(tput lines 2>/dev/null || echo 24)
  MAX=$((HOEHE - 9))
  (( MAX < 1 )) && MAX=1
  VERLAUF=("${VERLAUF[@]:0:MAX}")
  printf '\033[H\033[2J'
  printf 'IPv4 / IPv6 PING-MONITOR\n'
  [[ -n "$DOMAIN" ]] && printf 'Domain: %s\n' "$DOMAIN"
  printf 'IPv4:   %s\n' "${IPV4:-Nicht vorhanden}"
  printf 'IPv6:   %s\n\n' "${IPV6:-Nicht vorhanden}"
  printf '%-10s %-8s %-13s %s\n' 'Datum' 'Uhrzeit' 'IPv4' 'IPv6'
  printf '%s\n' '------------------------------------------------------'
  for EINTRAG in "${VERLAUF[@]}"; do
    IFS='|' read -r D T V4 V6 <<< "$EINTRAG"
    printf '%-10s %-8s ' "$D" "$T"
    if [[ "$V4" == OK* ]]; then
      printf '%s%-13s%s ' "$GRUEN" "$V4" "$NORMAL"
    elif [[ "$V4" == AUSFALL ]]; then
      printf '%s%-13s%s ' "$ROT" "$V4" "$NORMAL"
    else
      printf '%-13s ' "$V4"
    fi
    if [[ "$V6" == OK* ]]; then
      printf '%s%s%s\n' "$GRUEN" "$V6" "$NORMAL"
    elif [[ "$V6" == AUSFALL ]]; then
      printf '%s%s%s\n' "$ROT" "$V6" "$NORMAL"
    else
      printf '%s\n' "$V6"
    fi
  done
  sleep 1
done
PINGTOOL
sudo chmod 755 "$ZIEL"
sudo ln -sfn /usr/local/bin/pingtool.sh /usr/local/bin/pingtool
echo 'Installation abgeschlossen. Start mit: pingtool'

▶️ Starten

pingtool

Alternativ funktioniert weiterhin pingtool.sh. Das Skript selbst benötigt beim Start keine Root-Rechte.

Hinweis: Die DNS-Auflösung erfolgt beim Programmstart. Bei mehreren DNS-Adressen wird je IP-Version die erste verwendet. Die Messwerte bleiben nur während der Laufzeit im Speicher; es wird keine Protokolldatei angelegt.