예제 #1
0
        private void ParseData(byte[] data, int nReceived)
        {
            if (PacketNum == Convert.ToInt32(this.tscbNum.Text))
            {
                PacketNum = 1;
                this.ReceivedPacketListView.Items.Clear();
            }

            IPHeader ipHeader = new IPHeader(data, nReceived);

            string[] lvStrArr = new string[]
            {
                PacketNum.ToString(), DateTime.Now.ToString(),
                     ipHeader.SourceAddress.ToString(), ipHeader.DestinationAddress.ToString(),
                     ipHeader.ProtocolType.ToString(), ipHeader.TotalLength
            };

            string[] IpStrArr   = MakeIP(ipHeader, ipHeader.ProtocolType.ToString());
            string[] MergeIPArr = new string[lvStrArr.Length + IpStrArr.Length];
            Array.Copy(lvStrArr, 0, MergeIPArr, 0, lvStrArr.Length);
            Array.Copy(IpStrArr, 0, MergeIPArr, lvStrArr.Length, IpStrArr.Length);

            string[] MergeTCP = null;
            string[] MergeUDP = null;
            string[] MergeAll = null;

            switch (ipHeader.ProtocolType)
            {
            case Protocol.TCP:
                TCPHeader tcpHeader = new TCPHeader(ipHeader.Data, ipHeader.MessageLength);
                MergeTCP = MakeTCP(tcpHeader);
                MergeAll = new string[MergeIPArr.Length + MergeTCP.Length];
                Array.Copy(MergeIPArr, 0, MergeAll, 0, MergeIPArr.Length);
                Array.Copy(MergeTCP, 0, MergeAll, MergeIPArr.Length, MergeTCP.Length);
                break;

            case Protocol.UDP:
                UDPHeader udpHeader = new UDPHeader(ipHeader.Data, (int)ipHeader.MessageLength);
                MergeUDP = MakeUDP(udpHeader);
                MergeAll = new string[MergeIPArr.Length + MergeUDP.Length];
                Array.Copy(MergeIPArr, 0, MergeAll, 0, MergeIPArr.Length);
                Array.Copy(MergeUDP, 0, MergeAll, MergeIPArr.Length, MergeUDP.Length);
                break;

            case Protocol.Unknown:
                MergeAll = MergeIPArr;
                break;
            }
            ListViewItem item = new ListViewItem(MergeAll);

            this.ReceivedPacketListView.Items.Add(item);
            PacketNum += 1;
        }
예제 #2
0
 private string[] MakeIP(IPHeader ipHeader, string ProType)
 {
     string[] IPNode = new string[]
     {
         "IP", "Ver: " + ipHeader.Version,
         "Header Length: " + ipHeader.HeaderLength,
         "Differntiated Services: " + ipHeader.DifferentiatedServices,
         "Total Length: " + ipHeader.TotalLength,
         "Identification: " + ipHeader.Identification,
         "Flags: " + ipHeader.Flags,
         "Fragmentation Offset: " + ipHeader.FragmentationOffset,
         "Time to live: " + ipHeader.TTL,
         "Protocol: " + ProType,
         "Checksum: " + ipHeader.Checksum,
         "Source: " + ipHeader.SourceAddress.ToString(),
         "Destination: " + ipHeader.DestinationAddress.ToString()
     };
     return(IPNode);
 }
