Exemplo n.º 1
0
		/// <summary>
		/// Add a packet to this send queue. The PcapHeader defines the packet length.
		/// </summary>
		/// <param name="packet">The packet bytes to add</param>
		/// <param name="pcapHdr">The pcap header of the packet</param>
		/// <returns>True if success, else false</returns>
		internal bool AddInternal(byte[] packet, PcapHeader pcapHdr) {
			if (m_queue == IntPtr.Zero) {
				throw new PcapException("Can't add packet, this queue is disposed");
			}

			// the header defines the size to send
			if (pcapHdr.CaptureLength > packet.Length) {
				var error = string.Format("pcapHdr.CaptureLength of {0} > packet.Length {1}",
										  pcapHdr.CaptureLength, packet.Length);
				throw new System.InvalidOperationException(error);
			}

			//Marshal packet
			IntPtr pktPtr;
			pktPtr = Marshal.AllocHGlobal(packet.Length);
			Marshal.Copy(packet, 0, pktPtr, packet.Length);

			//Marshal header
			IntPtr hdrPtr = pcapHdr.MarshalToIntPtr();

			int res = WinPcap.SafeNativeMethods.pcap_sendqueue_queue(m_queue, hdrPtr, pktPtr);

			Marshal.FreeHGlobal(pktPtr);
			Marshal.FreeHGlobal(hdrPtr);

			return (res != -1);
		}
        /// <summary>
        /// Writes a packet to the pcap dump file associated with this device.
        /// </summary>
        /// <param name="p">The packet to write</param>
        public void Write(RawCapture p)
        {
            var data    = p.Data;
            var timeval = p.Timeval;
            var header  = new PcapHeader((uint)timeval.Seconds, (uint)timeval.MicroSeconds,
                                         (uint)data.Length, (uint)data.Length);

            Write(data, header);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Convert an unmanaged packet into a managed GodLesZ.Library.Network.Packet.RawPacket
        /// </summary>
        /// <param name="header">
        /// A <see cref="IntPtr"/>
        /// </param>
        /// <param name="data">
        /// A <see cref="IntPtr"/>
        /// </param>
        /// <returns>
        /// A <see cref="RawCapture"/>
        /// </returns>
        protected virtual RawCapture MarshalRawPacket(IntPtr /* pcap_pkthdr* */ header, IntPtr data)
        {
            RawCapture p;

            // marshal the header
            var pcapHeader = PcapHeader.FromPointer(header);

            var pkt_data = new byte[pcapHeader.CaptureLength];

            Marshal.Copy(data, pkt_data, 0, (int)pcapHeader.CaptureLength);

            p = new RawCapture(LinkType,
                               new PosixTimeval(pcapHeader.Seconds,
                                                pcapHeader.MicroSeconds),
                               pkt_data);

            return(p);
        }
        /// <summary>
        /// Writes a packet to the pcap dump file associated with this device.
        /// </summary>
        public void Write(byte[] p, PcapHeader h)
        {
            ThrowIfNotOpen("Cannot dump packet, device is not opened");
            if (!DumpOpened)
            {
                throw new DeviceNotReadyException("Cannot dump packet, dump file is not opened");
            }

            //Marshal packet
            IntPtr pktPtr;

            pktPtr = Marshal.AllocHGlobal(p.Length);
            Marshal.Copy(p, 0, pktPtr, p.Length);

            //Marshal header
            IntPtr hdrPtr = h.MarshalToIntPtr();

            LibPcapSafeNativeMethods.pcap_dump(m_pcapDumpHandle, hdrPtr, pktPtr);

            Marshal.FreeHGlobal(pktPtr);
            Marshal.FreeHGlobal(hdrPtr);
        }
Exemplo n.º 5
0
		/// <summary>
		/// Add a packet to this send queue. 
		/// </summary>
		/// <param name="packet">The packet to add</param>
		/// <returns>True if success, else false</returns>
		public bool Add(RawCapture packet) {
			var data = packet.Data;
			var timeval = packet.Timeval;
			var header = new PcapHeader((uint)timeval.Seconds, (uint)timeval.MicroSeconds,
										(uint)data.Length, (uint)data.Length);
			return this.AddInternal(data, header);
		}
Exemplo n.º 6
0
		/// <summary>
		/// Add a packet to this send queue. 
		/// </summary>
		/// <param name="packet">The packet bytes to add</param>
		/// <returns>True if success, else false</returns>
		public bool Add(byte[] packet) {
			PcapHeader hdr = new PcapHeader();
			hdr.CaptureLength = (uint)packet.Length;
			return this.AddInternal(packet, hdr);
		}
Exemplo n.º 7
0
		/// <summary>
		/// Add a packet to this send queue. 
		/// </summary>
		/// <param name="packet">The packet bytes to add</param>
		/// <param name="pcapHdr">The pcap header of the packet</param>
		/// <returns>True if success, else false</returns>
		internal bool Add(byte[] packet, PcapHeader pcapHdr) {
			return this.AddInternal(packet, pcapHdr);
		}
Exemplo n.º 8
0
		/// <summary>
		/// Add a packet to this send queue.
		/// </summary>
		/// <param name="packet">The packet to add</param>
		/// <param name="seconds">The 'seconds' part of the packet's timestamp</param>
		/// <param name="microseconds">The 'microseconds' part of the packet's timestamp</param>
		/// <returns>True if success, else false</returns>
		public bool Add(byte[] packet, int seconds, int microseconds) {
			var header = new PcapHeader((uint)seconds, (uint)microseconds,
										(uint)packet.Length, (uint)packet.Length);

			return this.Add(packet, header);
		}
Exemplo n.º 9
0
		/// <summary>
		/// Writes a packet to the pcap dump file associated with this device.
		/// </summary>
		/// <param name="p">The packet to write</param>
		public void Write(RawCapture p) {
			var data = p.Data;
			var timeval = p.Timeval;
			var header = new PcapHeader((uint)timeval.Seconds, (uint)timeval.MicroSeconds,
										(uint)data.Length, (uint)data.Length);
			Write(data, header);
		}
Exemplo n.º 10
0
		/// <summary>
		/// Writes a packet to the pcap dump file associated with this device.
		/// </summary>
		public void Write(byte[] p, PcapHeader h) {
			ThrowIfNotOpen("Cannot dump packet, device is not opened");
			if (!DumpOpened)
				throw new DeviceNotReadyException("Cannot dump packet, dump file is not opened");

			//Marshal packet
			IntPtr pktPtr;
			pktPtr = Marshal.AllocHGlobal(p.Length);
			Marshal.Copy(p, 0, pktPtr, p.Length);

			//Marshal header
			IntPtr hdrPtr = h.MarshalToIntPtr();

			LibPcapSafeNativeMethods.pcap_dump(m_pcapDumpHandle, hdrPtr, pktPtr);

			Marshal.FreeHGlobal(pktPtr);
			Marshal.FreeHGlobal(hdrPtr);
		}