Subj : Caller Dropped Carrier script To : All From : Mvan Le Date : Mon Dec 28 2009 07:20 pm Here's a short script I wrote to read in a Maximus log file and separate those annoying "Caller dropped carrier" sessions caused by internet port scans. Filename: proc_cdc.vbs Shell: Cscript, VBScript Platform: Any operating system with Windows Scripting Host (WSH) installed eg. Windows XP/2k/2k+[3,8]/Vista/7. You can get WSH for Windows9x & NT. Purpose: All BBS call log entries with only "Caller dropped carrier" in them are filtered to separate files eg. %filename%.cdc & %filename%.log. Assumes: The log files to be processed do NOT have *.log or *.cdc extension. The system for which this script was written writes Maximus log files to "node%1.tmp" where %1 is the node number. Input: Any Maximus log file Output: Deletes input file and creates *.cdc (for Caller Dropped Carrier) and *.log (Other). proc_cdc.vbs: =============================================================================== Option Explicit Const ForReading = 1, ForWriting = 2, ForAppending = 8, CreateIfNotExist = 1 Const DEBUGGING = False Dim objFileLogfileCdc Dim objFileLogfileNode Dim objFileLogfileNodeTmp Dim strLogfileNode Dim strLogfileNodeTmp Dim strLine, strLineBuf, strLineBufType Dim intPos Dim intLineCount Dim i ' Get node%1.tmp filename strLogfileNodeTmp = WScript.Arguments(0) ' Get node%1.tmp base filename intPos = InStr(1, strLogfileNodeTmp, ".", vbTextCompare) strLogfileNode = Left(strLogfileNodeTmp, intPos - 1) ' Open files for reading and/or appending Set objFileLogfileNodeTmp = OpenTextFile(strLogfileNodeTmp, ForReading) Set objFileLogfileNode = OpenTextFile(strLogfileNode & ".log", ForAppending) Set objFileLogfileCdc = OpenTextFile(strLogfileNode & ".cdc", ForAppending) ' ' Process node%1.tmp ' Wscript.Echo WScript.ScriptFullName & " running ..." intLineCount = 0 strLineBufType = ".log" ' Initialise default line buffer type Do While objFileLogfileNodeTmp.AtEndOfStream <> True strLine = objFileLogfileNodeTmp.ReadLine strLineBuf = strLineBuf & strLine & vbNewLine If RegExpTest("MAX Begin, v3.01", strLine) Then ' Reset line count and string buffer at beginning-of-call strLineBuf = strLine & vbNewLine intLineCount = 1 ' An empty line signals end-of-call so flush string buffer to the correct log file ElseIf RegExpTest("^$", strLine) And intLineCount > 1 Then Select Case strLineBufType Case ".log" If DEBUGGING Then Wscript.Echo "Writing to " & strLogfileNode & ".log:" Wscript.Echo strLineBuf End If objFileLogfileNode.WriteLine strLineBuf strLineBuf = Null intLineCount = 0 Case ".cdc" If DEBUGGING Then Wscript.Echo "Writing to " & strLogfileNode & ".cdc:" Wscript.Echo strLineBuf End If objFileLogfileCdc.WriteLine strLineBuf strLineBufType = ".log" ' Reset back to ".log" just to be sure strLineBuf = Null intLineCount = 0 End Select End If ' Check every third line for CDC If intLineCount = 3 Then If RegExpTest("MAX Caller dropped carrier", strLine) Then strLineBufType = ".cdc" Else strLineBufType = ".log" End If End If intLineCount = intLineCount + 1 If DEBUGGING Then If i > 100 Then ' Look at this number of lines only Exit Do End If I = i+1 End If Loop objFileLogfileCdc.Close objFileLogfileNode.Close objFileLogfileNodeTmp.Close If Not DEBUGGING Then DeleteFile(strLogfileNodeTmp) End If Function OpenTextFile(strPathFilename, intMode) Dim fso, fd Set fso = CreateObject("Scripting.FileSystemObject") Set fd = fso.OpenTextFile(strPathFilename, intMode, CreateIfNotExist) Set OpenTextFile = fd End Function Function RegExpTest(patrn, strng) Dim regEx, retVal ' Create variable. Set regEx = New RegExp ' Create regular expression. regEx.Pattern = patrn ' Set pattern. regEx.IgnoreCase = True ' Set case sensitivity. retVal = regEx.Test(strng) ' Execute the search test. RegExpTest = retVal End Function Sub DeleteFile(strPathFilename) Dim fso, f Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFile(strPathFilename) f.Delete End Sub =============================================================================== Example RUNBBS.BAT: =============================================================================== set LOGFILE_NODE=node%1.tmp max -n%1 -l%LOGFILE_NODE% -e0 -b%2 -s%3 %4 %5 %6 %7 %8 %9 if errorlevel 255 goto UndefError if errorlevel 16 goto Error if errorlevel 12 goto EchoMail if errorlevel 11 goto NetMail if errorlevel 10 goto localmail if errorlevel 5 goto Aftercall if errorlevel 4 goto Error if errorlevel 3 goto Error if errorlevel 2 goto Done if errorlevel 1 goto altx :Done rem ; Clean up log file by removing "Caller dropped carrier" cscript %max%\scripts\proc_cdc.vbs %LOGFILE_NODE% =============================================================================== --- Maximus 3.01 * Origin: Xaragmata / Adelaide SA telnet://xaragmata.mooo.com (3:800/432) .