コード例 #1
0
        /// <summary>
        /// Marshal a chunk of captured packets into a packet list
        /// </summary>
        /// <param name="packetsBuffer"></param>
        /// <param name="bufferEnd"></param>
        /// <param name="packets"></param>
        protected virtual void MarshalPackets(IntPtr packetsBuffer, IntPtr bufferEnd,
                                              out List <RawCapture> packets)
        {
            RawCapture p;

            var linkType = LinkType;

            packets = new List <RawCapture>();

            IntPtr bufferPointer = packetsBuffer;

            while (bufferPointer.ToInt64() < bufferEnd.ToInt64())
            {
                // marshal the header
                var header = new AirPcapPacketHeader(bufferPointer);

                // advance the pointer to the packet data and marshal that data
                // into a managed buffer
                bufferPointer = new IntPtr(bufferPointer.ToInt64() + header.Hdrlen);
                var pkt_data = new byte[header.Caplen];
                Marshal.Copy(bufferPointer, pkt_data, 0, (int)header.Caplen);

                p = new RawCapture(linkType,
                                   new PosixTimeval(header.TsSec,
                                                    header.TsUsec),
                                   pkt_data);

                packets.Add(p);

                // advance the pointer by the size of the data
                // and round up to the next word offset since each frame header is on a word boundry
                int alignment = 4;
                var pointer   = bufferPointer.ToInt64() + header.Caplen;
                pointer       = AirPcapDevice.RoundUp(pointer, alignment);
                bufferPointer = new IntPtr(pointer);
            }
        }
コード例 #2
0
ファイル: AirPcapDevice.cs プロジェクト: GodLesZ/svn-dump
		/// <summary>
		/// Marshal a chunk of captured packets into a packet list
		/// </summary>
		/// <param name="packetsBuffer"></param>
		/// <param name="bufferEnd"></param>
		/// <param name="packets"></param>
		protected virtual void MarshalPackets(IntPtr packetsBuffer, IntPtr bufferEnd,
											  out List<RawCapture> packets) {
			RawCapture p;

			var linkType = LinkType;

			packets = new List<RawCapture>();

			IntPtr bufferPointer = packetsBuffer;

			while (bufferPointer.ToInt64() < bufferEnd.ToInt64()) {
				// marshal the header
				var header = new AirPcapPacketHeader(bufferPointer);

				// advance the pointer to the packet data and marshal that data
				// into a managed buffer
				bufferPointer = new IntPtr(bufferPointer.ToInt64() + header.Hdrlen);
				var pkt_data = new byte[header.Caplen];
				Marshal.Copy(bufferPointer, pkt_data, 0, (int)header.Caplen);

				p = new RawCapture(linkType,
								   new PosixTimeval(header.TsSec,
													header.TsUsec),
								   pkt_data);

				packets.Add(p);

				// advance the pointer by the size of the data
				// and round up to the next word offset since each frame header is on a word boundry
				int alignment = 4;
				var pointer = bufferPointer.ToInt64() + header.Caplen;
				pointer = AirPcapDevice.RoundUp(pointer, alignment);
				bufferPointer = new IntPtr(pointer);
			}
		}