示例#1
0
        private string[] MakeTCP(TCPHeader tcpHeader)
        {
            string ack = null;

            if (tcpHeader.AcknowledgementNumber != "")
            {
                ack = "Acknowledgement Number : " + tcpHeader.AcknowledgementNumber;
            }
            else
            {
                ack = "Acknowledgement NUmber : ";
            }

            string[] TCPNode = new string[]
            {
                "TCP", "Source Port: " + tcpHeader.SourcePort,
                "Destination Port: " + tcpHeader.DestinationPort,
                "Sequence Number: " + tcpHeader.SequenceNumber,
                ack,
                "Header Length: " + tcpHeader.HeaderLength,
                "Flags: " + tcpHeader.Flags,
                "Window Size: " + tcpHeader.WindowSize,
                "Checksum: " + tcpHeader.Checksum
            };

            return(TCPNode);
        }
示例#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;
        }
示例#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 TCP header aan de tree node.
 private TreeViewItem MakeTCPTreeViewItem(TCPHeader tcpHeader)
 {
     TreeViewItem tcpItem = new TreeViewItem();
     tcpItem.Header = "TCP";
     tcpItem.Items.Add("Source Port: " + tcpHeader.SourcePort);
     tcpItem.Items.Add("Destination Port: " + tcpHeader.DestinationPort);
     tcpItem.Items.Add("Sequence Number: " + tcpHeader.SequenceNumber);
     if (tcpHeader.AcknowledgementNumber != "")
         tcpItem.Items.Add("Acknowledgement Number: " + tcpHeader.AcknowledgementNumber);
     tcpItem.Items.Add("Header Length: " + tcpHeader.HeaderLength);
     tcpItem.Items.Add("Flags: " + tcpHeader.Flags);
     tcpItem.Items.Add("Window Size: " + tcpHeader.WindowSize);
     tcpItem.Items.Add("Checksum: " + tcpHeader.Checksum);
     if (tcpHeader.UrgentPointer != "")
         tcpItem.Items.Add("Urgent Pointer: " + tcpHeader.UrgentPointer);
     return tcpItem;
 }