Od přítelkyně jsem dostal šílené zadání. Požaduje aby její syn netrávil na internetu přes týden více než tři hodiny denně a o víkendu maximálně pět hodin denně. Na můj doplňující dotaz mě dorazila odpovědí, že kolik času denně jeho počítač běží nerozhoduje :).
Přiznávám, že jsem chtěl odpovědět "to nejde", ale děsně nerad se vzdávám. Chvíli jsem nad tím přemýšlel a kladl si otázku jak detekovat, že je z dané IP adresy používaný internet. Nakonec mě napadlo detekovat přítomnost NATových nebo INSPECtových pravidel. Nakonec jsem se rozhodl detekovat NAT pravidla, kvůli jejich delší platnosti. Vytvořil jsem dva scripty:
Tyto dva scripty jsou uloženy ve flash routeru a jsou periodicky spouštěny pomocí EEM:
Přiznávám, že jsem chtěl odpovědět "to nejde", ale děsně nerad se vzdávám. Chvíli jsem nad tím přemýšlel a kladl si otázku jak detekovat, že je z dané IP adresy používaný internet. Nakonec mě napadlo detekovat přítomnost NATových nebo INSPECtových pravidel. Nakonec jsem se rozhodl detekovat NAT pravidla, kvůli jejich delší platnosti. Vytvořil jsem dva scripty:
##
## patrik_test.tcl
##
set fileName "ftp://x.x.x.x/file"
set counter 0
set test1 0
##
## Kontrola zda pari
##
set output [ split [ exec "sh ip nat translations | inc x.x.x.x" ] "\n" ]
foreach line $output {
incr test1
}
##
## Zpracovani vysledku
##
if { $test1 > 0 } {
gets [ open $fileName ] counter
if { $counter == 1 } {
puts "patrik konec!!!"
ios_config "int fa1" "shutdown" "ip access-list extended ACL_LAN-HOME" "no 30"
} else {
incr counter -1
puts [ open $fileName w+ ] $counter
}
}
##
## patrik_set.tcl
##
set fileName "ftp://x.x.x.x/file"
set counter [lindex $argv 0]
##
## Odblokovat
##
ios_config "int fa1" "no shutdown" "ip access-list extended ACL_LAN-HOME" "30 permit ip host x.x.x.x any time-range DAYSBEFORESCHOOL"
##
## Ulozit counter
##
puts [ open $fileName w+ ] $counter
Tyto dva scripty jsou uloženy ve flash routeru a jsou periodicky spouštěny pomocí EEM:
U výše popsaného řešení jsem objevil jediný problém. A sice, že EEM spouští uvedené scripty ve stejné minutě dvakrát. Netuším zda se jedná o chybu IOSu, nebo mi něco zásadního uniklo v konfiguraci cronu, ale zatím tento problém řeším dvojnásobnou velikostí nastavovaných counterů. Pokud byste měl někdo nějaký nápad, kde hledat zakopanéh psa, tak mě neváhejte kontaktovat, děkuji.
event manager applet PATRIK_TEST
event timer cron name "10min" cron-entry "*/10 * * * *" maxrun 60
action 1.0 cli command "tclsh flash:/patrik_test.tcl"
event manager applet PATRIK_SET2
event timer cron cron-entry "1 0 * * 5-7"
action 1.0 cli command "tclsh flash:/patrik_set.tcl 60"
event manager applet PATRIK_SET1
event timer cron cron-entry "1 0 * * 1-4"
action 1.0 cli command "tclsh flash:/patrik_set.tcl 36"
!