Exemplo n.º 1
0
        /// <summary>
        /// Gets the next packet captured on this device
        /// </summary>
        /// <param name="p">A packet reference</param>
        /// <returns>A reference to a packet object</returns
        public virtual int PcapGetNextPacket(out Packet p)
        {
            //Pointer to a packet info struct
            IntPtr header = IntPtr.Zero;
            //Pointer to a packet struct
            IntPtr data = IntPtr.Zero;
            int    res  = 0;

            //Get a packet from winpcap
            res = SharpPcap.pcap_next_ex(PcapHandle, ref header, ref data);
            p   = null;

            if (res > 0)
            {
                //Marshal the packet
                if ((header != IntPtr.Zero) && (data != IntPtr.Zero))
                {
                    SharpPcap.PCAP_PKTHDR pkt_header = (SharpPcap.PCAP_PKTHDR)Marshal.PtrToStructure(header, typeof(SharpPcap.PCAP_PKTHDR));
                    //SharpPcap.PCAP_PKTDATA pkt_data = (SharpPcap.PCAP_PKTDATA)Marshal.PtrToStructure( data, typeof(SharpPcap.PCAP_PKTDATA) );
                    byte[] pkt_data = new byte[pkt_header.caplen];
                    Marshal.Copy(data, pkt_data, 0, pkt_header.caplen);
                    p            = Packets.PacketFactory.dataToPacket(PcapDataLink, pkt_data, new Packets.Util.Timeval(pkt_header.tv_sec, pkt_header.tv_usec));
                    p.PcapHeader = new PcapHeader(pkt_header);
                }
            }
            return(res);
        }
Exemplo n.º 2
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>
        public bool Add(byte[] packet, SharpPcap.PCAP_PKTHDR pcapHdr)
        {
            if (m_queue == IntPtr.Zero)
            {
                throw new PcapException("Can't add packet, this queue is disposed");
            }

            if (pcapHdr.caplen == 0)
            {
                pcapHdr.caplen = packet.Length;                //set the length in the header field
            }
            //Marshal packet
            IntPtr pktPtr;

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

            //Marshal header
            IntPtr hdrPtr;

            hdrPtr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(SharpPcap.PCAP_PKTHDR)));
            Marshal.StructureToPtr(pcapHdr, hdrPtr, true);

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

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

            return(res != -1);
        }
Exemplo n.º 3
0
 /// <summary>
 /// Constructs a new PcapHeader
 /// </summary>
 /// <param name="m_pcap_pkthdr">The underlying PCAP_PKTHDR structure</param>
 public PcapHeader(SharpPcap.PCAP_PKTHDR m_pcap_pkthdr)
 {
     this.m_pcap_pkthdr = m_pcap_pkthdr;
 }
Exemplo n.º 4
0
 /// <summary>
 /// Constructs a new PcapHeader
 /// </summary>
 public PcapHeader()
 {
     m_pcap_pkthdr = new SharpPcap.PCAP_PKTHDR();
 }
Exemplo n.º 5
0
 /// <summary>
 /// Constructs a new PcapHeader
 /// </summary>
 /// <param name="m_pcap_pkthdr">The underlying PCAP_PKTHDR structure</param>
 public PcapHeader( SharpPcap.PCAP_PKTHDR m_pcap_pkthdr )
 {
     this.m_pcap_pkthdr=m_pcap_pkthdr;
 }
Exemplo n.º 6
0
 /// <summary>
 /// Constructs a new PcapHeader
 /// </summary>
 public PcapHeader()
 {
     m_pcap_pkthdr=new SharpPcap.PCAP_PKTHDR();
 }
Exemplo n.º 7
0
 internal PcapStatistics(Packets.Packet p)
 {
     this.m_pktHdr  = p.PcapHeader.m_pcap_pkthdr;
     this.m_pktData = p.Bytes;
 }
Exemplo n.º 8
0
 /// <summary>
 /// Constructs a new Pcap Statistics strcuture
 /// </summary>
 /// <param name="pktHdr">Time value as PCAP_PKTHDR</param>
 /// <param name="pktData">Statistics values as PCAP_PKTDATA</param>
 internal PcapStatistics(SharpPcap.PCAP_PKTHDR pktHdr, SharpPcap.PCAP_PKTDATA pktData)
 {
     this.m_pktHdr  = pktHdr;
     this.m_pktData = pktData.bytes;
 }
Exemplo n.º 9
0
 internal PcapStatistics(Packets.Packet p)
 {
     this.m_pktHdr	= p.PcapHeader.m_pcap_pkthdr;
     this.m_pktData	= p.Bytes;
 }
Exemplo n.º 10
0
 /// <summary>
 /// Constructs a new Pcap Statistics strcuture
 /// </summary>
 /// <param name="pktHdr">Time value as PCAP_PKTHDR</param>
 /// <param name="pktData">Statistics values as PCAP_PKTDATA</param>
 internal PcapStatistics(SharpPcap.PCAP_PKTHDR pktHdr, SharpPcap.PCAP_PKTDATA pktData)
 {
     this.m_pktHdr	= pktHdr;
     this.m_pktData	= pktData.bytes;
 }