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)