Imports System.Net
Imports System.IO
Imports cookieMonster.PacketMonitor
Public Class frmMain
'Declare variables & memory pointers
Private m_PacketMonitors() As Monitor
Private m_Packets As ArrayList
Private m_PacketsSize As Integer = 0
Private LastAckNum As Integer = 0
Private TempPackets As New ArrayList
Private TP As New ArrayList
Public Delegate Sub SearchListHandler(ByVal packets As ArrayList)
Public Delegate Sub AddList(ByRef list As ListView, ByVal listviewitem As ListViewItem)
Public Event PacketsCollected As SearchListHandler
Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim hosts() As IPAddress = Dns.GetHostEntry(Dns.GetHostName()).AddressList
Dim i As Integer
If hosts.Length = 0 Then Throw New NotSupportedException("This computer does not have non-loopback interfaces installed!")
For i = 0 To hosts.Length - 1
HostsMenu.Items.Add(hosts(i).ToString(), Nothing, New EventHandler(AddressOf Me.OnHostsClick))
Next
ReDim m_PacketMonitors(HostsMenu.Items.Count - 1)
For i = 0 To m_PacketMonitors.Length - 1
m_PacketMonitors(i) = New Monitor(hosts(i))
AddHandler m_PacketMonitors(i).NewPacket, AddressOf Me.OnNewPacket
AddHandler PacketsCollected, AddressOf Me.CollectedData
Next
m_Packets = New ArrayList
End Sub
Private Sub AddToList(ByRef list As ListView, ByVal listviewitem As ListViewItem)
list.Items.Add(listviewitem)
statusbar.Text = String.Format("Intercepted {0} segments(s) [{1} bytes]", m_Packets.Count, m_PacketsSize)
End Sub
Private Sub OnNewPacket(ByVal m As Monitor, ByVal p As Packet)
If p.Raw.Length <= 50 Then Throw New ArgumentException
'Retreive Hostname
Dim hostname As String
hostname = "N/A"
Dim referer As String
referer = "N/A"
Dim lstitem As New ListViewItem
With lstitem
.Text = p.Time.ToString
.SubItems.Add(referer)
End With
Dim ax As New AddList(AddressOf AddToList)
ax(lvList, lstitem)
m_Packets.Add(p)
m_PacketsSize += p.TotalLength
TP.Add(p)
If TP.Count >= 20 Then
RaiseEvent PacketsCollected(TP)
TP.Clear()
End If
End Sub
Private Sub CollectedData(ByVal ps As ArrayList)
Dim tmpPack As Packet
Dim pack As Packet
Dim found As Boolean = False
Dim acknum As Long
For Each pack In ps
Dim content As String = pack.BytesToString(pack.m_Raw)
If InStr(content, "omt.honda.com") <> 0 Then
found = True
acknum = pack.Acknowledge
End If
Next
If found = True Then
Dim good As Boolean = False
For Each pack In ps
If pack.Acknowledge = acknum Then
If Not good Then
tmpPack = pack
good = True
Else : tmpPack.m_Raw = Common.CombineByteArray(pack.Raw, tmpPack.Raw, pack.HeaderLength + 20)
End If
End If
Next
'Retreive Hostname
Dim hostname As String
hostname = tmpPack.BytesToString(tmpPack.Raw)
If InStr(hostname, "Host: ") <> 0 Then
hostname = hostname.Substring(InStr(hostname, "Host: ") + 4)
hostname = hostname.Substring(0, InStr(hostname, vbCrLf) - 1)
Else
hostname = "N/A"
End If
Dim referer As String
referer = tmpPack.BytesToString(tmpPack.Raw)
If InStr(referer, "Referer: ") <> 0 Then
referer = referer.Substring(InStr(referer, "Referer: ") + 8)
referer = referer.Substring(0, InStr(referer, vbCrLf) - 1)
Else
referer = "N/A"
End If
Dim lstitem As New ListViewItem
With lstitem
.Text = tmpPack.Time.ToString
.SubItems.Add(hostname)
.SubItems.Add(referer)
.SubItems.Add(tmpPack.Flags.ToString)
End With
m_Packets.Add(tmpPack)
m_PacketsSize += tmpPack.TotalLength
lvList.Items.Add(lstitem)
StatusBar.Text = String.Format("Intercepted {0} segments(s) [{1} bytes]", m_Packets.Count, m_PacketsSize)
End If
End Sub
Public Sub OnHostsClick(ByVal sender As Object, ByVal e As EventArgs)
Dim index As Integer = CType(sender, MenuItem).Index
If HostsMenu.Items(index).Selected Then
m_PacketMonitors(index).Start()
statusbar.Text = "Monitoring " & m_PacketMonitors(index).IP.ToString()
Else
m_PacketMonitors(index).Stop()
statusbar.Text = "Stopped monitoring " & m_PacketMonitors(index).IP.ToString()
End If
End Sub
Private Sub tbStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tbStop.Click
Dim i As Integer
For i = 0 To m_PacketMonitors.Length - 1
m_PacketMonitors(i).Stop()
Next
statusbar.Text = "Stopped monitoring"
End Sub
Private Sub tbStart_ButtonClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tbStart.ButtonClick
Dim i As Integer
For i = 0 To m_PacketMonitors.Length - 1
Try
m_PacketMonitors(i).Start()
Catch ex As Exception
MsgBox("There was a problem starting the packet monitor for interface " & m_PacketMonitors(i).IP.ToString & vbCrLf & vbCrLf & "[" + ex.Message + "]", MsgBoxStyle.Exclamation)
End Try
Next
statusbar.Text = "Monitoring all interfaces"
End Sub
Private Sub tbClear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tbClear.Click
lvList.Items.Clear()
m_Packets.Clear()
statusbar.Text = "Cleared packet list"
End Sub
Private Sub tbHelp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tbHelp.Click
MsgBox("Sniffer.NET powered by RPA", MsgBoxStyle.Information)
End Sub
Private Sub lvList_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lvList.SelectedIndexChanged
End Sub
End Class