/// <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); }
/// <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); }
/// <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; }
/// <summary> /// Constructs a new PcapHeader /// </summary> public PcapHeader() { m_pcap_pkthdr = new SharpPcap.PCAP_PKTHDR(); }
/// <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; }
/// <summary> /// Constructs a new PcapHeader /// </summary> public PcapHeader() { m_pcap_pkthdr=new SharpPcap.PCAP_PKTHDR(); }
internal PcapStatistics(Packets.Packet p) { this.m_pktHdr = p.PcapHeader.m_pcap_pkthdr; this.m_pktData = p.Bytes; }
/// <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; }