Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
zeitliches Volumen für Internetzugang festlegen [solved]
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

Goto page 1, 2  Next  
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) Diskussionsforum
View previous topic :: View next topic  
Author Message
slick
Bodhisattva
Bodhisattva


Joined: 20 Apr 2003
Posts: 3495

PostPosted: Sat Dec 29, 2012 3:47 pm    Post subject: zeitliches Volumen für Internetzugang festlegen [solved] Reply with quote

Ich tüftel schon einige Zeit an einer Lösung wie man es schafft einer IP/MAC aus dem LAN nur eine bestimmte Surfzeit zu ermöglichen. Also wie eine Kindersicherung. Und zwar nicht nach festen Zeiten, (das wäre ja viel zu einfach ;) ) sondern einem Gesamtlimit je Tag oder Woche. Also z.B. jeden Tag max. 4 Stunden Internet. Ob nun am Stück oder gestückelt sei erstmal egal. Ideal wäre natürlich stückelbar.

Die Idee die ich hatte wäre ein Cronjob der einen minütlichen Ping auf das betreffende Gerät absetzt. Ist es pingbar, wird per iptables die Verbindung freigegeben und ein Zähler läuft los. Jede weitere Minuten wird nun verglichen ob das Limit voll ist und ggf. per iptables die Verbindung wieder abgedreht. Klingt auf den ersten Blick trivial, wird aber schnell komplex wenn man das in Ruhe durchdenkt.

Hat jemand ein anderer/bessere Idee? Bin doch bestimmt nicht der Erste mit dem Bedarf dazu.

Als Ideallösung schwebt mir was mit -m recent vor, evt. verschachtelt in mehreren Regeln.


Last edited by slick on Thu Jan 10, 2013 3:58 pm; edited 1 time in total
Back to top
View user's profile Send private message
bell
Guru
Guru


Joined: 27 Nov 2007
Posts: 508

PostPosted: Sat Dec 29, 2012 6:02 pm    Post subject: Reply with quote

Ich würde da eher den Squid-Ansatz verfolgen, so dass die Kids nur über Proxy ins Internet dürfen. http://www.squid-cache.org/mail-archive/squid-dev/201104/0009.html Ein Zusatz-Nutzen ist dass man mit Squid dann auch bestimmte Seiten blocken kann.
Back to top
View user's profile Send private message
slick
Bodhisattva
Bodhisattva


Joined: 20 Apr 2003
Posts: 3495

PostPosted: Sat Dec 29, 2012 6:21 pm    Post subject: Reply with quote

Wenns fürs reine Websurfen wäre ok, aber es geht auch um z.B. die Playstation. Die braucht bissl mehr als http.
Back to top
View user's profile Send private message
papahuhn
l33t
l33t


Joined: 06 Sep 2004
Posts: 626

PostPosted: Sun Dec 30, 2012 2:01 am    Post subject: Reply with quote

Hi,

was hälst Du denn davon:

-A FORWARD -s 1.2.3.4 -m recent --name surf --rcheck --seconds 60 -j ACCEPT
-A FORWARD -s 1.2.3.4 -m limit --limit 240/day --limit-burst 240 -m recent --name surf --set -j ACCEPT
-A FORWARD -s 1.2.3.4 -j REJECT

Idee:

Die zweite Regel öffnet (mittels -m recent --set) bis zu 240 Zeitfenster pro Tag (mittels -m limit), in denen 60 Sekunden lang Pakete durchgelassen werden (erste Regel). Auf die Art hat man durchschnittlich bis 240*60 Sekunden = 4 Stunden Internetzugang täglich. Die erste Regel bestimmt damit die Zeitgranularität, in der die Internetnutzung abgerechnet wird.

Anmerkungen:

- Durch das limit-burst können die 4 Stunden zu Anfang in einem Stück verbraucht werden. Danach ist aber nicht unbedingt 20 Stunden Pause. Da sich der limit Bucket alle 6 Minuten um ein Token füllt, kann auch alle 6 Minuten ein 1-Minuten-Zeitfenster geöffnet werden - oder auch mehrere, wenn man länger wartet.

- Langlebige TCP Verbindungen können die REJECTs der dritten Regel überleben, wenn das REJECT-Zeitfenster nicht allzu lang ist. Mit --reject-with tcp-reset kannst Du das aber den Verbindungsschluss erzwingen.

