Welcome, Guest. Please login or register.
Did you miss your activation email?

Author Topic: Script zur Kontrolle des Interzugangs für die Kids  (Read 1802 times)

Offline bluelupo

  • User
  • Posts: 2.068
    • BluelupoMe
Hallo zusammen,
ich habe mir mal intensive Gedanken gemacht, wie ich den Internetzugang besser unter Kontrolle habe, als auf das bloße Vertrauen einer Absprache. Natürlich kann das Script keinen vernünftigen Umgang des Nachwuchses mit den Internetzugang ersetzen, bestenfalls unterstützen.

Das Script rnw.sh (RestrictedNetwork) wird als cronjob des root Users eingetragen und überprüft alle 5 Minuten zwischen 9:00 (-u) und 21:00 Uhr (-r) ob eine Internetverbindung über WLAN-Interface (-i) existiert. Sollte die momentane Uhrzeit zwischen den erlaubten Werten liegen bleibt die Defaultroute erhalten bzw. wird gesetzt. Ansonsten wird die Defaultroute gelöscht. Die Option -s schaltet das ganze scharf. Die Option -h listet eine kurze Hilfe auf.

Code: [Select]

00/5 * * * * /usr/local/scripts/rnw.sh -i wlan0 -u 0900 -r 2100 -s


Die Option -l listet zur Überprüfung alle gestzten Werte auf und zeigt ob zur Aufrufzeit ein Interzugriff möglich ist.
Code: [Select]

$ /usr/local/scripts/run_rnw.sh -i wlan0 -u 0900 -r 2100 -l
Standardeinstellungen:
----------------------
Aktuelle Uhrzeit:            0804 Uhr
Netzwerkdevice:              wlan0
IP des Gateway:              192.168.178.1
Internetzugriff erlaubt ab:  0900 Uhr
Internetzugriff gesperrt ab: 2100 Uhr
Internetzugriff momemtan:    no


Scriptlisting (Variable IP_GATEWAY an eigene Gegebenheiten anpassen):
Code: [Select]

#!/bin/bash
########## Variablendefinitionen (Defaultwerte) ##########
INTERFACE="wlan0"
CURRENT_TIME=`date '+%H%M'`
UNRESTRICTED_TIME="1300"
RESTRICTED_TIME="1900"
IP_GATEWAY="192.168.178.1"

########## Funktionsdefinitionen ##########
usage()
{
echo "Syntax: $0 [-h | -i <interface> | -u <hhmm> | -r <hhmm> | -l] -s"
echo ""
echo " -h (help):           diese Hilfeseite"
echo " -i (interface):      Interface das keinen Internetzugang haben soll (Default: wlan0)"
echo " -u (unrestricted):   Zeitpunkt ab dem Interface nicht mehr gesperrt werden soll (Format: hhmm)"
echo " -r (restricted):     Zeitpunkt ab dem Interface gesperrt werden soll (Format: hhmm)"
echo " -s (set):            Automatisches Ein- oder Ausschalten der Netzwerkbeschraenkungen in Abhaengigkeit"
echo "                      von Option -u bzw. -r (Parameter muss zwingend gesetzt sein)"
echo " -l (list):           listet die gesetzten Voreinstellungen auf (Interface und Zeiten)"
echo ""
exit 1
}

get_gw_status()
{
STATUS_GATEWAY=`ip route | grep "default via $IP_GATEWAY dev $INTERFACE"`
if [ "$STATUS_GATEWAY" ]
then
SHOW_GW="yes"
elif [ "$STATUS_GATEWAY" = "" ]
then
SHOW_GW="no"
fi
}

set_nw_restriction()
{
SET_NW_RESTRICTION=$1
STATUS_GATEWAY=`ip route | grep "default via $IP_GATEWAY dev $INTERFACE"`

if [ "$SET_NW_RESTRICTION" = "on" ]
then
if [ "$STATUS_GATEWAY" ]
then
ip route del default
fi

elif [ "$SET_NW_RESTRICTION" = "off" ]
then
if [ "$STATUS_GATEWAY" = "" ]
then
ip route add default via $IP_GATEWAY dev $INTERFACE
fi

elif [ "$SET_NW_RESTRICTION" = "not" ]
then
exit 2
fi
}


do_check_time()
{
if [ $CURRENT_TIME -lt $UNRESTRICTED_TIME -o $CURRENT_TIME -gt $RESTRICTED_TIME ]
then
set_nw_restriction on
elif [ $CURRENT_TIME -gt $UNRESTRICTED_TIME -a $CURRENT_TIME -lt $RESTRICTED_TIME ]
then
set_nw_restriction off
else
set_nw_restriction not
fi
}



if [ $# -eq 0 ]; then
usage
fi
########## Hauptprogramm ##########
while getopts hi:r:u:sl OPTION
do
case $OPTION in
h)
usage
;;

i)
INTERFACE=$OPTARG
;;

u)
UNRESTRICTED_TIME=$OPTARG
;;

r)
RESTRICTED_TIME=$OPTARG
;;

s)
do_check_time
;;

l)
get_gw_status
echo "Standardeinstellungen:"
echo "----------------------"
echo "Aktuelle Uhrzeit:            "$CURRENT_TIME" Uhr"
echo "Netzwerkdevice:              "$INTERFACE
echo "IP des Gateway:              "$IP_GATEWAY
echo "Internetzugriff erlaubt ab:  "$UNRESTRICTED_TIME" Uhr"
echo "Internetzugriff gesperrt ab: "$RESTRICTED_TIME" Uhr"
echo "Internetzugriff momemtan:    "$SHOW_GW
echo ""
;;

\?)
echo "Falsche Option $OPTION angegeben!"
;;
esac
done
shift `expr $OPTIND - 1`

exit 0
#EOF


Verbesserungvorschläge sind gerne Willkommen, da das Script mit Sicherheit nicht perfekt ist :-(