Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem hladam program - Na monitorování trafficu (a následné akci při malém vytížení)

Hladam neaky program, ktory by monitoroval nez a keby bol trafic napr. za 5 min nulovy alebo neaky zanedbatelny vykonal by neaku akci napr. spustil neaky program resetil program alebo pod.
Potrebujem preto bo ked upujem tak som vacsinou v praci a cez den mi zblbne rapiduploader, prestane upovat, takze to mozem az vecer napravit. Ten program by monitoroval upload a keby bol zanedbatelny v priebehu napr 5. min tak by resetol program. thx
[mod]Změna předmětu, původně: hladam program (AZOR)[/mod]

Předmět Autor Datum
pokud předpokládáme Windows, tak bych to vyřešil pomocí wipfw a nějakého jednoduchého VSB skriptu.…
touchwood 29.07.2007 09:26
touchwood
hmm vo VBS neviem spravit uplne nic, mohol by si pjosiim napisat take nieco a ako sa to pouziva... m…
eth4rendil 29.07.2007 11:33
eth4rendil
tak to budeš muset chvíli vydržet, až na to (snad večer) najdu čas.
touchwood 29.07.2007 12:45
touchwood
si super, budem ti velmi vdacny dakujeeeeeeem :-)
eth4rendil 29.07.2007 13:22
eth4rendil
sorry, dneska už nic nenapíšu, bo jsem spařený.. :beer: btw chybí tady ikonka borovičky¨.. :-D
touchwood 29.07.2007 17:55
touchwood
[Fir.GIF]
host 29.07.2007 18:43
host
:-D megaLOL
touchwood 30.07.2007 08:40
touchwood
Edituj konstanty měnitelné uživatelem, ale pozor, některé věci jsou hardcoded do kódu, běží to defau…
touchwood 30.07.2007 14:43
touchwood
dávka GETDATA.BAT (standardně v c:\temp): C:\WINDOWS\system32\ipfw.exe show >C:\temp\data.txt upra…
touchwood 30.07.2007 14:46
touchwood
Tento příklad počítá s tím, že proměnné a dávka jsou uloženy v C:\temp. Je to předvedeno na příkladu…
touchwood 30.07.2007 14:49
touchwood
wooow dakujeem dakujeeem dakujeeem si super :-):-) mas u mna :beer:
eth4rendil 30.07.2007 15:50
eth4rendil
v system32 ja nemam subor ipfw.exe. mam winxp. este by som sa chcel spytat na rozmiestnenie suborov…
eth4rendil 30.07.2007 16:36
eth4rendil
Ani se nedivím, že ipfw.exe nemáš... Touchwood zřejmě předpokládal použití wipfw? wipfw.sourceforge.…
host 30.07.2007 16:48
host
este jedna mala otazocka, tento script konroluje traffic jednorazovo ze? musim ho dat nex sa spusta…
eth4rendil 30.07.2007 16:58
eth4rendil
Už ti to touchwoood psal: ...a co 5 minut to stačí kontrolovat VBS skriptem, který se může nastavit…
host 30.07.2007 17:01
host
jj přesně tak. samozřejmě by to šlo udělat jako nekonečný cyklus a spouštět jako program.
touchwood 30.07.2007 18:35
touchwood
ok este raz thx. ked pridem domof s prace tak to vyskusam... dufam ze tam nic nepomrvim..
eth4rendil 30.07.2007 22:49
eth4rendil
mno zatim som to vseko porobkal a tvari sa to, ze to funguje. este taka mala otazocka konstanta Cons…
eth4rendil 31.07.2007 04:11
eth4rendil
FWrow se odkazuje na řádek pravidel ipfw. Na řádku 101 je pravidlo, jehož počítání proteklých bajtů…
touchwood 31.07.2007 08:12
touchwood
nieco nefunguje, premennu konst som nastavil takto: konst = 7340032 to je 7 mb a teraz mi to vypisuj…
eth4rendil 01.08.2007 13:21
eth4rendil
Je ti jasne ze cislo ulozene v PC (ako byte alebo word alebo dword alebo qword) nemoze nadobudat nek…
MM.. 01.08.2007 13:32
MM..
vsak hej ale neviem preco by to mala byt nekonecna hodnota...
eth4rendil 01.08.2007 13:38
eth4rendil
nie nekonecna, staci ze je vacsia ako urcita maximalna hodnota a nie je mozne ju do daneho miesta (r…
MM.. 01.08.2007 13:55
MM..
hmm uz mi to kupodivu prestalo vyhadzovat, nexapem. thx moc za vsetko
eth4rendil 01.08.2007 23:58
eth4rendil
Fcia CLng konvertuje na premennu typu long, t.j. maximalny rozsah je -2147483648 az 2147483647. Ak h…
MM.. 02.08.2007 01:13
MM..
hmm prave teraz mi to zase vyhodilo errora, toto co si napisal som sa tak "lamerski" dovtipil. aj so…
eth4rendil 02.08.2007 02:48
eth4rendil
alebo zmenit premennej maximalny rozsah na neaky neobmedzeny.
eth4rendil 02.08.2007 02:59
eth4rendil
Neobmedzeny rozsah neexistuje. Ked tam mas take cislo tak ten program nefunguje spravne, ako si moho…
MM.. 02.08.2007 13:25
MM..
jj spravil som to presne tak, len ten rozsah to je 10 miestne cislo a to cca 2200 mb to mam upload z…
eth4rendil 02.08.2007 15:54
eth4rendil
2G upload ::) ok tak ten prevod zmen na double, to zvladne aj hodne vecsie cisla ale od urcitej velk…
MM.. 02.08.2007 16:15
MM..
jj, přesně tak. BTW, by mě zajímalo, co furt eth4endil uploaduje ;-)
touchwood 03.08.2007 13:10
touchwood
Mozno skusa ze co sa stane ked zaplni cely internet :))
MM.. 03.08.2007 13:18
MM..
myslím, že má reálnou šanci, za předpokladu, že na druhé straně není výstup směrován do /dev/nul :-D
touchwood 03.08.2007 14:06
touchwood
a malickost 200 filmov :-|
eth4rendil 03.08.2007 14:39
eth4rendil
No jo ale to sem nepis. Takze budem predpokladat ze sa jedna o tvoje "filmy" z dovolenky apod. poslední
MM.. 03.08.2007 14:44
MM..
ok thx, skusim ale az vecer bo som teraz v praci, nepomohlo by keby som do planovanych uloh niekedy…
eth4rendil 02.08.2007 18:47
eth4rendil
Zmen ten jeden riadok co som pisal (to ti pojde aj do miliion GB aj ked to porovnanie bude s mensou…
MM.. 02.08.2007 18:52
MM..
jj ok ja som len myslel ze to bude mensi limit a viac nepresne. s tankom na komare :D roflol
eth4rendil 02.08.2007 19:54
eth4rendil
jj funguje to super skusal som to dakujeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeem velmi vsetkych moc mi pomaha…
eth4rendil 03.08.2007 02:25
eth4rendil

pokud předpokládáme Windows, tak bych to vyřešil pomocí wipfw a nějakého jednoduchého VSB skriptu.

Ve wipfw stačí nastavit jedno pravidlo, které bude accountovat daný traffic a co 5 minut to stačí kontrolovat VBS skriptem, který se může nastavit jako naplánovaná úloha a rovnou v něm nadefinovat to "resetování programu"

Edituj konstanty měnitelné uživatelem, ale pozor, některé věci jsou hardcoded do kódu, běží to defaultně z c:\temp

REM -----------------------------
REM KONSTANTY menitelne userem
REM -----------------------------

Const FWrow = "00101"
App = "calc.exe"
appdir = "C:\windows\system32\"
progdir = "C:\temp\"
ipfwdata = progdir & "data.txt"
konst = 0

REM -----------------------------
REM KONSTANTY
REM -----------------------------

Const ForReading = 1
Const ForAppending = 8
Const Overwrite = True

REM -----------------------------
REM Test behu aplikace
REM -----------------------------

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcesses = objWMIService.ExecQuery _
    ("Select * from Win32_Process Where Name = '" & App &"'")

If colProcesses.Count = 0 Then
    Wscript.Echo "Program nebezi"
    Wscript.Quit
End If

REM -----------------------------
REM Definice objektu
REM -----------------------------


Set objFSO = CreateObject("Scripting.FileSystemObject")
Set WshShell = WScript.CreateObject("WScript.Shell")

REM -----------------------------
REM nacteni stare hodnoty
REM -----------------------------

Set objReadFile = objFSO.OpenTextFile(PROGDIR & "status.txt", 1)
oldtraffic = objReadFile.ReadAll
objReadFile.Close

REM -----------------------------
REM vypis stavu ipfw
REM -----------------------------

WshShell.Run "C:\temp\getdata.bat"
Wscript.sleep 2000

REM -----------------------------
REM vyhledani akt. stavu ipfw
REM -----------------------------

Set objTextFile = objFSO.OpenTextFile(ipfwdata, ForReading)

Do While objTextFile.AtEndOfStream <> True
        Record = split(objTextFile.Readline, " ")
        If Record(0) = FWrow then traffic = Record(2)
Loop
objTextFile.Close

REM -----------------------------
REM zapis predesleho stavu
REM -----------------------------


Set objTextFile = objFSO.CreateTextFile _
    (PROGDIR & "status.txt", True)

objTextFile.WriteLine(traffic)

objTextFile.Close


if CLng(oldtraffic + konst) >= CLng(traffic) then

		REM -----------------------------
		REM terminace
		REM ----------------------------
		rem strComputer = "."
		rem Set objWMIService = GetObject("winmgmts:" _
		rem 	    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

		Set colProcessList = objWMIService.ExecQuery _
		    ("Select * from Win32_Process Where Name = '" & App &"'")

		For Each objProcess in colProcessList
		    objProcess.Terminate()
		Next
		
		REM ---------------------------
		REM spusteni znova
		REM ---------------------------
		
		WshShell.Run appdir&app
	end if
	

pokračování v další reakci

dávka GETDATA.BAT (standardně v c:\temp):

C:\WINDOWS\system32\ipfw.exe show >C:\temp\data.txt

upravený wipfw.conf:

# First flush the firewall rules
-f flush

# Localhost rules
add 100 allow all from any to any via lo*
add 101 allow tcp from me to any 80 keep-state out


# Prevent any traffic to 127.0.0.1, common in localhost spoofing
add 110 deny log all from any to 127.0.0.0/8 in
add 110 deny log all from 127.0.0.0/8 to any in

#Testing rules, to find ports used by services if we aren't sure. These rules allow ALL traffic to pass through the firewall, disabling any subsequent rules
#add 140 allow log logamount 500 tcp from any to any
#add 150 allow log logamount 500 udp from any to any

add check-state
add pass all from me to any out keep-state
add count log ip from any to any

upravený loadrules.cmd:

echo 0 > C:\temp\status.txt
"%systemroot%\system32\ipfw" "%cd%\..\wipfw.conf"

Pozor, firewall normálně propouští, je použit pouze na počítání dat

Tento příklad počítá s tím, že proměnné a dávka jsou uloženy v C:\temp. Je to předvedeno na příkladu restartování aplikace calc.exe s tím, že se počítají odeslaná data na vzdálený port 80 - jedná se o řádku konfigurace 101.

Kdyby bylo něco nejasné, dej vědět.

edit: jo, proměnná konst slouží k nastavení minimálního trafficu (v bytech), který se přičte k naměřeným datům

FWrow se odkazuje na řádek pravidel ipfw. Na řádku 101 je pravidlo, jehož počítání proteklých bajtů nás zajímá. Tedy změnou čísla řádku můžeš změnit řádek (vždy je to třetí sloupec na daném řádku), kterou ti bude skript "vycucávst" z výpisu ipfw. To se hodí, kdybys náhodou začal ipfw používat jako standardní firewall (což každému doporučuju; je k tomu ke stažení i GUI klikátko)

samotná pravidla ipfw si můžeš zobrazit pomocí příkazu ipfw show - pak ti to bude jasné.

nie nekonecna, staci ze je vacsia ako urcita maximalna hodnota a nie je mozne ju do daneho miesta (rezerbvovaneho pre premennu) ulozit. To sa vola overflow (pretecenie).
Pockaj si ale na vyjadrenie touchwooda, kedze je to naprogramovane v niecom strasne divnom a nevidim tam ziadne definicie typu (a teda aj max.rozsahu) premennych.

Fcia CLng konvertuje na premennu typu long, t.j. maximalny rozsah je -2147483648 az 2147483647. Ak hodnota (oldtraffic + konst), alebo hodnota traffic je z nejakeho dovodu mimo tohoto rozsahu, tak nastane overflow. Alebo mozno to vypise nejaku chybu aj ak niektora z tych premennych neobsahuje nic alebo nejaku blbost (text apod).

Pozeram ze ten program bere hodnotu oldtraffic zo suboru status.txt

Set objReadFile = objFSO.OpenTextFile(PROGDIR & "status.txt", 1)
oldtraffic = objReadFile.ReadAll
objReadFile.Close

do ktoreho si o par riadkov neskor zapisuje aktualny traffic (pre dalsi priebeh programu).

problem bol mozno v tom ze pri prvom spusteni programu ten subor status.txt este neexistoval, takze precital asi do premennej oldtraffic nejaku hovadinu. Pri dalsom spusteni programu uz ten subor existuje (pri prvom spusteni ho tesne pred tym padnutim vytvoril).

P.S. Alebo to precita do oldtraffic alebo traffic nahodne nejake sialene cislo. Ak to niekedy v buducnosti padne tak si pozri subor status.txt (mal by byt tam kde je ten program), mala by byt v nom posledna hodnota premennej traffic.

hmm prave teraz mi to zase vyhodilo errora, toto co si napisal som sa tak "lamerski" dovtipil. aj som kontroloval ten subor ale nic podozriveho som tam nevidel, teraz je tam cislo 2164495735 taze asi preto to vypisuje, mozno by sa zislo nieco cim by sa to vzdy resetlo nex to neblbne. Vies ako? thx vopred

Neobmedzeny rozsah neexistuje. Ked tam mas take cislo tak ten program nefunguje spravne, ako si mohol mat taky velky traffic?

P.S. ked to zas drbne tak si pozri aj C:\temp\data.txt to by mal byt posledny vystup z firewallu, tam vidiet potom aj v riadku 00101 ten traffic (odtial ho program precital).
Urobil si vsetko presne tak ako pisal touchwood?
.bat subor, ten program (nemenit tu hodnotu "00101"), zmenil si tie konfiguracne subory firewallu?

.. alebo si skus rucne spustit
C:\WINDOWS\system32\ipfw.exe show
ked si v C:\temp, ze ci to vobec korektne vola ten firewall a ci ti to do riadku s 00101 vypise aktualny traffic.

2G upload ::)
ok tak ten prevod zmen na double, to zvladne aj hodne vecsie cisla ale od urcitej velkosti straca presnost, co ale v tomto pripade nebude vadit.

if CLng(oldtraffic + konst) >= CLng(traffic) then

zmen na

if (CDbl(oldtraffic) + CDbl(konst)) >= CDbl(traffic) then

neskusal som to VBasicu sa na kilometer vyhybam, daj vediet ci to funguje.

P.S. inac to if by logickejsie malo byt
if (CDbl(traffic) - CDbl(oldtraffic)) <= CDbl(konst) then
aby to bolo pochopitelne nielen pre autora programu :-), inac je to ale to iste.

ok thx, skusim ale az vecer bo som teraz v praci, nepomohlo by keby som do planovanych uloh niekedy po spusteni tohto sciriptu dal raz za den spustit ten batak co odinstaluje wipf a nasledne druhy batak co ho nainstaluje ? tym by sa vlastne resetol trafic? alebo dva krat bo mam niekedy upload 3,5gb?

Zpět do poradny Odpovědět na původní otázku Nahoru