- Unter Nutzung von hashlimit ließe sich wahrscheinlich das -s loswerden.

Grüße
_________________
Death by snoo-snoo!
Back to top
View user's profile Send private message
slick
Bodhisattva
Bodhisattva


Joined: 20 Apr 2003
Posts: 3495

PostPosted: Sun Dec 30, 2012 1:00 pm    Post subject: Reply with quote

Gefällt mir sehr gut. :) Allerdings habe ich noch ein paar (Verständnis-) Fragen dazu.

1) Die Regeln gehen nach meinem Verständnis davon aus die Default-Policy wäre DROP. Wie müßte man das negieren wenn die Default-Policy ACCEPT wäre?

2) Aktuell bräuchte man den Router nur kurz resetten und hätte dann wieder volle 4h. Was könnte man tun um nach dem initialen Durchlauf des Regel-Scripts erst eine gewisse Wartezeit (z.B. 12h) einzufügen bevor das erste Zeitfenster aufgemacht werden kann?

3) Ich kapiere das limit-burst leider nicht. Wenn ich jetzt z.B. 5h am Tage konfigurieren möchte macht das ein limit von --limit 300/day. Wie ändert sich dann --limit-burst? Auch 300?

4) Um das ganze MAC basierend zu machen, könnte ich die Regeln direkt mit -m mac kombinieren oder empfielt sich besser ein eigener Regelsatz in den "umgelenkt" wird? z.B. (ungetestet):
Code:

-N TIMELIMIT
-A TIMELIMIT -m recent --name surf --rcheck --seconds 60 -j ACCEPT
-A TIMELIMIT -m limit --limit 240/day --limit-burst 240 -m recent --name surf --set -j ACCEPT
-A TIMELIMIT -j REJECT

-A FORWARD -m mac -mac-source 00:11:22:33:44:55 -j TIMELIMIT


5) Wie müßte ich obigen Regelsatz so abändern das er erstmal nur komplett geloggt wird (z.B. minütlich OK oder GESPERRT) statt wirklich zu begrenzen um zu beobachten das es auch so tut wie es soll.
Back to top
View user's profile Send private message
papahuhn
l33t
l33t


Joined: 06 Sep 2004
Posts: 626

PostPosted: Sun Dec 30, 2012 4:09 pm    Post subject: Reply with quote

Hi,

1) die Regeln gehen von einer ACCEPT-Policy aus, deswegen das REJECT ganz am Ende.
2-3) Unten folgt ein Beispiel ohne -m limit, mit initialer Wartezeit.
4) MAC-basierend geht zunächst mal nicht, da -m recent mit IPs arbeitet. Du müsstest vorfiltern, dass eine IP-Adresse nicht von einer "illegalen" MAC genutzt wird.

Code:
modprobe xt_recent ip_pkt_list_tot=255

-N setwait

-A setwait -s 1.2.3.4 -m recent --name setwait --set
-A setwait -s 1.2.3.4 -m recent --name waiting --set -j REJECT

-A FORWARD -s 1.2.3.4 -m recent --name setwait ! --rcheck -j setwait
-A FORWARD -s 1.2.3.4 -m recent --name waiting --rcheck --seconds 43200 -j REJECT

-A FORWARD -s 1.2.3.4 -m recent --name surf --rcheck --seconds 60 -j ACCEPT
-A FORWARD -s 1.2.3.4 -m recent --name surf --rcheck --hitcount 240 --seconds 86400 -j REJECT
-A FORWARD -s 1.2.3.4 -m recent --name surf --set -j ACCEPT


- Das modprobe ist notwendig, damit man hitcounts > 20 nutzen kann.
- Die setwait Chain, sowie die recent-Namen setwait und waiting sind für die initialen 12 Stunden Wartezeit. Das Dumme ist hier allerdings, dass das Wartefenster von dem zu regulierenden System (1.2.3.4) gestartet werden muss. Eine Kopplungsmöglichkeit an die Uptime des Routers ist mir ohne Skripting nicht bekannt.
- Die letzten drei Regeln erlauben 240 60-Sekunden-Surffenster in den zurückliegenden 24 Stunden. Wenn Du 5 Stunden pro Tag erlauben willst, wirst Du mit dem 255 Modprobe Limit nicht auskommen (mehr geht nicht). Stattdessen musst du die Granularität runterdrehen, was ich sowieso für angebracht halte. Während ich diesen Beitrag verfasse, gibt es ja keine Internetaktivität, aber dennoch surfe ich ja im Internet. Eine Granularität von 5 oder 10 Minuten kann das besser abdecken als 60-Sekunden Fenster.

