protected override bool OnOpenPath(FileFormatOption option, string path) { option_ = option as FileFormatReaderOptionImpl; if (option_ == null) { return(false); } option_parser_ = new PcapPacketParserOption() { SourceType = option_.PacketSourceType, DestinationType = option_.PacketDestinationType, DataContentsType = option_.PacketDataType, }; device_ = new CaptureFileReaderDevice(path); device_.Filter = option_.Filter; ar_load_device_packet_ = (new LoadDevicePacketTaskDelegate(LoadDevicePacketTask)).BeginInvoke(device_, null, null); return(true); }
public static PacketObject ParseAndBuild(PcapPacketInfo packet_info, PcapPacketParserOption option) { if ((packet_info == null) || (option == null) ) { return(null); } var info = ""; var src_info = ""; var dst_info = ""; var data_contents = new byte[] { }; if (packet_info.ProtocolNames.Count > 0) { switch (option.InfoType) { case PacketInfoType.AllProtocolName: info = String.Join(".", packet_info.ProtocolNames); break; case PacketInfoType.TopProtocolName: info = packet_info.ProtocolNames.Last(); break; } } switch (option.SourceType) { case SourceInfoType.MacAddress: if (packet_info.ItemFlags.HasFlag(PcapPacketInfoItemFlags.SourceHwAdress)) { src_info = packet_info.SourceHwAddress.ToString(); } break; case SourceInfoType.IpAddress: if (packet_info.ItemFlags.HasFlag(PcapPacketInfoItemFlags.SourceIpAddress)) { src_info = packet_info.SourceIpAddress.ToString(); } break; case SourceInfoType.IpAddressAndPortNo: if (packet_info.ItemFlags.HasFlag(PcapPacketInfoItemFlags.SourceIpAddress)) { if (packet_info.ItemFlags.HasFlag(PcapPacketInfoItemFlags.SourcePortNo)) { if (packet_info.SourceIpAddress.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6) { src_info = String.Format("[{0}]:{1}", packet_info.SourceIpAddress.ToString(), packet_info.SourcePortNo); } else { src_info = String.Format("{0}:{1}", packet_info.SourceIpAddress.ToString(), packet_info.SourcePortNo); } } else { src_info = packet_info.SourceIpAddress.ToString(); } } break; } switch (option.DestinationType) { case DestinationInfoType.MacAddress: if (packet_info.ItemFlags.HasFlag(PcapPacketInfoItemFlags.DestinationHwAddress)) { dst_info = packet_info.DestinationHwAddress.ToString(); } break; case DestinationInfoType.IpAddress: if (packet_info.ItemFlags.HasFlag(PcapPacketInfoItemFlags.DestinationIpAddress)) { dst_info = packet_info.DestinationIpAddress.ToString(); } break; case DestinationInfoType.IpAddressAndPortNo: if (packet_info.ItemFlags.HasFlag(PcapPacketInfoItemFlags.DestinationIpAddress)) { if (packet_info.ItemFlags.HasFlag(PcapPacketInfoItemFlags.DestinationPortNo)) { if (packet_info.DestinationIpAddress.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6) { dst_info = String.Format("[{0}]:{1}", packet_info.DestinationIpAddress.ToString(), packet_info.DestinationPortNo); } else { dst_info = String.Format("{0}:{1}", packet_info.DestinationIpAddress.ToString(), packet_info.DestinationPortNo); } } else { dst_info = packet_info.DestinationIpAddress.ToString(); } } break; } switch (option.DataContentsType) { case DataContentsType.Raw: data_contents = packet_info.RawData; break; case DataContentsType.TopProtocolDataUnit: data_contents = packet_info.TopProtocolDataUnit; break; } return(new PacketObject( "Pcap", PacketFacility.Device, "", PacketPriority.Standard, PacketAttribute.Data, packet_info.DateTime, info, packet_info.IsSendPacket ? PacketDirection.Send : PacketDirection.Recv, src_info, dst_info, 0x00, null, data_contents)); }
public static PacketObject ParseAndBuild(RawCapture packet_sp, PcapPacketParserOption option) { return(ParseAndBuild(Parse(packet_sp), option)); }
protected override EventResult OnConnectBusy() { try { /* 選択したインターフェースを取得 */ #if __SHARPPCAP__ pcap_dev_ = LibPcapLiveDeviceList.Instance.First(value => value.Name == prop_.Interface.Value); #elif __PCAPDOTNET__ pcap_dev_ = LivePacketDevice.AllLocalMachine.First(value => value.Name == prop_.Interface.Value); #endif if (pcap_dev_ == null) { throw new Exception(); } /* イベント登録 */ #if __SHARPPCAP__ pcap_dev_.OnPacketArrival += OnSharpPcapDev_OnPacketArrival; #endif /* デバイスを開く */ #if __SHARPPCAP__ pcap_dev_.Open(); if (!pcap_dev_.Opened) { throw new Exception(); } /* パケット解析オプション取得 */ parser_option_ = new PcapPacketParserOption() { LinkType = (PcapLinkType)pcap_dev_.LinkType, InfoType = prop_.PacketInfo.Value, SourceType = prop_.PacketSource.Value, DestinationType = prop_.PacketDestination.Value, DataContentsType = prop_.PacketData.Value }; #elif __PCAPDOTNET__ if (pcap_comm_ == null) { pcap_comm_ = pcap_dev_.Open(); } if (pcap_comm_ == null) { throw new Exception(); } #endif /* フィルタ設定 */ #if __SHARPPCAP__ pcap_dev_.Filter = prop_.Filter.Value; #elif __PCAPDOTNET__ pcap_comm_.SetFilter(prop_.Filter.Value); #endif /* キャプチャー開始 */ #if __SHARPPCAP__ pcap_dev_.StartCapture(); if (!pcap_dev_.Started) { throw new Exception(); } #elif __PCAPDOTNET__ if (pcap_comm_.ReceivePackets(0, OnPcapDotNet_OnPacketReceive) != PacketCommunicatorReceiveResult.Ok) { return(EventResult.Busy); } #endif } catch { #if __SHARPPCAP__ pcap_dev_?.Close(); pcap_dev_ = null; #elif __PCAPDOTNET__ #endif } #if __SHARPPCAP__ if (pcap_dev_ == null) { return(EventResult.Error); } #elif __PCAPDOTNET__ if (pcap_comm_ == null) { return(EventResult.Error); } #endif return(EventResult.Success); }