Quantcast
Channel: Multimediaforum
Viewing all articles
Browse latest Browse all 4603

Mit Shellscript Informationen aus laufendem Prozess (nodogsplash) extrahieren

$
0
0
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

Code:

/usr/bin/ndsctl status
ausführe, bekomme ich folgende Statusmeldung von nodogsplash:

Code:

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
========

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

Code:

/usr/bin/ndsctl block MAC
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

Code:

/usr/bin/ndsctl unblock MAC
gemacht werden.

Liebe 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:"

bekomme ich folgende Ausgabe:
Code:

IP: 192.168.1.125 MAC: XX:XX:XX:XX:XX:XX
Added duration:  0d 2h 29m 59s

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.

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.list

Die Ausgabe ist nun:
Code:

Mac-Adresse: XX:XX:XX:XX:XX:XX
Stunden: 2h

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?

Viewing all articles
Browse latest Browse all 4603