Testregeln könnten so aussehen:
Code:
-A setwait -s 1.2.3.4 -m recent --name setwait --set -j LOG --log-prefix "Set wait timer (1/2) "
-A setwait -s 1.2.3.4 -m recent --name waiting --set -j LOG --log-prefix "Set wait timer (2/2) "
-A setwait -s 1.2.3.4 -j ACCEPT

-A FORWARD -s 1.2.3.4 -m recent --name setwait ! --rcheck -j setwait
-A FORWARD -s 1.2.3.4 -m recent --name waiting --rcheck --seconds 43200 -j LOG --log-prefix "Reject during init wait "
-A FORWARD -s 1.2.3.4 -m recent --name waiting --rcheck --seconds 43200 -j ACCEPT

-A FORWARD -s 1.2.3.4 -m recent --name surf --rcheck --seconds 60 -m limit --limit 1/second -j LOG --log-prefix "Accepting in current timeslice "
-A FORWARD -s 1.2.3.4 -m recent --name surf --rcheck --seconds 60 -j ACCEPT
-A FORWARD -s 1.2.3.4 -m recent --name surf --rcheck --hitcount 240 --seconds 86400 -m limit --limit 1/second -j LOG --log-prefix "No timeslices left, rejecting "
-A FORWARD -s 1.2.3.4 -m recent --name surf --rcheck --hitcount 240 --seconds 86400 -j ACCEPT
-A FORWARD -s 1.2.3.4 -m recent --name surf --set -j LOG --log-prefix "Opening new timeslice "
-A FORWARD -s 1.2.3.4 -m recent --name surf --set -j ACCEPT


Grüße
_________________
Death by snoo-snoo!
Back to top
View user's profile Send private message
slick
Bodhisattva
Bodhisattva


Joined: 20 Apr 2003
Posts: 3495

PostPosted: Mon Dec 31, 2012 2:12 pm    Post subject: Reply with quote

Fein fein. Nochmal Danke. Für das Sicherstellen das auf der MAC die korrekte IP verwendet wird, nutze ich folgende Regel:

Code:
-A FORWARD -m mac --mac-source $MAC ! -s $IP -j REJECT
Back to top
View user's profile Send private message
slick
Bodhisattva
Bodhisattva


Joined: 20 Apr 2003
Posts: 3495

PostPosted: Tue Jan 01, 2013 4:13 pm    Post subject: Reply with quote

Ich habe nochmal darüber nachgedacht und evt. gibt es noch eine Verbesserungsmöglichkeit, zumindest für die Praxis, da nicht zwangsläufig 24h einen Tag bedeuten ;)

Also nach meinem Verständnis funktioniert es doch so (ggf. korrigiert mich bitte). (Ich vernachläßige jetzt die initiale Wartezeit)

Ich beginne um sagen wir 15 Uhr online zu spielen und spiele die 4h am Stück durch (jede Minute wurde auch min. ein Paket gesendet). Nun kann ich also frühestens 24h später, also am nächsten Tag um 15 Uhr wieder beginnen online zu spielen. Korrekt?

D.h. möchte ich am nächsten Tag jedoch 14 Uhr beginnen, müßte ich entweder am Vortag auch 14 Uhr beginnen und 4h spielen oder aber 15 Uhr beginnen und darf dann aber nur 3 Stunden spielen. Korrekt?

D.h. das Kontingent von 4h auf 24h ist in der Praxis ungünstig gewählt. Besser wäre hier ein Ansatz von z.B. 4h je 16h, da der normale Mensch ca. 8h schlafen würde und ich die "abziehen" könnte. Damit wäre man in der Verschiebung des Spielbeginnzeitpunktes (je Tag) deutlich flexibler. Das würde allerdings auch bedeuten, wenn ich wirklich die 24h eines Tages voll ausnutzen würde, könnte ich theoretisch max. 2x4h innerhalb 24h, also eines Tages spielen.

Was haltet ihr davon?
Back to top
View user's profile Send private message
papahuhn
l33t
l33t


Joined: 06 Sep 2004
Posts: 626

PostPosted: Tue Jan 01, 2013 7:37 pm    Post subject: Reply with quote

