Esempio n. 1
0
        public void Write(IDataChunk chunk, byte[] data)
        {
            const int microseconds = 1_000_000;

            if (chunk is Packet packet)
            {
                foreach (var raw in _encoder.BuildPacket(packet))
                {
                    if (disposed)
                    {
                        break;
                    }
                    var unixUs = packet.Timestamp.UtcDateTime.GetUnixMicroSeconds();
                    if (unixUs <= lastMicroseconds)
                    {
                        unixUs = lastMicroseconds + 1;                             // every packet should have unique timestamp and increment sequentially
                    }
                    _pcap.WritePacket(new PcapPacket(unixUs / microseconds, unixUs % microseconds, raw));
                    lastMicroseconds = unixUs;
                }
            }
        }
Esempio n. 2
0
        /// <summary>
        /// 捕捉事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="args"></param>
        private void OnCapture(Object sender, PacketArrivedEventArgs args)
        {
            //Console.Clear();
            //Length = Length + args.PacketLength;
            //args.Protocol可以是TCP:/UDP:/ICMP:/IGMP:/UNKNOWN
            if (args.Protocol != Setting.Instance.Protocal.ToString())
            {
                return;
            }

            if (this.capturedIp.ToString() != args.DestinationAddress ||
                args.DestinationPort != Setting.Instance.CapturedPort)
            {
                return;
            }

            Console.WriteLine("  目标IP:" + args.DestinationAddress
                              + "\t目标端口:" + args.DestinationPort
                              + "\t协议版本:" + args.IPVersion
                              + "\t源地址:" + args.OriginationAddress
                              + "\t源端口:" + args.OriginationPort
                              + "\tIP包长度:" + args.PacketLength
                              + "\t协议类型:" + args.Protocol);

            Console.WriteLine(" Data: " + BitConverter.ToString(args.ReceiveBuffer, 16));


            Task.Run(() =>
            {
                DateTime timeCreated = DateTime.Now;
                UInt32 ts_sec        = (UInt32)((timeCreated.Subtract(new DateTime(1970, 1, 1))).TotalSeconds);
                UInt32 ts_usec       = (UInt32)(((timeCreated.Subtract(new DateTime(1970, 1, 1))).TotalMilliseconds) - ((UInt32)((timeCreated.Subtract(new DateTime(1970, 1, 1))).TotalSeconds * 1000))) * 1000;
                UInt32 incl_len      = (UInt32)args.PacketLength;

                PcapPacket packet = new PcapPacket(ts_sec, ts_usec, args.ReceiveBuffer, args.PacketLength);

                writer.WritePacket(packet);
            });
        }