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); }
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; }
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 }); })); }
// 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; }