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