Exemple #1
0
        private string[] MakeUDP(UDPHeader udpHeader)
        {
            string[] UDPNode = new string[]
            {
                "UDP", "Source Port: " + udpHeader.SourcePort,
                "Destination Port: " + udpHeader.DestinationPort,
                "Length: " + udpHeader.Length,
                "Checksum: " + udpHeader.Checksum
            };

            return(UDPNode);
        }
Exemple #2
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;
        }
Exemple #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 });
            }));
        }
Exemple #4
0
 // Helper functie die informatie teruggeeft vanuit de UDP header aan de tree node.
 private TreeViewItem MakeUDPTreeViewItem(UDPHeader udpHeader)
 {
     TreeViewItem udpItem = new TreeViewItem();
     udpItem.Header = "UDP";
     udpItem.Items.Add("Source Port: " + udpHeader.SourcePort);
     udpItem.Items.Add("Destination Port: " + udpHeader.DestinationPort);
     udpItem.Items.Add("Length: " + udpHeader.Length);
     udpItem.Items.Add("Checksum: " + udpHeader.Checksum);
     return udpItem;
 }