private static void AnalyzePacket_IP(PacketDotNet.IPPacket packet, PacketAnalyzeParam param) { param.Protocol = "IP"; param.SourceAddress = packet.SourceAddress; param.DestinationAddress = packet.DestinationAddress; }
private void ui_populate_packet_view() { // There's a race condition here, but imo not worth changing the architecture to fix yet. if (cFileUtilities.get_size(_backend_file) == _backend_size) { return; } _backend_size = cFileUtilities.get_size(_backend_file); ICaptureDevice pcap_device = null; bool has_temp_file_open = false; string temp_file = ""; _packet_bytes.Clear(); try { temp_file = cFileUtilities.get_temp_copy(_backend_file); has_temp_file_open = true; pcap_device = new SharpPcap.LibPcap.CaptureFileReaderDevice(temp_file); pcap_device.Open(); RawCapture capture; int current_packet = 0; while ((capture = pcap_device.GetNextPacket()) != null) { var eth_packet = PacketDotNet.Packet.ParsePacket(capture.LinkLayerType, capture.Data); PacketDotNet.IPPacket ip_packet = eth_packet.Extract <PacketDotNet.IPPacket>(); if (_stream_type == "tcp") { PacketDotNet.TcpPacket tcp_packet = eth_packet.Extract <PacketDotNet.TcpPacket>(); _packet_bytes.Add(tcp_packet.PayloadData.ToList()); object packet_view_item = new { PacketNumber = current_packet.ToString(), Source = ip_packet.SourceAddress.ToString() + ":" + tcp_packet.SourcePort.ToString(), Destination = ip_packet.DestinationAddress.ToString() + ":" + tcp_packet.DestinationPort.ToString(), PayloadLength = tcp_packet.PayloadData.Length.ToString(), }; if (packet_stream_view.Items.Contains(packet_view_item) == false) { packet_stream_view.Items.Add(packet_view_item); } } else { PacketDotNet.UdpPacket udp_packet = eth_packet.Extract <PacketDotNet.UdpPacket>(); _packet_bytes.Add(udp_packet.PayloadData.ToList()); object packet_view_item = new { PacketNumber = current_packet.ToString(), Source = ip_packet.SourceAddress.ToString() + ":" + udp_packet.SourcePort.ToString(), Destination = ip_packet.DestinationAddress.ToString() + ":" + udp_packet.DestinationPort.ToString(), PayloadLength = udp_packet.PayloadData.Length.ToString(), }; if (packet_stream_view.Items.Contains(packet_view_item) == false) { packet_stream_view.Items.Add(packet_view_item); } } current_packet++; } } catch (Exception e) { if (has_temp_file_open == true) { cFileUtilities.remove_temp_copy(temp_file); has_temp_file_open = false; } MessageBox.Show("Error: " + e.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error); } if (pcap_device != null) { pcap_device.Close(); } if (has_temp_file_open == true) { cFileUtilities.remove_temp_copy(temp_file); has_temp_file_open = false; } }