PublicClass frmSnifferClass frmSniffer 变量定义#Region "变量定义" DimWithEvents Sniffer As Receiver #End Region 构造函数#Region "构造函数" PublicSub New()SubNew() ' 此调用是 Windows 窗体设计器所必需的。 InitializeComponent() ' 在 InitializeComponent() 调用之后添加任何初始化。 End Sub #End Region 主菜单事件#Region "主菜单事件" PrivateSub 退出CToolStripMenuItem_Click()Sub 退出CToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 退出CToolStripMenuItem.Click Me.Close() End Sub PrivateSub 开始捕获数据SToolStripMenuItem_Click()Sub 开始捕获数据SToolStripMenuItem_Click(ByVal sender AsObject, ByVal e As System.EventArgs) Handles 开始捕获数据SToolStripMenuItem.Click Try If Sniffer IsNothingThen Sniffer =New Receiver Sniffer.StartReceive() Sniffer.ContinueReceive =True EndIf 开始捕获数据SToolStripMenuItem.Enabled =False 停止捕获数据BToolStripMenuItem.Enabled =True Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Critical, "Error") EndTry End Sub PrivateSub 停止捕获数据BToolStripMenuItem_Click()Sub 停止捕获数据BToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 停止捕获数据BToolStripMenuItem.Click If Sniffer IsNotNothingThen Sniffer.ContinueReceive =False Sniffer =Nothing EndIf 开始捕获数据SToolStripMenuItem.Enabled =True 停止捕获数据BToolStripMenuItem.Enabled =True End Sub PrivateSub 状态栏ToolStripMenuItem_Click()Sub 状态栏ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 状态栏ToolStripMenuItem.Click 状态栏ToolStripMenuItem.Checked =Not 状态栏ToolStripMenuItem.Checked StatusStrip.Visible = 状态栏ToolStripMenuItem.Checked End Sub PrivateSub 数据ToolStripMenuItem_Click()Sub 数据ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 数据ToolStripMenuItem.Click 数据ToolStripMenuItem.Checked =Not 数据ToolStripMenuItem.Checked TreeViewPackData.Visible = 数据ToolStripMenuItem.Checked End Sub PrivateSub 数据包详细信息ToolStripMenuItem_Click()Sub 数据包详细信息ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 数据包详细信息ToolStripMenuItem.Click 数据包详细信息ToolStripMenuItem.Checked =Not 数据包详细信息ToolStripMenuItem.Checked TreeViewPackInfo.Visible = 数据包详细信息ToolStripMenuItem.Checked End Sub PrivateSub 关于AToolStripMenuItem_Click()Sub 关于AToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 关于AToolStripMenuItem.Click Dim frm AsNew frmAbout frm.ShowDialog() End Sub PrivateSub 新文件NToolStripMenuItem_Click()Sub 新文件NToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 新文件NToolStripMenuItem.Click TreeViewIpInfo.Nodes(0).Nodes.Clear() TreeViewPackData.Nodes.Clear() TreeViewPackInfo.Nodes.Clear() End Sub PrivateSub 打开文件OToolStripMenuItem_Click()Sub 打开文件OToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 打开文件OToolStripMenuItem.Click Dim cd AsNew System.Windows.Forms.OpenFileDialog With cd .FileName ="" .Title ="打开Sniffer文件" .Filter ="Sniffer文件(*.wzm)|*.wzm" .ShowDialog() EndWith If cd.FileName <>""ThenCall LoadNodes(TreeViewIpInfo, cd.FileName) End Sub PrivateSub 保存SToolStripMenuItem_Click()Sub 保存SToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 保存SToolStripMenuItem.Click Call TreeViewFunction.CreateList(TreeViewIpInfo.Nodes(0), fPath) End Sub PrivateSub 另存为ToolStripMenuItem_Click()Sub 另存为ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 另存为ToolStripMenuItem.Click Dim cd AsNew System.Windows.Forms.SaveFileDialog With cd .FileName ="" .Title ="保存Sniffer数据" .Filter ="Sniffer文件(*.wzm)|*.wzm" .ShowDialog() EndWith If cd.FileName <>""ThenCall TreeViewFunction.CreateList(TreeViewIpInfo.Nodes(0), cd.FileName) End Sub PrivateSub 网管MToolStripMenuItem_Click()Sub 网管MToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 网管MToolStripMenuItem.Click Dim frm AsNew frmNetManager frm.Show() End Sub #End Region 窗体事件#Region "窗体事件" PrivateSub frmSniffer_Load()Sub frmSniffer_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesMyBase.Load TreeViewIpInfo.Nodes.Add("No Tcp/Ip Packets") End Sub PrivateSub FrmSniffer_Closing()Sub FrmSniffer_Closing(ByVal sender AsObject, ByVal e As System.ComponentModel.CancelEventArgs) HandlesMe.Closing IfMsgBox("确定要退出Sniffer吗?", MsgBoxStyle.Question Or MsgBoxStyle.OkCancel, "Info") = MsgBoxResult.Cancel Then e.Cancel =True Else If Sniffer IsNotNothingThen Sniffer.ContinueReceive =False Sniffer.StopReceive() Sniffer =Nothing EndIf EndIf End Sub #End Region 捕获信息触发的事件#Region "捕获信息触发的事件" PrivateDelegateSub RunMySub()Sub RunMySub(ByVal Packet() AsByte) PrivateSub RefreshTreeViewIpInfo()Sub RefreshTreeViewIpInfo(ByVal PacketDataReceived() AsByte) Dim tt AsNew PacketInfo(PacketDataReceived) Dim SourceIpEndPoint As System.Net.IPEndPoint = tt.Source, DestIpEndPoint As System.Net.IPEndPoint = tt.Destionation Dim FindIp AsBoolean=False Try ForEach FindIpNode As System.Windows.Forms.TreeNode In TreeViewIpInfo.Nodes(0).Nodes If FindIpNode.Text = SourceIpEndPoint.Address.ToString Or FindIpNode.Text = DestIpEndPoint.Address.ToString Then FindIpNode = FindIpNode.Nodes.Add(SourceIpEndPoint.ToString.PadRight(25, "") +"-->"+ DestIpEndPoint.ToString.PadLeft(25, "") + tt.ProtocalName.PadLeft(10, "") + Now.ToString.PadLeft(20, "")) FindIpNode.Tag = PacketDataReceived FindIp =True ExitFor EndIf Next IfNot FindIp Then Dim FindIpNode As System.Windows.Forms.TreeNode = TreeViewIpInfo.Nodes(0).Nodes.Add(SourceIpEndPoint.Address.ToString) FindIpNode = FindIpNode.Nodes.Add(SourceIpEndPoint.ToString.PadRight(25, "") +"-->"+ DestIpEndPoint.ToString.PadLeft(25, "") + tt.ProtocalName.PadLeft(10, "") + Now.ToString.PadLeft(20, "")) FindIpNode.Tag = PacketDataReceived EndIf Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Critical, "Add new or modify an exists node") EndTry '释放资源 tt =Nothing : SourceIpEndPoint =Nothing : DestIpEndPoint =Nothing End Sub PrivateSub Sniffer_DataReceived()Sub Sniffer_DataReceived(ByVal data() AsByte, ByVal Length AsInteger) Handles Sniffer.DataReceived Me.Invoke(New RunMySub(AddressOf RefreshTreeViewIpInfo), data) End Sub #End Region TreeViewIpInfo事件#Region "TreeViewIpInfo事件" PrivateSub TreeViewIpInfo_AfterSelect()Sub TreeViewIpInfo_AfterSelect(ByVal sender AsObject, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TreeViewIpInfo.AfterSelect Dim Data() AsByte=CType(e.Node.Tag, Byte()) TreeViewPackData.Nodes.Clear() TreeViewPackInfo.Nodes.Clear() If Data IsNotNothingThen Call RefreshTreeViewPackData(Data) Call RefreshTreeViewPackInfo(Data) EndIf End Sub #End Region 显示某个数据包#Region "显示某个数据包" Data#Region "Data" PrivateSub RefreshTreeViewPackData()Sub RefreshTreeViewPackData(ByVal Data() AsByte) Dim strData AsString="", strChr AsString="" Dim NewPackData As PackData Dim ArrayData AsNew ArrayList For i AsInteger=0To Data.GetLength(0) -1 strData +=Hex(Da