Zabicie procesu po zakończeniu korzystania z internetu [CMD]

Witam. Potrzebuję taki skrypt, który będzie śledził, czy dany proces wysyła lub pobiera pakiety do Internetu, a gdy już przestanie je wysyłać lub pobierać, to po minucie ma zabić ten proces. Skrypt ma działać pod system Windows Server 2003.

Z góry dziękuje za pomoc.

@ECHO OFF

SETLOCAL ENABLEDELAYEDEXPANSION

SETLOCAL ENABLEEXTENSIONS

CLS


:OuterLoop

SET strProcessName=

SET /A intInfoDisplayed=0


SET /P strProcessName="Nazwa procesu (bez rozszerzenia): "

IF NOT DEFINED strProcessName (

	ECHO.

	ECHO Nazwa procesu nie zostala podana.

	ECHO.

	GOTO :OuterLoop

)


:InnerLoop

SET strPID=

SET /A intState=0


FOR /F "tokens=2" %%i IN ('TASKLIST /NH /FI "IMAGENAME eq !strProcessName!.exe" ^| FIND "!strProcessName!.exe"') DO SET strPID=%%i

IF NOT DEFINED strPID (

	ECHO.

	ECHO Proces o nazwie !strProcessName!.exe nie istnieje.

	ECHO.

	GOTO :OuterLoop

)


IF !intInfoDisplayed! EQU 0 (

	ECHO.

	ECHO ID procesu o nazwie !strProcessName!.exe jest rowne !strPID!.

	SET /A intInfoDisplayed=1

)


ECHO.

ECHO Sprawdzanie polaczen...

ECHO Protokol ^| Adres Lokalny ^| Adres obcy ^| Stan

FOR /F "tokens=1,2,3,4" %%i IN ('NETSTAT -no ^| FIND "!strPID!"') DO (

	ECHO %%i ^| %%j ^| %%k ^| %%l

	IF /I %%l EQU ustanowiono SET /A intState=1

)

IF !intState! EQU 0 GOTO :KillProcess

TIMEOUT /T 5 /NOBREAK

GOTO :InnerLoop


:KillProcess

ECHO.

ECHO Proces o nazwie !strProcessName!.exe zostanie zakonczony.

ECHO.

TIMEOUT /T 60 /NOBREAK

ECHO.

TASKKILL /PID !strPID!

Nie wiem, czy Timeout działa na Win Server 2003. Jeśli nie działa to zastąp to polecenie za pomocą Sleep (albo przy pomocy czegoś innego). Ja powyższy kod testowałem na Win 7 i raczej jest OK. Jest jedno ale … skrypt ten został przygotowany dla aplikacji, które korzystają z protokołu TCP, dla UDP trzeba by wprowadzić zmiany, ale to już możesz się bawić sam.

BTW a skrypt z tego tematu http://forum.dobreprogramy.pl/skrypt-porownujacy-dwa-foldery-t451204.html Ci działa?

Działa bez problemu

Szczerze nie wykorzystałem tego skryptu, gdyż zainstalowałem na ów systemie stosowną aplikację.

Dzięki wielkie za pomoc.

Rozumiem. Mogłeś w tamtym temacie napisać o tym, bo kto wie, może się komuś przyda ta aplikacja. Zresztą jak zamiast skryptu z tego tematu znajdziesz jakąś aplikację, to też daj znać.

A odnośnie samego kodu … Możesz trochę poprawić jego wydajność jeśli fragment kodu odpowiedzialny za pobieranie ID procesu przerzucisz do zewnętrznej pętli (label OuterLoop). Możesz też zastanowić się, czy wolisz, żeby informacje wyświetlały się na ekranie, czy też były zapisywane w jakimś pliku.