Du kannst um Mitternacht die Regeln flushen und neu einspielen, dann hast Du harte Tagesgrenzen und einen flexiblen Spielbeginn.
_________________
Death by snoo-snoo!
Back to top
View user's profile Send private message
Jean-Paul
Guru
Guru


Joined: 13 Apr 2009
Posts: 300

PostPosted: Tue Jan 01, 2013 8:07 pm    Post subject: Reply with quote

Stell doch den Minutenzähler um 00:00h wieder auf Null, dann hast du immer die vollen 24h.
Dazu brauchst du eine Datei in der das Datum und der Zähler steht.

Startest du den PC zu einem beliebigen Zeitpunkt, vergleicht dein cron-script das aktuelle Datum mit dem Eintrag in der Datei. Ist das Datum von gestern, wird das neue Datum gesetzt und der Zähler auf Null gestellt. Das verhindert, dass nach einem reboot - am selben Tag - der Zähler auf Null geht und du kannst dein Kontigent beliebig stückeln.

Interessant wird es dann natürlich an der Schnittstelle.
Du kannst von 20:00h - 24:00h dein Kontingent für heute verbrauchen und weil dein script um 00:00h den Zähler auf Null gestellt hat, bis morgens früh um 04:00h weiter spielen :?

EDIT: ja, zu lang gebraucht zum Schreiben :D
Back to top
View user's profile Send private message
slick
Bodhisattva
Bodhisattva


Joined: 20 Apr 2003
Posts: 3495

PostPosted: Tue Jan 01, 2013 8:18 pm    Post subject: Reply with quote

Jean-Paul wrote:
Interessant wird es dann natürlich an der Schnittstelle.
Du kannst von 20:00h - 24:00h dein Kontingent für heute verbrauchen und weil dein script um 00:00h den Zähler auf Null gestellt hat, bis morgens früh um 04:00h weiter spielen :?


Und es hat noch einen Nachteil... da man ja jederzeit mitten im Spiel sein könnte (z.B. 22-2 Uhr) wäre zu einem Zeitpunkt dazwischen das Rücksetzen des Counters unschön. Ich finde die 16h Lösung schicker als einen Zeitpunkt für das tägliche Rücksetzen finden zu müssen. Und es gibt eine schöne Zwangspause von min. 12h.

Wie könnte man eigentlich eine Regeln einzeln zurücksetzen ohne das gesamte iptables-Script zu reseten?
Back to top
View user's profile Send private message
Jean-Paul
Guru
Guru


Joined: 13 Apr 2009
Posts: 300

PostPosted: Tue Jan 01, 2013 8:46 pm    Post subject: Reply with quote

slick wrote:
Und es gibt eine schöne Zwangspause von min. 12h.

Es gibt wenig Leute die so hart zu sich selbst sind. :D

Zu den iptables kann ich leider nichts beitragen, da verstehe ich nichts von.
Back to top
View user's profile Send private message
slick
Bodhisattva
Bodhisattva


Joined: 20 Apr 2003
Posts: 3495

PostPosted: Tue Jan 01, 2013 10:02 pm    Post subject: Reply with quote

Jean-Paul wrote:
Es gibt wenig Leute die so hart zu sich selbst sind. :D

Zum Glück ist das nicht meine Spielzeit. Ich unterstütze da nur, Stichwort Teenager.

Ich habe da noch eine Verständnisfrage zu dem recent-Modul. Wenn ich mir jetzt die Counter ansehe, sieht das wie folgt aus:

