add scripts: check_inet_iface_curl.sh, check_inet_iface_ping.sh .
This commit is contained in:
71
check_inet_iface_curl.sh
Executable file
71
check_inet_iface_curl.sh
Executable file
@@ -0,0 +1,71 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Testet ein Interface mit curl gegen drei HTTP/HTTPS-Ziele.
|
||||
# Es gilt erst als offline, wenn alle drei Ziele fehlschlagen.
|
||||
# Erst der zweite Fehlversuch erzeugt eine Fehlermeldung.
|
||||
#
|
||||
# Aufruf: check_inet_iface_curl.sh <interface>
|
||||
|
||||
IFACE="$1"
|
||||
|
||||
# Drei Ziele - alles HTTP/HTTPS, damit echte TCP-Verbindungen getestet werden.
|
||||
TARGETS=("https://1.1.1.1" "https://8.8.8.8" "https://www.debian.org" "https//oopen.de")
|
||||
|
||||
CURL_BIN="$(which curl)"
|
||||
DATE_BIN="$(which date)"
|
||||
|
||||
STATE_DIR="/run/check_inet"
|
||||
STATE_FILE="$STATE_DIR/$IFACE.fail"
|
||||
|
||||
mkdir -p "$STATE_DIR"
|
||||
|
||||
if [ -z "$IFACE" ]; then
|
||||
echo ""
|
||||
echo " Usage: $0 <interface>" >&2
|
||||
echo ""
|
||||
exit 2
|
||||
fi
|
||||
|
||||
# ----------------------------------------------------------
|
||||
# Funktion: Testet ein HTTP(S)-Ziel mit Interface-Bindung
|
||||
# ----------------------------------------------------------
|
||||
test_target() {
|
||||
local target="$1"
|
||||
|
||||
# -4 erzwingt IPv4, --interface bindet Source-Interface,
|
||||
# --max-time 8 begrenzt Timeout, -s silent, -o /dev/null keine Ausgabe
|
||||
$CURL_BIN -4 --interface "$IFACE" --max-time 8 -s -o /dev/null "$target"
|
||||
return $?
|
||||
}
|
||||
|
||||
# ----------------------------------------------------------
|
||||
# Tests durchführen
|
||||
# ----------------------------------------------------------
|
||||
|
||||
FAILED=0
|
||||
|
||||
for TG in "${TARGETS[@]}"; do
|
||||
test_target "$TG"
|
||||
if [ $? -ne 0 ]; then
|
||||
FAILED=$((FAILED + 1))
|
||||
fi
|
||||
done
|
||||
|
||||
# Wenn mindestens EIN Ziel funktioniert → online
|
||||
if [ $FAILED -lt 3 ]; then
|
||||
[ -f "$STATE_FILE" ] && rm -f "$STATE_FILE"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Wenn ALLE drei fehlschlagen → offline
|
||||
if [ -f "$STATE_FILE" ]; then
|
||||
TS="$($DATE_BIN '+%F %T')"
|
||||
echo ""
|
||||
echo "$TS - Interface $IFACE: TCP/HTTP nicht erreichbar (curl-Test; Targets: ${TARGETS[*]})!" >&2
|
||||
echo ""
|
||||
exit 1
|
||||
else
|
||||
# Erster Fehlschlag — noch keine Meldung
|
||||
touch "$STATE_FILE"
|
||||
exit 0
|
||||
fi
|
||||
66
check_inet_iface_ping.sh
Executable file
66
check_inet_iface_ping.sh
Executable file
@@ -0,0 +1,66 @@
|
||||
#!/usr/bin/env bash
|
||||
# Prüft ein Interface gegen drei Internet-Ziele.
|
||||
# Es wird nur dann ein Fehler gemeldet, wenn alle drei Ziele nicht erreichbar sind.
|
||||
# Zudem erfolgt die Meldung erst beim zweiten aufeinanderfolgenden Offline-Test.
|
||||
#
|
||||
# Aufruf: check_inet_iface.sh <interface>
|
||||
|
||||
IFACE="$1"
|
||||
|
||||
# Drei Ziele, beliebig anpassbar (IPs oder Hostnames)
|
||||
TARGETS=("1.1.1.1" "8.8.8.8" "www.debian.org" "oopen.de")
|
||||
|
||||
PING_BIN="/bin/ping"
|
||||
TIMEOUT_BIN="/usr/bin/timeout"
|
||||
DATE_BIN="/bin/date"
|
||||
|
||||
STATE_DIR="/var/run/check_inet"
|
||||
STATE_FILE="$STATE_DIR/$IFACE.fail"
|
||||
|
||||
mkdir -p "$STATE_DIR"
|
||||
|
||||
if [ -z "$IFACE" ]; then
|
||||
echo "Usage: $0 <interface>" >&2
|
||||
exit 2
|
||||
fi
|
||||
|
||||
# ----------------------------------------------------------
|
||||
# Funktion: Teste ein Ziel über das Interface
|
||||
# ----------------------------------------------------------
|
||||
test_target() {
|
||||
local target="$1"
|
||||
$TIMEOUT_BIN 10 $PING_BIN -I "$IFACE" -c 2 -W 2 "$target" >/dev/null 2>&1
|
||||
return $?
|
||||
}
|
||||
|
||||
# ----------------------------------------------------------
|
||||
# Alle drei Ziele testen
|
||||
# ----------------------------------------------------------
|
||||
|
||||
FAILED=0
|
||||
|
||||
for TG in "${TARGETS[@]}"; do
|
||||
test_target "$TG"
|
||||
if [ $? -ne 0 ]; then
|
||||
FAILED=$((FAILED + 1))
|
||||
fi
|
||||
done
|
||||
|
||||
# Wenn mindestens ein Ziel erreichbar ist → online
|
||||
if [ $FAILED -lt 3 ]; then
|
||||
# Erfolg: State zurücksetzen
|
||||
[ -f "$STATE_FILE" ] && rm -f "$STATE_FILE"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Wenn alle Ziele fehlschlagen → offline
|
||||
if [ -f "$STATE_FILE" ]; then
|
||||
# Zweiter Fehlschlag → Meldung
|
||||
TS="$($DATE_BIN '+%F %T')"
|
||||
echo "$TS - Interface $IFACE: Internet nicht erreichbar (Targets: ${TARGETS[*]})!" >&2
|
||||
exit 1
|
||||
else
|
||||
# Erster Fehlschlag - Still, aber State setzen
|
||||
touch "$STATE_FILE"
|
||||
exit 0
|
||||
fi
|
||||
Reference in New Issue
Block a user