예제 #3
0
        private void ParseData(byte[] byteData, int nReceived)
        {
            System.Windows.Application.Current.Dispatcher.BeginInvoke(new Action(() =>
            {
                TreeViewItem rootItem = new TreeViewItem();
                // Alle protocol packets zijn geëncapsuleerd in het IP datagram, we parsen dus de IP header om te zien welk protocol data zich hier bevindt.
                IPHeader ipHeader = new IPHeader(byteData, nReceived);
                TreeViewItem ipItem = MakeIPTreeViewItem(ipHeader);
                rootItem.Items.Add(ipItem);
                // Volgens het protocol dat meegedragen wordt door het IP datagram, parsen we het data field van het datagram.
                switch (ipHeader.ProtocolType)
                {
                    case Protocol.ICMP:
                        //IPHeader.Data bezit de data die gedragen wordt via het IP datagram, lengte van de header.
                        Debug.WriteLine("ICMP test");
                        // HIER MOET NOG HEEL WAT CODE
                        break;

                    case Protocol.TCP:
                        // IPHeader.Data bezit de data die gedragen wordt via het IP datagram, lengte van de header.
                        TCPHeader tcpHeader = new TCPHeader(ipHeader.Data, ipHeader.MessageLength);
                        TreeViewItem tcpItem = MakeTCPTreeViewItem(tcpHeader);
                        rootItem.Items.Add(tcpItem);
                        // Als de poort gelijk is aan 53, dan is het onderliggende protocol DNS.
                        // Note: DNS kan enkel TCP of UDP gebruiken, daarom --> 2 keer controle.
                        if (tcpHeader.DestinationPort == "53" || tcpHeader.SourcePort == "53")
                        {
                            TreeViewItem dnsItem = MakeDNSTreeViewItem(tcpHeader.Data, tcpHeader.MessageLength);
                            rootItem.Items.Add(dnsItem);
                        }
                        break;

                    case Protocol.UDP:
                        // IPHeader.Data bezit de data die gedragen wordt via het IP datagram, lengte van de header.
                        UDPHeader udpHeader = new UDPHeader(ipHeader.Data, ipHeader.MessageLength);
                        TreeViewItem udpItem = MakeUDPTreeViewItem(udpHeader);
                        rootItem.Items.Add(udpItem);
                        // Als de poort gelijk is aan 53, dan is het onderliggende protocol DNS.
                        // Note: DNS kan enkel TCP of UDP gebruiken, daarom --> 2 keer controle.
                        if (udpHeader.DestinationPort == "53" || udpHeader.SourcePort == "53")
                        {
                            // Lengte van UDP header is altijd 8 bytes, dus we trekken deze af van totale lengte om eigenlijke lengte van de data te kennen.
                            TreeViewItem dnsItem = MakeDNSTreeViewItem(udpHeader.Data, Convert.ToInt32(udpHeader.Length) - 8);
                            rootItem.Items.Add(dnsItem);
                        }
                        break;

                    case Protocol.Unknown:
                        break;
                }
                AddTreeItem addTreeViewItem = new AddTreeItem(OnAddTreeViewItem);
                rootItem.Header = ipHeader.SourceAddress.ToString() + "-" + ipHeader.DestinationAddress.ToString(); //!!!!!!!!!!!!!!!!!
                                                                                                                    // Thread: veilig toevoegen van de Items.
                treeView.Dispatcher.Invoke(addTreeViewItem, new object[] { rootItem });
            }));
        }
예제 #4
0
 // Helper functie die informatie teruggeeft vanuit de IP header aan de tree node.
 private TreeViewItem MakeIPTreeViewItem(IPHeader ipHeader)
 {
     TreeViewItem ipItem = new TreeViewItem();
     ipItem.Header = "IP";
     ipItem.Items.Add("Ver: " + ipHeader.Version);
     ipItem.Items.Add("Header Length: " + ipHeader.HeaderLength);
     ipItem.Items.Add("Differntiated Services: " + ipHeader.DifferentiatedServices);
     ipItem.Items.Add("Total Length: " + ipHeader.TotalLength);
     ipItem.Items.Add("Identification: " + ipHeader.Identification);
     ipItem.Items.Add("Flags: " + ipHeader.Flags);
     ipItem.Items.Add("Fragmentation Offset: " + ipHeader.FragmentationOffset);
     ipItem.Items.Add("Time to live: " + ipHeader.TTL);
     switch (ipHeader.ProtocolType)
     {
         case Protocol.ICMP:
             ipItem.Items.Add("Protocol: " + "ICMP");
             break;
         case Protocol.TCP:
             ipItem.Items.Add("Protocol: " + "TCP");
             break;
         case Protocol.UDP:
             ipItem.Items.Add("Protocol: " + "UDP");
             break;
         case Protocol.Unknown:
             ipItem.Items.Add("Protocol: " + "Unknown");
             break;
     }
     ipItem.Items.Add("Checksum: " + ipHeader.Checksum);
     ipItem.Items.Add("Source: " + ipHeader.SourceAddress.ToString());
     ipItem.Items.Add("Destination: " + ipHeader.DestinationAddress.ToString());
     return ipItem;
 }