Hallo,
ich brauche Hilfe bei der Erstellung eines Shellscripts, das bestimmte Informationen aus einem laufenden Prozess (nodogsplash) extrahieren und verarbeiten soll.
Router: TL-WR842ND
Betriessystem: OpenWrt / Trunk
Captive Portal: nodogsplash
Wenn ich per SSH auf meinen Router connecte und
ausführe, bekomme ich folgende Statusmeldung von nodogsplash:
Mein Ziel ist es, dass per Shellscript und crontab folgendes gemacht wird:
1) Rufe Statusmeldung von nodogsplash auf (siehe oben)
2) Wenn Client vorhanden, gehe zu Punkt 3. Ansonsten exit.
3) Extrahiere MAC und Verbindungsdauer von Client 1.
3.1) Wenn Verbindungsdauer ("Added duration", siehe Statusmeldung oben) größer oder gleich ist als 1 ("1h", siehe Statusmeldung), dann blocke die MAC von Client 1 mit dem Befehl
4) Wiederhole Punkt 3 bis 3.1 für alle anderen Clients. Wenn keine Clients mehr vorhanden dann exit.
Wie funktioniert sowas? Ich hatte mit grep und awk bisher nur mäßigen Erfolg, da ich das konzept noch nicht zu 100% verstanden habe.
Der Sinn des Ganzen ist es die Internetverbindung für meine Hotspot-Gäste auf eine Stunde pro Tag zu begrenzen. Ein weiterer Script soll alle 24 Stunden gestartet werden, damit alle blockierten MAC wieder "unblocked" werden.
Dies soll dann mit dem Befehl
gemacht werden.
Liebe Grüße und vielen Dank,
crazyhorse.
UPDATE 1:
Inzwischen habe ich es nach weiteren Recherchen etwas weiter gebracht. Mit den Befehlen
bekomme ich folgende Ausgabe:
Mal schauen ob ich noch schaffe die MAC und die Stundenanzahl zu etrahieren :)
UPDATE 2:
Langsam nähere ich meinem Ziel. Ich habe jetzt nun awk hinzugefügt und die grep befehle in eine datei speichern lassen, damit awk es durchforsten kann.
Die Ausgabe ist nun:
Ich müsste jetzt eigentlich nur noch das "h" hinter der Stundenanzahl weg bekommen und eine if Anweisung schreiben, die auf größer oder gleich 1 testet? Was meint ihr?
ich brauche Hilfe bei der Erstellung eines Shellscripts, das bestimmte Informationen aus einem laufenden Prozess (nodogsplash) extrahieren und verarbeiten soll.
Router: TL-WR842ND
Betriessystem: OpenWrt / Trunk
Captive Portal: nodogsplash
Wenn ich per SSH auf meinen Router connecte und
Code:
/usr/bin/ndsctl statusCode:
root@OpenWrt:/etc# /usr/bin/ndsctl status
==================
NoDogSplash Status
====
Version: 0.9_beta9.9.6
Uptime: 0d 21h 20m 19s
Gateway Name: NoDogSplash
Managed interface: br-lan
Managed IP range: 0.0.0.0/0
Server listening: 192.168.1.1:2050
Splashpage: /etc/nodogsplash/htdocs/splash.html
Traffic control: no
Total download: 0 kByte; avg: 0 kbit/s
Total upload: 0 kByte; avg: 0 kbit/s
====
Client authentications since start: 8
Httpd request threads created/current: 301/0
Current clients: 2
Client 0
IP: 192.168.1.125 MAC: XX:XX:XX:XX:XX:XX
Added: Mon Mar 25 12:13:44 2013
Active: Mon Mar 25 14:42:20 2013
Active duration: 0d 2h 28m 36s
Added duration: 0d 2h 29m 59s
Token: 0aeaa7e8
State: Authenticated
Download: 857 kByte; avg: 0.762148 kbit/s
Upload: 402 kByte; avg: 0.357597 kbit/s
Client 1
IP: 192.168.1.105 MAC: XX:XX:XX:XX:XX:XX
Added: Mon Mar 25 12:46:43 2013
Active: Mon Mar 25 14:43:43 2013
Active duration: 0d 1h 57m 0s
Added duration: 0d 1h 57m 0s
Token: 288d8db4
State: Authenticated
Download: 168781 kByte; avg: 192.344 kbit/s
Upload: 3801 kByte; avg: 4.33266 kbit/s
====
Blocked MAC addresses: none
Allowed MAC addresses: N/A
Trusted MAC addresses: none
========1) Rufe Statusmeldung von nodogsplash auf (siehe oben)
2) Wenn Client vorhanden, gehe zu Punkt 3. Ansonsten exit.
3) Extrahiere MAC und Verbindungsdauer von Client 1.
3.1) Wenn Verbindungsdauer ("Added duration", siehe Statusmeldung oben) größer oder gleich ist als 1 ("1h", siehe Statusmeldung), dann blocke die MAC von Client 1 mit dem Befehl
Code:
/usr/bin/ndsctl block MACWie funktioniert sowas? Ich hatte mit grep und awk bisher nur mäßigen Erfolg, da ich das konzept noch nicht zu 100% verstanden habe.
Der Sinn des Ganzen ist es die Internetverbindung für meine Hotspot-Gäste auf eine Stunde pro Tag zu begrenzen. Ein weiterer Script soll alle 24 Stunden gestartet werden, damit alle blockierten MAC wieder "unblocked" werden.
Dies soll dann mit dem Befehl
Code:
/usr/bin/ndsctl unblock MACLiebe Grüße und vielen Dank,
crazyhorse.
UPDATE 1:
Inzwischen habe ich es nach weiteren Recherchen etwas weiter gebracht. Mit den Befehlen
Code:
/usr/bin/ndsctl status | grep "MAC:"
/usr/bin/ndsctl status | grep "Added duration:"Code:
IP: 192.168.1.125 MAC: XX:XX:XX:XX:XX:XX
Added duration: 0d 2h 29m 59sUPDATE 2:
Langsam nähere ich meinem Ziel. Ich habe jetzt nun awk hinzugefügt und die grep befehle in eine datei speichern lassen, damit awk es durchforsten kann.
Code:
/usr/bin/ndsctl status | grep "MAC:" > /etc/cc/mac.list
/usr/bin/ndsctl status | grep "Added duration:" > /etc/cc/time.list
awk '{print "MAC-Adresse: ",$4}' /etc/cc/mac.list
awk '{print "Stunden: ",$4}' /etc/cc/time.listCode:
Mac-Adresse: XX:XX:XX:XX:XX:XX
Stunden: 2h