Capture.vbs

This example demonstrates how to use PacketX to capture packets from VBScript.
See also:
PacketX , Packet , Adapter
'
'// File:         Capture.vbs
'//
'// Description:  This script demonstrates how to capture packets
'//
'// Notes:        Run the script from command line using the cscript.exe program
'//
'// Created:      May 10, 2004
'//
'// Copyright (c) 2000-2004 BeeSync Technologies.
'

'// Constants
const PktXPacketTypePromiscuous   = &H0020
const PktXLinkType802_3           = 1
const PktXLinkType802_5           = 2
const PktXLinkTypeFddi            = 3
const PktXLinkTypeWan             = 4
const PktXLinkTypeLocalTalk       = 5
const PktXLinkTypeDix             = 6
const PktXLinkTypeArcnetRaw       = 7
const PktXLinkTypeArcnet878_2     = 8
const PktXLinkTypeAtm             = 9
const PktXLinkTypeWirelessWan     = 10
const PktXModeCapture             = 1

'// Create PackeX object
Set oPktX = WScript.CreateObject("PktX.PacketX","PacketX_")

'// Display network adapters
For i = 1 To oPktX.Adapters.Count
  If oPktX.Adapters(i).IsGood Then
    WScript.Echo "(" & i & ") " & RTrim(LTrim(oPktX.Adapters(i).Description))
    'PrintAdapter(oPktX.Adapters(i))
  End If
Next

'// Select network adapter
oPktX.Adapter = Nothing
While oPktX.Adapter Is Nothing
  WScript.StdOut.Write "Choose adapter#"
  On Error Resume Next
    oPktX.Adapter = oPktX.Adapters(RTrim(LTrim(WScript.StdIn.ReadLine)))
  On Error Goto 0
Wend

'// Capture buffer parameters
oPktX.Adapter.BuffSize=256*1024 '// 256 KB
oPktX.Adapter.BuffMinToCopy=0

'// Hardware filter and capture mode
oPktX.Adapter.HWFilter=PktXPacketTypePromiscuous
oPktX.Adapter.Mode=PktXModeCapture

'// Start capture
oPktX.Start
WScript.Sleep(60000)
oPktX.Stop

PrintStats(oPktX.Adapter)  

'// Packet event handler
Public Sub PacketX_OnPacket(ByRef oPacket)
  PrintHead(oPacket)
  PrintData(oPacket)
End Sub

Public Sub PrintAdapter(ByRef oAdapter)  
  WScript.Echo "Device name is " & oAdapter.Device
  WScript.Stdout.Write "Link type is "
  Select Case oAdapter.LinkType
    Case PktXLinkType802_3       WScript.Echo "Ethernet (802.3)"
    Case PktXLinkType802_5       WScript.Echo "Token Ring (802.5)"
    Case PktXLinkTypeFddi        WScript.Echo "FDDI"
    Case PktXLinkTypeWan         WScript.Echo "WAN"
    Case PktXLinkTypeLocalTalk   WScript.Echo "LocalTalk"
    Case PktXLinkTypeDix         WScript.Echo "DIX"
    Case PktXLinkTypeArcnetRaw   WScript.Echo "ARCNET (raw)"
    Case PktXLinkTypeArcnet878_2 WScript.Echo "ARCNET (878.2)"
    Case PktXLinkTypeAtm         WScript.Echo "ATM"
    Case PktXLinkTypeWirelessWan WScript.Echo "NdisWirelessXxx media"
    Case Else                    WScript.Echo "Unknown!"
  End Select  
  WScript.Echo "Link speed is " & oAdapter.LinkSpeed & " bps"
  WScript.Echo "Network IP addres is " & oAdapter.NetIP
  WScript.Echo "Network mask is " & oAdapter.NetMask
  WScript.Echo "HW address is " & oAdapter.HWAddress
End Sub

Public Sub PrintHead(ByRef oPacket)  
  WScript.Echo "----------------------- Packet Header ---------------------"  
  WScript.Echo "Original size " & oPacket.OriginalSize & " bytes"
  WScript.Echo "Capture size " & oPacket.DataSize & " bytes"
  WScript.Echo "Capture time " & oPacket.TimeSec & " (number of seconds from 1/1/1970)"
  WScript.Echo "Capture microseconds " & oPacket.TimeUSec
  WScript.Echo "Capture date " & oPacket.Date & " (system date and time)" 
End Sub

Public Sub PrintData(ByRef oPacket)
  WScript.Echo "----------------------- Packet Data -----------------------"
  For Each bByte In oPacket.Data
    If Len(sLine) >= 48 Then 
      WScript.Echo sLine 
      sLine=""
    End If
    If bByte <= &H0F Then sLine=sLine & "0" End If
    sLine=sLine & Hex(bByte) & " "
  Next
  If Len(sLine) > 0 Then WScript.Echo sLine Else WScript.Echo "" End If
End Sub

Public Sub PrintStats(ByRef oAdapter)  
  WScript.Echo "------------------- Capture Statistics --------------------"
  WScript.Echo "Packets received " & oAdapter.PacketsRecv
  WScript.Echo "Packets lost " & oAdapter.PacketsLost
End Sub

Copyright © 2000-2007 beeSync. All rights reserved.