1 (изменено: alexii, 2011-09-20 23:42:00)

Тема: AHK: on-off-Nmap

Приветствую, есть готовые скрипты для выявления включенных рабочих станций в определенное время посредством Nmap,
не получается адаптировать для работы в локальной сети предприятия, файл Result создается, но информация в нем отсутствует. Подскажите в чем ошибка.

первый скрипт

name=settings
#Persistent
IniRead, BatFile, %name%.ini, Rep, BatFile
IniRead, Delay, %name%.ini, Rep, Delay
IniRead, InfoDir, %name%.ini, Rep, InfoDir
IniRead, ActRep, %name%.ini, Rep, ActRep

SetTimer, CheckAws, %Delay%

return

CheckAws:
; проверка состояния рабочих станций
;********************************************************************************

    SetTimer, CheckAws, off

    RunWait %BatFile%

    FileReadLine ActiveLine, %InfoDir%%ActRep%, 2
    StringSplit, word_array, ActiveLine, %A_SPACE%,
    FileCopy %InfoDir%%ActRep%, %A_WorkingDir%\CheckState-%word_array8%.txt, 1

return

второй скрипт

name=settings
IniRead, InfoDir, %name%.ini, Rep, InfoDir
IniRead, Pattern, %name%.ini, Rep, Pattern
IniRead, Exclude, %name%.ini, Rep, Exclude
Output:=SUBSTR(Pattern,12,7)
Output=Result %Output%.txt

; анализ логов состояний рабочих станций
;********************************************************************************
FileDelete, test.log
FileDelete, TestSort.log
FileDelete, dates.txt
FileDelete, %Output%
FileAppend, Статистика собрана:`n, dates.txt
Loop, %Pattern%
{
    FileGetTime, LogCreationTime, %A_LoopFileName%
    DayDD:=SUBSTR(LogCreationTime,7,2)
    DayMM:=SUBSTR(LogCreationTime,5,2)
    DayYYYY:=SUBSTR(LogCreationTime,1,4)
    TimeHH:=SUBSTR(LogCreationTime,9,2)
    TimeMM:=SUBSTR(LogCreationTime,11,2)
    TimeSS:=SUBSTR(LogCreationTime,13,2)
    FileAppend, %DayDD%.%DayMM%.%DayYYYY% в %TimeHH%:%TimeMM%:%TimeSS%`n, dates.txt
}
Loop, %Pattern%
{
    Analyze(A_LoopFileName, Exclude)
}
FileRead, Stations, Test.log
Sort Stations
FileAppend, %Stations%, TestSort.log