Code:
# cat /proc/net/xt_recent/surf
src=192.168.1.74 ttl: 64 last_seen: 2967520 oldest_pkt: 168 4294913914, 4294931938, 4294949939, 651, 18653, 36658, 54659, 73269, 91283, 109294, 127305, 145309, 163318, 181320, 199322, 217333, 235335, 253997, 272178, 291849, 310944, 330944, 348961, 366970, 384977, 402979, 420986, 438990, 456994, 475000, 493114, 511204, 529207, 547259, 565402, 583423, 602450, 620454, 638456, 656462, 674465, 692467, 710577, 728610, 746636, 764640, 782646, 800649, 818656, 836667, 854675, 872676, 890683, 908685, 926811, 944818, 962829, 980835, 998840, 1016842, 1034845, 1052847, 1070849, 1088851, 1106858, 1124883, 1142892, 1160899, 1178901, 1196903, 1214905, 1232912, 1250920, 1268926, 1286936, 1304944, 1322947, 1341091, 1359236, 1377322, 1395989, 1413998, 1432002, 1450007, 1468011, 1486138, 1504515, 1522522, 1540527, 1558534, 1576541, 1594545, 1612550, 1630558, 1648559, 1666565, 1684568, 1703031, 1721041, 1739060, 1757096, 1775167, 1793171, 1811178, 1829185, 1847186, 1865223, 1883224, 1901225, 1919226, 1937227, 1955230, 1973239, 1991243, 2009246, 2027258, 2045262, 2063265, 2081274, 2099279, 2117287, 2135289, 2153296, 2171299, 2189357, 2207385, 2225395, 2243398, 2261403, 2279410, 2297412, 2315413, 2333446, 2351501, 2369512, 2387515, 2405524, 2423531, 2441539, 2460133, 2478160, 2496169, 2514171, 2532173, 2550180, 2568187, 2586191, 2604192, 2622198, 2640200, 2658201, 2676262, 2694266, 2712268, 2730270, 2748277, 2766282, 2784292, 2802388, 2820822, 2838832, 2859431, 2877447, 2895464, 2913481, 2931498, 2949509, 2967520


D.h. ich kann die aktuellen Hits sehen und deren Gesamtzahl (hier 168). Bei 60s je Hit macht das 168 Minuten. D.h. wenn dieser Wert = 240 ist, wird gesperrt? Korrekt? Und der Counter wird mit der Zeit von allein wieder kleiner oder wie läuft das?

Hintergrund: Es ist ziemlich tricky dem Teenager zu erklären wieviel Spielzeit er noch hat, insbesondere wenn er seine Spielzeit nicht am Stück nutzt. Also würde ich auf eine Mini-Website einen Verbrauchsbalken darstellen wollen. Dafür würde ich dann diesen Wert aus proc heranziehen, da dieser (meinem Verständnis nach) die genutzte Zeit in in den letzten 16h gut wiedergibt und damit errechenbar ist wieviel aktuell noch zur Verfügung steht. Spricht da was dagegen?

Nachtrag: Das heißt, gemäß der Ausgabe oben, hätte man noch 240-168 = 72min Spielzeit aktuell (am Stück) noch zur Verfügung ungeachtet dessen wie diese 168 verbrauchten zuvor entstanden sind (am Stück oder in Teilen?)
Back to top
View user's profile Send private message
fuchur
Guru
Guru


Joined: 12 Aug 2003
Posts: 578

PostPosted: Tue Jan 01, 2013 10:39 pm    Post subject: Reply with quote

slick wrote:
Jean-Paul wrote:
Es gibt wenig Leute die so hart zu sich selbst sind. :D

Zum Glück ist das nicht meine Spielzeit. Ich unterstütze da nur, Stichwort Teenager.
...
...
Hintergrund: Es ist ziemlich tricky dem Teenager zu erklären wieviel Spielzeit er noch hat, insbesondere wenn er seine Spielzeit nicht am Stück nutzt. Also würde ich auf eine Mini-Website einen Verbrauchsbalken darstellen wollen. Dafür würde ich dann diesen Wert aus proc heranziehen, da dieser (meinem Verständnis nach) die genutzte Zeit in in den letzten 16h gut wiedergibt und damit errechenbar ist wieviel aktuell noch zur Verfügung steht. Spricht da was dagegen?


Lol. Was ein Glück das man für Kindererziehung keine Führerschein brauch, der dann natürlich auch nicht abgenommen werden kann.

Jetzt streng dich mal ein bisschen an, damit die Erziehungsgebrechlichen auch wenigstens ein bisschen "hip" rüber kommen solltest du
automatisch in viertelstündlichen Intervallen die Restzeit auf Facebook bekannt geben.

MfG
Back to top
View user's profile Send private message
papahuhn
l33t
l33t


Joined: 06 Sep 2004
Posts: 626

PostPosted: Tue Jan 01, 2013 10:48 pm    Post subject: Reply with quote

Der Counter wird nicht kleiner, die Zahlen entsprechen Zeitpunken, an denen das --set durchgegangen ist. Bei deinen jetzigen Regeln würde sich die Liste füllen, bis ip_pkt_list_tot erreicht ist. Ich würde daher vor die --hitcount Regel eine --reap Regel einfügen, die die Einträge außerhalb des 16h/24h Zeitfensters herauslöscht. Dann reicht es tatsächlich, die Anzahl der Einträge in der Liste auszulesen.
_________________
Death by snoo-snoo!
Back to top
View user's profile Send private message
slick
Bodhisattva
Bodhisattva


