public static bool Parser(ref TreeNodeCollection mNode, byte [] PacketData, ref int Index, ref ListViewItem LItem) { TreeNode mNodex; string Tmp = ""; int k = 0, kk = 0; PACKET_AARP PAarp; mNodex = new TreeNode(); mNodex.Text = "AARP ( Apple Talk Address Resolution Protocol )"; kk = Index; try { PAarp.HardwareType = Function.Get2Bytes(PacketData, ref Index, Const.NORMAL); Tmp = "Hardware Type : " + Function.ReFormatString(PAarp.HardwareType, Const.GetAarpHardwareString(PAarp.HardwareType)); mNodex.Nodes.Add(Tmp); Function.SetPosition(ref mNodex, Index - 2, 2, false); PAarp.ProtocolType = Function.Get2Bytes(PacketData, ref Index, Const.NORMAL); Tmp = "Protocol Type : " + Function.ReFormatString(PAarp.ProtocolType, Const.GetAarpHardwareString(PAarp.HardwareType)); mNodex.Nodes.Add(Tmp); Function.SetPosition(ref mNodex, Index - 2, 2, false); PAarp.HardwareLength = PacketData[Index++]; Tmp = "Hardware Length : " + Function.ReFormatString(PAarp.HardwareLength, null); mNodex.Nodes.Add(Tmp); Function.SetPosition(ref mNodex, Index - 1, 1, false); PAarp.ProtocolLength = PacketData[Index++]; Tmp = "Protocol Length : " + Function.ReFormatString(PAarp.ProtocolLength, null); mNodex.Nodes.Add(Tmp); Function.SetPosition(ref mNodex, Index - 1, 1, false); PAarp.OpCode = Function.Get2Bytes(PacketData, ref Index, Const.NORMAL); Tmp = "Operation Code : " + Function.ReFormatString(PAarp.OpCode, Const.GetAarpOptionString(PAarp.OpCode)); mNodex.Nodes.Add(Tmp); Function.SetPosition(ref mNodex, Index - 2, 2, false); PAarp.SourceHardwareAddress = Const.GetAarpHardwareAddress(PacketData, ref Index, PAarp.HardwareLength, PAarp.HardwareType); Tmp = "Source MAC Address : " + Function.ReFormatString(PAarp.SourceHardwareAddress, null); mNodex.Nodes.Add(Tmp); Function.SetPosition(ref mNodex, Index - PAarp.HardwareLength, PAarp.HardwareLength, false); PAarp.SourceIpAddress = Const.GetAarpIpAddress(PacketData, ref Index, PAarp.ProtocolLength, PAarp.ProtocolType); Tmp = "source Ip Address : " + Function.ReFormatString(PAarp.SourceIpAddress, null); mNodex.Nodes.Add(Tmp); Function.SetPosition(ref mNodex, Index - PAarp.ProtocolLength, PAarp.ProtocolLength, false); PAarp.DestinationHardwareAddress = Const.GetAarpHardwareAddress(PacketData, ref Index, PAarp.HardwareLength, PAarp.HardwareType); Tmp = "Destination MAC Address : " + Function.ReFormatString(PAarp.DestinationHardwareAddress, null); mNodex.Nodes.Add(Tmp); Function.SetPosition(ref mNodex, Index - PAarp.HardwareLength, PAarp.HardwareLength, false); PAarp.DestinationIpAddress = Const.GetAarpIpAddress(PacketData, ref Index, PAarp.ProtocolLength, PAarp.ProtocolType); Tmp = "Destination Ip Address : " + Function.ReFormatString(PAarp.DestinationIpAddress, null); mNodex.Nodes.Add(Tmp); Function.SetPosition(ref mNodex, Index - PAarp.ProtocolLength, PAarp.ProtocolLength, false); switch (PAarp.OpCode) { case Const.AARP_REQUEST: case Const.AARP_REQUEST_SWAPPED: LItem.SubItems[Const.LIST_VIEW_INFO_INDEX].Text = "Who has " + PAarp.DestinationIpAddress + " ? Tell " + PAarp.SourceIpAddress; break; case Const.AARP_REPLY: case Const.AARP_REPLY_SWAPPED: LItem.SubItems[Const.LIST_VIEW_INFO_INDEX].Text = PAarp.SourceIpAddress + " is at " + PAarp.SourceHardwareAddress; break; case Const.AARP_PROBE: case Const.AARP_PROBE_SWAPPED: LItem.SubItems[Const.LIST_VIEW_INFO_INDEX].Text = "Is there a " + PAarp.DestinationIpAddress + " ?"; break; default: LItem.SubItems[Const.LIST_VIEW_INFO_INDEX].Text = "Unknown AARP opcode " + PAarp.OpCode.ToString("x04"); break; } LItem.SubItems[Const.LIST_VIEW_PROTOCOL_INDEX].Text = "AARP"; LItem.SubItems[Const.LIST_VIEW_SOURCE_INDEX].Text = PAarp.SourceHardwareAddress; LItem.SubItems[Const.LIST_VIEW_DESTINATION_INDEX].Text = PAarp.DestinationHardwareAddress; k = kk; kk = Index - k; Function.SetPosition(ref mNodex, k, kk, true); mNode.Add(mNodex); } catch (Exception Ex) { mNode.Add(mNodex); Tmp = "[ Malformed AARP packet. Remaining bytes don't fit an AARP packet. Possibly due to bad decoding ]"; mNode.Add(Tmp); Tmp = "[ Exception raised is <" + Ex.GetType().ToString() + "> at packet index <" + Index.ToString() + "> ]"; mNode.Add(Tmp); LItem.SubItems[Const.LIST_VIEW_INFO_INDEX].Text = Tmp; return(false); } return(true); }