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);
        }
Exemple #2
0
        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));
        }
Exemple #3
0
 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);
        }