Joined: 20 Apr 2003
Posts: 3495

PostPosted: Tue Jan 01, 2013 11:23 pm    Post subject: Reply with quote

papahuhn wrote:
Ich würde daher vor die --hitcount Regel eine --reap Regel einfügen, die die Einträge außerhalb des 16h/24h Zeitfensters herauslöscht.


Ich konnte keine Beispiel finden, nur die (mir nicht ausreichende) Info:
Quote:
--reap reap
This option can only be used in conjunction with --seconds.
When used, this will cause entries older then 'seconds' to be
purged.


Könntest mir bitte das zu oben passende Beispiel geben wie ich das richtig einsetze?
Back to top
View user's profile Send private message
papahuhn
l33t
l33t


Joined: 06 Sep 2004
Posts: 626

PostPosted: Tue Jan 01, 2013 11:37 pm    Post subject: Reply with quote

Code:
-A FORWARD -s 1.2.3.4 -m recent --name surf --rcheck --hitcount 240 --seconds 86400 -j REJECT
austauschen durch
Code:
-A FORWARD -s 1.2.3.4 -m recent --name surf --rcheck --hitcount 240 --seconds 86400 --reap -j REJECT
.

Es kann sein, dass Du so wie ich folgenden Fehler gemeldet bekommst:
iptables v1.4.16.3: unknown option "--reap".

Sag bescheid, falls ja. Ich geh erstmal ins Bett.
_________________
Death by snoo-snoo!
Back to top
View user's profile Send private message
Finswimmer
Bodhisattva
Bodhisattva


Joined: 02 Sep 2004
Posts: 5467
Location: Langen (Hessen), Germany

PostPosted: Wed Jan 02, 2013 9:32 am    Post subject: Reply with quote

slick wrote:
Jean-Paul wrote:
Interessant wird es dann natürlich an der Schnittstelle.
Du kannst von 20:00h - 24:00h dein Kontingent für heute verbrauchen und weil dein script um 00:00h den Zähler auf Null gestellt hat, bis morgens früh um 04:00h weiter spielen :?


Und es hat noch einen Nachteil... da man ja jederzeit mitten im Spiel sein könnte (z.B. 22-2 Uhr) wäre zu einem Zeitpunkt dazwischen das Rücksetzen des Counters unschön. Ich finde die 16h Lösung schicker als einen Zeitpunkt für das tägliche Rücksetzen finden zu müssen. Und es gibt eine schöne Zwangspause von min. 12h.

Wie könnte man eigentlich eine Regeln einzeln zurücksetzen ohne das gesamte iptables-Script zu reseten?


Ist dafür nicht ein gleitender Zeitintervall der letzten 24 Stunden besser?
Damit wäre sichergestellt, dass er innerhalb der letzten 24 Stunden max 4 Stunden online ist, egal wie das aufgeteilt wird. Zudem ist es unabhängig vom Kalendertag.
_________________
Bitte auf Rechtschreibung, korrekte Formatierung und Höflichkeit achten!
Danke
Back to top
View user's profile Send private message
slick
Bodhisattva
Bodhisattva


Joined: 20 Apr 2003
Posts: 3495

PostPosted: Wed Jan 02, 2013 4:22 pm    Post subject: Reply with quote

Finswimmer wrote:
Ist dafür nicht ein gleitender Zeitintervall der letzten 24 Stunden besser?
Damit wäre sichergestellt, dass er innerhalb der letzten 24 Stunden max 4 Stunden online ist, egal wie das aufgeteilt wird. Zudem ist es unabhängig vom Kalendertag.


Wie ich oben erläuterte halte ich den 4h je 16h Ansatz für am praktischsten. Der Rest waren nur Verständnisfragen, für das "was wäre wenn".
Back to top
View user's profile Send private message
slick
Bodhisattva
Bodhisattva


Joined: 20 Apr 2003
Posts: 3495

PostPosted: Wed Jan 02, 2013 7:15 pm    Post subject: Reply with quote

slick wrote:
Also würde ich auf eine Mini-Website einen Verbrauchsbalken darstellen wollen.

Vollständigkeitshalber hier das PHP-Script wie es jetzt hier auf dem Router zum Einsatz kommt.