LineNum=0
Names=
LastStr=1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 IP Станция Логин Фамилия Имя
Empty=: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :
Loop, Read, TestSort.log
{
    LineNum:=LineNum+1
    Loop, parse, A_LoopReadLine, %A_Tab%
        AWS_%LineNum%_%A_Index%=%A_LoopField%
    CurrIP:=AWS_%LineNum%_1
    CurrDate:=AWS_%LineNum%_2
    CurrName:=AWS_%LineNum%_3
    CurrStr=%Empty%  %CurrIP% %A_Tab% %CurrName%
    TmpStr=%CurrStr%
    Pos1:=(CurrDate-1)*2
    Pos2:=CurrDate*2
    CurrStr1:=SUBSTR(TmpStr,1,Pos1)
    CurrStr2:=SUBSTR(TmpStr,Pos2)
    CurrStr=%CurrStr1%v%CurrStr2%
    If Substr(LastStr,62)<>Substr(CurrStr,62)
    {
        CurrUser:=FindUser(CurrName, InfoDir)
        RusName=
        If CurrUser<>""
            RusName:=RusUser(CurrUser, InfoDir)
        FileAppend, %LastStr% %A_Tab% %Names%`n, %Output%
        LastStr=%CurrStr%
        Names=%CurrUser% %A_Tab% %RusName%
    }
    Else
    {
        TmpStr=%LastStr%
        Pos1:=(CurrDate-1)*2
        Pos2:=CurrDate*2
        CurrStr1:=SUBSTR(TmpStr,1,Pos1)
        CurrStr2:=SUBSTR(TmpStr,Pos2)
        LastStr=%CurrStr1%v%CurrStr2%
    }
}
FileAppend, %LastStr% %A_Tab% %Names%`n, %Output%

Return

;********************************************************************************
;*********************************** ФУНКЦИИ ************************************
;********************************************************************************
Analyze(FileName, Exclude)
{
; Анализ отдельного лога за день
;********************************************************************************

    FileReadLine ActiveLine, %FileName%, 2
    StringSplit, word_array, ActiveLine, -,
    CheckDay:=Substr(word_array3, 1, 2)
    StringSplit, word_array, ActiveLine, %A_SPACE%,
    FileAppend, %word_array8% %word_array9%`n, dates.txt

    CountExc=1
    model=appears

    Loop, read, %FileName%
        If InStr(A_LoopReadLine,model)>0
          {
            StringSplit, word_array, A_LoopReadLine, %A_SPACE%,
            If word_array3=%model%
              {
                AwsIP=%word_array2%
                AwsName=*
              }
            Else
              {
                AwsIP=%word_array3%
                StringReplace, AwsIP, AwsIP,(,, All
                StringReplace, AwsIP, AwsIP,),, All
                AwsName=%word_array2%
                StringReplace, AwsName, AwsName, All

              }
            ExclAws=No
            Loop, read, %Exclude%
              {
                StringSplit, word_array, A_LoopReadLine, %A_Tab%,
                If word_array1=%AwsIP%
                    {
                        ExclAws=Yes
                        Break
                    }
              }
            If AwsName <> *
                If ExclAws=No
                    FileAppend, %AwsIP%%A_TAB%%CheckDay%%A_TAB%%AwsName%`n, test.log
            AwsIP=
            ExclAws=No
          }

    return
}

FindUser(CurrName, InfoDir)
{
; Определение логина пользователя
;********************************************************************************
    User=
    Loop, read, %InfoDir%Goblin.txt
    {
        StringSplit, word_array, A_LoopReadLine, %A_Tab%,
        TmpAws=%word_array1%
        TmpName=%word_array2%
        StringUpper TmpAws, TmpAws
        StringUpper CurrName, CurrName
        If TmpAws=%CurrName%
        {
            StringReplace, TmpName, TmpName, (Unknown)  (Вышел из системы),, All
            StringReplace, TmpName, TmpName, (Logged Out),, All
            StringReplace, TmpName, TmpName,  (Вышел из системы),, All
            StringReplace, TmpName, TmpName,MSK\,, All
            User=%TmpName%
            Break
        }
    }

    Loop, read, %InfoDir%Susavir.txt
    {
        StringSplit, word_array, A_LoopReadLine, %A_Tab%,
        TmpAws=%word_array1%
        TmpName=%word_array2%
        StringUpper TmpAws, TmpAws
        StringUpper CurrName, CurrName
        If TmpAws=%CurrName%
        {
            StringReplace, TmpName, TmpName, (Unknown)  (Вышел из системы),, All
            StringReplace, TmpName, TmpName, (Logged Out),, All
            StringReplace, TmpName, TmpName,  (Вышел из системы),, All
            StringReplace, TmpName, TmpName,MSK\,, All
            User=%TmpName%
            Break
        }
    }

    return User
}

RusUser(CurrName, InfoDir)
{
; Определение Русского имени пользователя
;********************************************************************************
    User=
    Loop, read, %InfoDir%Users.txt
    {
        Loop, parse, A_LoopReadLine, %A_Tab%
        {
            If A_Index=1
                RUser=%A_LoopField%
            If A_Index=2
                EUser=%A_LoopField%
        }
        StringUpper EUser, EUser
        StringUpper CurrName, CurrName
        If EUser=%CurrName%
        {
            User=%RUser%
            Break
        }
    }

    return User
}

файл настроек settings.ini

[Rep]
InfoDir=C:\Test\Scripts\Info\
ActRep=Active.txt
Pattern=CheckState-2011-06-??.txt
Exclude=exceptions.ini
BatFile=nmap.bat
Delay=-30000000