示例#1
0
        /// <summary>
        /// Parse an IP packet
        /// Dispatch TCP and UDP packets
        /// </summary>
        /// <param name="ip">The IP packet to be parsed</param>
        /// <param name="ctrl"></param>
        public static void ParseIPPacket(IpV4Datagram ip, object[] ctrl)
        {
            if (ip == null || ctrl == null ||
                ctrl[0] == null || ctrl[1] == null)
            {
                return;
            }

            List <ListViewItem> items = new List <ListViewItem>();
            ListViewItem        item  = new ListViewItem("IPV4");
            string estr = "Destination = " + ip.Destination;

            estr += ", Source = " + ip.Source;
            estr += ", Next Protocol = " + ip.Protocol;
            estr += ", Packet ID = " + ip.Identification;
            estr += ", Total IP length = " + ip.Length;
            item.SubItems.Add(estr);
            items.Add(item);

            ListView f_details = (ListView)ctrl[0];

            object[] param = new object[2];
            param[0] = f_details;
            param[1] = items;
            f_details.BeginInvoke(new ParserHelper.UIHandler(ParserHelper.UpdateDetailsUI), param);

            switch (ip.Protocol)
            {
            case IpV4Protocol.Tcp:
            {
                TcpDatagram tcp = ip.Tcp;
                SnifferMain.datagram = tcp;
                SnifferMain.payload  = tcp.Payload;
                ParseTcpPacket(tcp, ctrl[0]);
                PacketParser.DumpPacket(tcp, ctrl[1]);
                break;
            }

            case IpV4Protocol.Udp:
            {
                UdpDatagram udp = ip.Udp;
                SnifferMain.datagram = udp;
                SnifferMain.payload  = udp.Payload;
                ParseUdpPacket(udp, ctrl[0]);
                PacketParser.DumpPacket(udp, ctrl[1]);
                break;
            }

            default: break;
            }
        }
示例#2
0
        private void f_details_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
        {
            if (e.IsSelected)
            {
                ListViewItem item = e.Item;

                EthernetDatagram ethernet = packet.Ethernet;
                switch (item.Text)
                {
                case "Ethernet":
                {
                    // Update Ethernet details
                    if (ethernet != null)
                    {
                        PacketParser.DumpPacket(ethernet, h_details);
                    }
                    break;
                }

                case "IPV4":
                {
                    // Update IPV4 details
                    if (ethernet != null)
                    {
                        IpV4Datagram ip = packet.Ethernet.IpV4;
                        PacketParser.DumpPacket(ip, h_details);
                    }
                    break;
                }

                case "Payload Length":
                {
                    PacketParser.DumpPacket(payload, h_details);
                    break;
                }

                default:
                {
                    // Otherwise, use the last datagram
                    PacketParser.DumpPacket(datagram, h_details);
                    break;
                }
                }
            }
        }
示例#3
0
        /// <summary>
        /// Format an ARP packet
        /// </summary>
        /// <param name="arp">The ARP packet to be parsed</param>
        /// <param name="ctrl">Contorls to update information with
        /// ctrl[0] is a ListView
        /// ctrl[1] is a TextBox
        /// </param>
        public static void ParseARPPacket(ArpDatagram arp, object[] ctrl)
        {
            if (arp == null || ctrl == null ||
                ctrl[0] == null || ctrl[1] == null)
            {
                return;
            }

            SnifferMain.datagram = arp;

            List <ListViewItem> items = new List <ListViewItem>();

            ListViewItem item = new ListViewItem("Packet Type");

            item.SubItems.Add("ARP");
            items.Add(item);

            item = new ListViewItem("HardwareLength");
            item.SubItems.Add(arp.HardwareLength.ToString());
            items.Add(item);

            item = new ListViewItem("HardwareType");
            item.SubItems.Add(arp.HardwareType.ToString());
            items.Add(item);

            item = new ListViewItem("HeaderLength");
            item.SubItems.Add(arp.HeaderLength.ToString());
            items.Add(item);

            item = new ListViewItem("Operation");
            item.SubItems.Add(arp.Operation.ToString());
            items.Add(item);

            item = new ListViewItem("ProtocolLength");
            item.SubItems.Add(arp.ProtocolLength.ToString());
            items.Add(item);

            item = new ListViewItem("ProtocolType");
            item.SubItems.Add(arp.ProtocolType.ToString());
            items.Add(item);

            item = new ListViewItem("SenderHardwareAddress");
            ReadOnlyCollection <byte> addr = arp.SenderHardwareAddress;
            string address = String.Join("-", ParserHelper.ByteToHexString(addr.ToArray()));

            item.SubItems.Add(address);
            items.Add(item);

            item    = new ListViewItem("SenderProtocolAddress");
            address = new IPAddress(arp.SenderProtocolAddress.ToArray()).ToString();
            item.SubItems.Add(address);
            items.Add(item);

            item    = new ListViewItem("TargetHardwareAddress");
            addr    = arp.TargetHardwareAddress;
            address = string.Join("-", ParserHelper.ByteToHexString(addr.ToArray()));
            item.SubItems.Add(address);
            items.Add(item);

            item    = new ListViewItem("TargetProtocolAddress");
            address = new IPAddress(arp.TargetProtocolAddress.ToArray()).ToString();
            item.SubItems.Add(address);
            items.Add(item);

            ListView f_details = (ListView)ctrl[0];

            object[] param = new object[2];
            param[0] = f_details;
            param[1] = items;
            f_details.BeginInvoke(new ParserHelper.UIHandler(ParserHelper.UpdateDetailsUI), param);

            PacketParser.DumpPacket(arp, ctrl[1]);
        }
示例#4
0
 /// <summary>
 /// Update packet frames
 /// </summary>
 /// <param name="packet">Packet to parse</param>
 private void UpdateFrames(Packet packet)
 {
     PacketParser.HandlePacket(packet, ref frame_id, ctrl);
 }