Code:
<?php
   $used=intval(exec("cat /proc/net/xt_recent/surf | grep -o 'oldest_pkt: [0-9]*' | cut -d ' ' -f 2"));
   $h=floor((240 - $used) / 60);
   $m=(240 - $used) % 60;
   $p=round(($used * 100) / 240);
?><html>
<head>
<title></title>
<meta charset="utf-8" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="refresh" content="10; URL=." />
<style type="text/css"><!--
body { margin: 20%; background-color: #666; font-size: 1em; font-family: Arial }
.meter-wrap { position: relative; }
.meter-wrap, .meter-value, .meter-text { width: 100%; height: 2em; }
.meter-wrap, .meter-value { background: #693 top left no-repeat; }
.meter-text { position: absolute; top:0; left:0; padding-top: 0.5em; color: #fff; text-align: center; width: 100%; }
.meter-value { background-color: #900; }
--></style>
</head>
<body>
<div class="meter-wrap" style="border: 1px solid white; ">
    <div class="meter-value" style="width: <?php echo $p; ?>%;">
        <div class="meter-text">aktuell noch <?php echo $h; ?> Stunde<?php if ($h != 1) {echo 'n';} ?> und <?php echo $m; ?> Minute<?php if ($m != 1) {echo 'n';} ?></div>
    </div>
</div>
</body>
</html>


Last edited by slick on Wed Jan 02, 2013 9:04 pm; edited 2 times in total
Back to top
View user's profile Send private message
slick
Bodhisattva
Bodhisattva


Joined: 20 Apr 2003
Posts: 3495

PostPosted: Wed Jan 02, 2013 8:29 pm    Post subject: Reply with quote

Könnte mir noch jemand erklären welche genaue Bedeutung die Zahlenwerte der einzelnen Hits in /proc/net/xt_recent/* haben. Also die lange Zahlenliste. Ich vermute einen Timer, aber wie und von wo aus gezählt?

Last edited by slick on Wed Jan 02, 2013 8:30 pm; edited 1 time in total
Back to top
View user's profile Send private message
papahuhn
l33t
l33t


Joined: 06 Sep 2004
Posts: 626

PostPosted: Wed Jan 02, 2013 8:30 pm    Post subject: Reply with quote

Hat das --reap bei Dir geklappt?

Edit: Die Zahlen sind Kernel Jiffies, und hängen ab von der Kernel Tickrate. Dein System läuft mit 300Hz Tickrate, deshalb sind die Zahlenabstände bei Dir um die 18000. Beim Bootup fängt der Kernel mit einem Jiffie-Counter an, der nach 5 Minuten einen 32 bit Wraparound hat.
_________________
Death by snoo-snoo!


Last edited by papahuhn on Wed Jan 02, 2013 8:37 pm; edited 1 time in total
Back to top
View user's profile Send private message
slick
Bodhisattva
Bodhisattva


Joined: 20 Apr 2003
Posts: 3495

PostPosted: Wed Jan 02, 2013 8:32 pm    Post subject: Reply with quote

papahuhn wrote:
Hat das --reap bei Dir geklappt?


Jepp, keine Probleme. Werde ja sehen obs auch so tut wie es soll.
Back to top
View user's profile Send private message
slick
Bodhisattva
Bodhisattva


Joined: 20 Apr 2003
Posts: 3495

PostPosted: Thu Jan 03, 2013 5:46 pm    Post subject: Reply with quote

Also das reap hat nichts bewirkt. (Der Befehl gab aber auch keinen Fehler aus, iptables v1.4.6) Der Counter ist bis 255 vollgelaufen und hat dann wieder bei 1 begonnen. Eine Ermittlung der Restzeit ist somit nicht möglich (es sei denn ich resete zu einem gewissen Zeitpunkt wie oben vorgeschlagen) Gemäß iptables -m recent -h gibt es die Option bei mir auch nicht.
Back to top
View user's profile Send private message
papahuhn
l33t
l33t


Joined: 06 Sep 2004
Posts: 626

PostPosted: Sat Jan 05, 2013 9:56 pm    Post subject: Reply with quote

Dann bleibt dir wohl nur die Möglichkeit manuell zu zählen. Die aktuellen jiffies sind in /proc/timer_list zu finden, deine Tickrate ist 300.
_________________
Death by snoo-snoo!
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) Diskussionsforum All times are GMT
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum