środa, 28 października 2009

Funckja sprawdzająca czy w systemie podane porty nie są używane

Funkcja wykorzystuje systemowy program netstat, porty do sprawdzenia podajemy w zmiennej szPorts rozdzielając przecinkiem

function BOOL CheckListenPorts(szPorts, svResult, bLog)
number hPlikBat, hFileLog;
BOOL bResult;
LIST lsPort,lsNetStat;
string szParam,svLine, szPort;
int i,j,nWait;
begin
if bLog then WriteLog(0,"* Sprawdzenie czy wybrane porty nie są w użyciu"); endif;
bResult = TRUE;
svResult = "";
lsPort = ListCreate(STRINGLIST);
lsNetStat = ListCreate(STRINGLIST);
StrGetTokens(lsPort,szPorts,",");

OpenFileMode (FILE_MODE_APPEND);
if (CreateFile (hPlikBat, TARGETDIR, "netstat.bat") < 0) then bResult = FALSE; else szParam = WINSYSDIR ^ "netstat.exe -a -n -p TCP >\""+ TARGETDIR ^ "netstat.log\"";
WriteLine(hPlikBat,szParam);
CloseFile(hPlikBat);
endif;

//Execute
if LaunchApplication(TARGETDIR ^ "netstat.bat", "", TARGETDIR, SW_HIDE, 0, LAAW_OPTION_USE_SHELLEXECUTE | LAAW_OPTION_WAIT | LAAW_OPTION_SHOW_HOURGLASS)=ISERR_SUCCESS then
nWait=0;
while !Is(FILE_EXISTS, TARGETDIR ^ "netstat.log")&&(nWait<5) Sleep(500); nWait = nWait + 1; endwhile; if Is(FILE_EXISTS, TARGETDIR ^ "netstat.log") then OpenFileMode (FILE_MODE_NORMAL); OpenFile (hFileLog, TARGETDIR, "netstat.log"); while (GetLine (hFileLog, svLine) = 0) StrSub(svLine,svLine,0, 32); ListAddString(lsNetStat,svLine,AFTER); endwhile; CloseFile (hFileLog); //Sprawdzenie Portow if (ListCount(lsPort)>0) && (ListCount(lsNetStat)>0) then
ListSetIndex(lsPort,LISTFIRST);
for i=0 to ListCount(lsPort)-1
ListCurrentString(lsPort,szPort);
ListSetIndex(lsNetStat,LISTFIRST);
for j=0 to ListCount(lsNetStat)-1
ListCurrentString(lsNetStat, svLine);
if StrFind(svLine,":"+szPort)>0 then
if StrLength(svResult)>0 then
svResult = svResult + "," + szPort;
else
svResult = szPort;
endif;
if bLog then WriteLog(1," - Port:"+szPort+" jest w użyciu"); endif;
endif;
ListSetIndex(lsNetStat,LISTNEXT);
endfor;
ListSetIndex(lsPort, LISTNEXT);
endfor;
endif;

else
if bLog then WriteLog(1," - plik nie został utworzony \""+TARGETDIR ^ "netstat.log"+"\""); endif;
bResult = FALSE;
endif;

endif;



ListDestroy(lsPort);
ListDestroy(lsNetStat);
return bResult;
end;

Brak komentarzy:

Prześlij komentarz