/// <summary> /// This method converts received data /// to packets information /// </summary> /// <param name="buffer"></param> /// <param name="iReceived"></param> public void ConvertReceivedData(byte[] buffer, int iReceived) { _view.Invoke(() => _view.SetTotalPacketReceivedText(_decPackagesReceived.ToString())); if (buffer.Length > 0 && iReceived != 0) { //getting IP header and data information PacketIP ipPacket = new PacketIP(buffer, iReceived); // this string used as a key in the buffer string strKey = _decPackagesReceived.ToString(); // Guid.NewGuid().ToString(); //searching which uperlevel protocol contain IP packet switch (ipPacket.Protocol) { case "TCP": { //if IP contains TCP creating new TCPData object //and assigning all TCP fields PacketTcp tcpPacket = new PacketTcp(ipPacket.Data, ipPacket.MessageLength); //creating new PacketInfo object to fill the buffer PacketInfo pkgInfo = new PacketInfo(ipPacket, tcpPacket); //_pkgBuffer.Add(strKey, pkgInfo); //creating new list item to fill the list view control ListViewItem item = new ListViewItem(_decPackagesReceived.ToString()); item.SubItems.Add(DateTime.Now.ToString("HH:mm:ss:") + DateTime.Now.Millisecond.ToString()); item.SubItems.Add(ipPacket.SourceAddress.ToString()); item.SubItems.Add(tcpPacket.SourcePort); item.SubItems.Add(ipPacket.DestinationAddress.ToString()); item.SubItems.Add(tcpPacket.DestinationPort); item.SubItems.Add(ipPacket.Protocol); item.SubItems.Add(ipPacket.TotalLength); item.SubItems.Add(strKey); // checking if current buffer size is larger then maximum allowed buffer size //then removing item from top of the list view control and also removing //the same item from buffer , then filling the list and buffer with new item if (_pkgBuffer.Count == StartupInformation.PacketsToCapture && _view.ListReceivedPackets.Items.Count > 0) { _view.Invoke(() => _pkgBuffer.Remove(_view.ListReceivedPackets.Items[0].SubItems[8].Text)); _view.ListReceivedPackets.Invoke(RemoveFromList); _pkgBuffer.Add(strKey, pkgInfo); _view.ListReceivedPackets.Invoke(AddToList, new object[] { item }); } else { _pkgBuffer.Add(strKey, pkgInfo); _view.ListReceivedPackets.Invoke(AddToList, new object[] { item }); } } break; // see TCP case "UDP": { PacketUdp udpPacket = new PacketUdp(ipPacket.Data, ipPacket.MessageLength); PacketInfo pkgInfo = new PacketInfo(ipPacket, udpPacket); //_pkgBuffer.Add(strKey, pkgInfo); ListViewItem item = new ListViewItem(_decPackagesReceived.ToString()); item.SubItems.Add(DateTime.Now.ToString("HH:mm:ss:") + DateTime.Now.Millisecond.ToString()); item.SubItems.Add(ipPacket.SourceAddress.ToString()); item.SubItems.Add(udpPacket.SourcePort); item.SubItems.Add(ipPacket.DestinationAddress.ToString()); item.SubItems.Add(udpPacket.DestinationPort); item.SubItems.Add(ipPacket.Protocol); item.SubItems.Add(ipPacket.TotalLength); item.SubItems.Add(strKey); if (_pkgBuffer.Count == StartupInformation.PacketsToCapture && _view.ListReceivedPackets.Items.Count > 0) { _view.Invoke(() => _pkgBuffer.Remove(_view.ListReceivedPackets.Items[0].SubItems[8].Text)); _view.ListReceivedPackets.Invoke(RemoveFromList); _pkgBuffer.Add(strKey, pkgInfo); _view.ListReceivedPackets.Invoke(AddToList, new object[] { item }); } else { _pkgBuffer.Add(strKey, pkgInfo); _view.ListReceivedPackets.Invoke(AddToList, new object[] { item }); } } break; //see TCP case "ICMP": { PacketIcmp icmpPacket = new PacketIcmp(ipPacket.Data, ipPacket.MessageLength); PacketInfo pkgInfo = new PacketInfo(ipPacket, icmpPacket); //_pkgBuffer.Add(strKey, pkgInfo); ListViewItem item = new ListViewItem(_decPackagesReceived.ToString()); item.SubItems.Add(DateTime.Now.ToString("HH:mm:ss:") + DateTime.Now.Millisecond.ToString()); item.SubItems.Add(ipPacket.SourceAddress.ToString()); item.SubItems.Add("0"); item.SubItems.Add(ipPacket.DestinationAddress.ToString()); item.SubItems.Add("0"); item.SubItems.Add(ipPacket.Protocol); item.SubItems.Add(ipPacket.TotalLength); item.SubItems.Add("N/A"); item.SubItems.Add(strKey); if (_pkgBuffer.Count == StartupInformation.PacketsToCapture && _view.ListReceivedPackets.Items.Count > 0) { _view.Invoke(() => _pkgBuffer.Remove(_view.ListReceivedPackets.Items[0].SubItems[8].Text)); _view.ListReceivedPackets.Invoke(RemoveFromList); _view.ListReceivedPackets.Invoke(AddToList, new object[] { item }); _pkgBuffer.Add(strKey, pkgInfo); } else { _view.ListReceivedPackets.Invoke(AddToList, new object[] { item }); _pkgBuffer.Add(strKey, pkgInfo); } } break; case "IGMP": { PacketIgmp igmpPacket = new PacketIgmp(ipPacket.Data, ipPacket.MessageLength); PacketInfo pkgInfo = new PacketInfo(ipPacket, igmpPacket); //_pkgBuffer.Add(strKey, pkgInfo); ListViewItem item = new ListViewItem(_decPackagesReceived.ToString()); item.SubItems.Add(DateTime.Now.ToString("HH:mm:ss:") + DateTime.Now.Millisecond.ToString()); item.SubItems.Add(ipPacket.SourceAddress.ToString()); item.SubItems.Add("0"); item.SubItems.Add(ipPacket.DestinationAddress.ToString()); item.SubItems.Add("0"); item.SubItems.Add(ipPacket.Protocol); item.SubItems.Add(ipPacket.TotalLength); item.SubItems.Add("N/A"); item.SubItems.Add(strKey); if (_pkgBuffer.Count == StartupInformation.PacketsToCapture && _view.ListReceivedPackets.Items.Count > 0) { _view.Invoke(() => _pkgBuffer.Remove(_view.ListReceivedPackets.Items[0].SubItems[8].Text)); _view.ListReceivedPackets.Invoke(RemoveFromList); _pkgBuffer.Add(strKey, pkgInfo); _view.ListReceivedPackets.Invoke(AddToList, new object[] { item }); } else { _pkgBuffer.Add(strKey, pkgInfo); _view.ListReceivedPackets.Invoke(AddToList, new object[] { item }); } } break; case "Unknown": { PacketInfo pkgInfo = new PacketInfo(ipPacket); _pkgBuffer.Add(strKey, pkgInfo); ListViewItem item = new ListViewItem(_decPackagesReceived.ToString()); item.SubItems.Add(DateTime.Now.ToString("HH:mm:ss:") + DateTime.Now.Millisecond.ToString()); item.SubItems.Add(ipPacket.SourceAddress.ToString()); item.SubItems.Add("0"); item.SubItems.Add(ipPacket.DestinationAddress.ToString()); item.SubItems.Add("0"); item.SubItems.Add(ipPacket.Protocol); item.SubItems.Add(ipPacket.TotalLength); item.SubItems.Add(strKey); if (_pkgBuffer.Count > StartupInformation.PacketsToCapture && _view.ListReceivedPackets.Items.Count > 0) { _view.Invoke(() => _pkgBuffer.Remove(_view.ListReceivedPackets.Items[0].SubItems[8].Text)); _view.ListReceivedPackets.Invoke(RemoveFromList); _view.ListReceivedPackets.Invoke(AddToList, new object[] { item }); } else { _view.ListReceivedPackets.Invoke(AddToList, new object[] { item }); } } break; } _view.Invoke(() => _view.ProgressBufferusage.Value = _pkgBuffer.Count); _view.Invoke(() => _view.SetBufferUsage(_pkgBuffer.Count.ToString())); } }
private void ConvertData(byte[] bfr, int rcvd) { PacketType pkgData; PacketIP packet = new PacketIP(bfr, rcvd); ListViewItem item = new ListViewItem(); this.BeginInvoke(new Action(() => { decimal newDataUsage = decimal.Parse(packet.TotalLength) / Mbyte; DataUsage += newDataUsage; lblDataUsage.Text = DataUsage.ToString("F2"); File.WriteAllText(generalDataPath + "\\totaldata.txt", DataUsage.ToString()); createAndUpdateDataFolder(newDataUsage); })); item.Text = DateTime.Now.ToString("HH:mm:ss:") + DateTime.Now.Millisecond.ToString(); item.SubItems.Add(packet.SourceAddress.ToString()); item.SubItems.Add("0"); item.SubItems.Add(packet.DestinationAddress.ToString()); item.SubItems.Add("0"); item.SubItems.Add(packet.Protocol); item.SubItems.Add(packet.TotalLength); switch (packet.Protocol) { case "TCP": PacketTcp tcp = new PacketTcp(packet.Data, packet.MessageLength); item.SubItems[2].Text = tcp.SourcePort; item.SubItems[4].Text = tcp.DestinationPort; pkgData = new PacketType(packet, tcp); break; case "UDP": PacketUdp udp = new PacketUdp(packet.Data, packet.MessageLength); item.SubItems[2].Text = udp.SourcePort; item.SubItems[4].Text = udp.DestinationPort; pkgData = new PacketType(packet, udp); break; case "ICMP": PacketIcmp icmp = new PacketIcmp(packet.Data, packet.MessageLength); item.SubItems.Add("N/A"); pkgData = new PacketType(packet, icmp); break; case "Unknown": pkgData = new PacketType(packet); break; } if (decimal.Parse(lblDataUsage.Text) > nudDataLimit.Value) { System.Diagnostics.Process.Start("ipconfig", "/release"); Stopped = true; MessageBox.Show("You've reached your data limit!"); } else { //_pkgBuffer.Add(strKey, pkgInfo); this.BeginInvoke(new Action(() => { lvMessages.Items.Add(item); })); } }