Packet Sniffer SDK DLL Edition

HNPacket wrapper for C#

 Previous Next

File: HNPacket.cs

using System;
using System.ComponentModel;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using System.Runtime.InteropServices;

namespace microOLAP.PSSDK
{
    /// <summary>
    /// Summary description for HNPacket.
    /// </summary>
    public partial class HNPacket : Component
    {
        #region DLL exports

        /// <summary>
        /// Creates the HNPacket object.
        /// </summary>
        /// <param name="MaxPacketSize"></param>
        /// <returns></returns>
        [DllImport("pssdk.dll", EntryPoint = "PktCreate")]
        private static extern IntPtr PktCreate(int MaxPacketSize);

        /// <summary>
        /// Destroys the HNPacket object.
        /// </summary>
        /// <param name="hPkt"></param>
        /// <returns></returns>
        [DllImport("pssdk.dll", EntryPoint = "PktDestroy")]
        private static extern int PktDestroy(IntPtr hPkt);

        /// <summary>
        /// Returns the network adapter type.
        /// </summary>
        /// <param name="hPkt"></param>
        /// <returns></returns>
        [DllImport("pssdk.dll", EntryPoint = "PktGetMediumType")]
        private static extern int PktGetMediumType(IntPtr hPkt);

        /// <summary>
        /// Sets the network adapter type.
        /// </summary>
        /// <param name="hPkt"></param>
        /// <param name="MediumType"></param>
        /// <returns></returns>
        [DllImport("pssdk.dll", EntryPoint = "PktSetMediumType")]
        private static extern int PktSetMediumType(IntPtr hPkt, int MediumType);

        /// <summary>
        /// Returns the value definded by the user.
        /// </summary>
        /// <param name="hPkt"></param>
        /// <returns></returns>
        [DllImport("pssdk.dll", EntryPoint = "PktGetUserData")]
        private static extern IntPtr PktGetUserData(IntPtr hPkt);

        /// <summary>
        /// Sets the value definded by the user.
        /// </summary>
        /// <param name="hPkt"></param>
        /// <param name="UserData"></param>
        /// <returns></returns>
        [DllImport("pssdk.dll", EntryPoint = "PktSetUserData")]
        private static extern IntPtr PktSetUserData(IntPtr hPkt, IntPtr UserData);

        /// <summary>
        /// Returns the packet number.
        /// </summary>
        /// <param name="hPkt"></param>
        /// <param name="HiValue"></param>
        /// <returns></returns>
        [DllImport("pssdk.dll", EntryPoint = "PktGetId")]
#if WIN64
        private static extern ulong PktGetId(IntPtr hPkt);
#else
        private static extern uint PktGetId(IntPtr hPkt, ref uint HiValue);
#endif

        /// <summary>
        /// Sets the packet number.
        /// </summary>
        /// <param name="hPkt"></param>
        /// <param name="LowValue"></param>
        /// <param name="HiValue"></param>
        /// <returns></returns>
        [DllImport("pssdk.dll", EntryPoint = "PktSetId")]
#if WIN64
        private static extern ulong PktSetId(IntPtr hPkt, ulong Value);
#else
        private static extern uint PktSetId(IntPtr hPkt, uint LowValue, uint HiValue);
#endif

        /// <summary>
        /// Returns the time of the packet receiving.
        /// </summary>
        /// <param name="hPkt"></param>
        /// <param name="HiValue"></param>
        /// <returns></returns>
        [DllImport("pssdk.dll", EntryPoint = "PktGetTimeStamp")]
#if WIN64
        private static extern long PktGetTimeStamp(IntPtr hPkt);
#else
        private static extern uint PktGetTimeStamp(IntPtr hPkt, ref int HiValue);
#endif

        /// <summary>
        /// Sets the time of the packet receiving.
        /// </summary>
        /// <param name="hPkt"></param>
        /// <param name="LowValue"></param>
        /// <param name="HiValue"></param>
        /// <returns></returns>
        [DllImport("pssdk.dll", EntryPoint = "PktSetTimeStamp")]
#if WIN64
        private static extern long PktSetTimeStamp(IntPtr hPkt, long Value);
#else
        private static extern uint PktSetTimeStamp(IntPtr hPkt, uint LowValue, int HiValue);
#endif

        /// <summary>
        /// Returns the size of the buffer allocated for packet.
        /// </summary>
        /// <param name="hPkt"></param>
        /// <returns></returns>
        [DllImport("pssdk.dll", EntryPoint = "PktGetMaxPacketSize")]
        private static extern uint PktGetMaxPacketSize(IntPtr hPkt);

        /// <summary>
        /// Returns the actual size of the packet received by PSSDK internal driver.
        /// </summary>
        /// <param name="hPkt"></param>
        /// <returns></returns>
        [DllImport("pssdk.dll", EntryPoint = "PktGetPacketSize")]
        private static extern uint PktGetPacketSize(IntPtr hPkt);

        /// <summary>
        /// Sets the actual size of the packet received by PSSDK internal driver.
        /// </summary>
        /// <param name="hPkt"></param>
        /// <param name="PacketSize"></param>
        /// <returns></returns>
        [DllImport("pssdk.dll", EntryPoint = "PktSetPacketSize")]
        private static extern uint PktSetPacketSize(IntPtr hPkt, uint PacketSize);

        /// <summary>
        /// Returns the size of the packet sent by PSSDK driver to the user application.
        /// </summary>
        /// <param name="hPkt"></param>
        /// <returns></returns>
        [DllImport("pssdk.dll", EntryPoint = "PktGetIncPacketSize")]
        private static extern uint PktGetIncPacketSize(IntPtr hPkt);

        /// <summary>
        /// Sets the size of the packet sent by PSSDK driver to the user application.
        /// </summary>
        /// <param name="hPkt"></param>
        /// <param name="IncPacketSize"></param>
        /// <returns></returns>
        [DllImport("pssdk.dll", EntryPoint = "PktSetIncPacketSize")]
        private static extern uint PktSetIncPacketSize(IntPtr hPkt, uint IncPacketSize);

        /// <summary>
        /// Returns the pointer to the packet data.
        /// </summary>
        /// <param name="hPkt"></param>
        /// <returns></returns>
        [DllImport("pssdk.dll", EntryPoint = "PktGetPacketData")]
        private static extern IntPtr PktGetPacketData(IntPtr hPkt);

        /// <summary>
        /// Copies packet to another one.
        /// </summary>
        /// <param name="hDstPkt"></param>
        /// <param name="hSrcPkt"></param>
        /// <returns></returns>
        [DllImport("pssdk.dll", EntryPoint = "PktCopyPacketToPacket")]
        private static extern int PktCopyPacketToPacket(IntPtr hDstPkt, IntPtr hSrcPkt);

        /// <summary>
        /// Counts the IP packets checksum.
        /// </summary>
        /// <param name="pXData"></param>
        /// <param name="Length"></param>
        /// <returns></returns>
        [DllImport("pssdk.dll", EntryPoint = "PktInetCheckSum")]
        private static extern short PktInetCheckSum(IntPtr pXData, uint Length);

        /// <summary>
        /// Counts the TCP and UDP packets checksums.
        /// </summary>
        /// <param name="pPacket"></param>
        /// <param name="PacketLen"></param>
        /// <param name="Proto"></param>
        /// <param name="SrcIP"></param>
        /// <param name="DstIP"></param>
        /// <returns></returns>
        [DllImport("pssdk.dll", EntryPoint = "PktTransportCheckSum")]
        private static extern short PktTransportCheckSum(IntPtr pPacket, int PacketLen, int Proto, int SrcIP, int DstIP);

        /// <summary>
        /// Creates an IP packet.
        /// </summary>
        /// <param name="pPacket"></param>
        /// <param name="PacketLen"></param>
        /// <param name="Proto"></param>
        /// <param name="SrcIP"></param>
        /// <param name="DstIP"></param>
        /// <returns></returns>
        [DllImport("pssdk.dll", EntryPoint = "PktIPGenerate")]
        private static extern int PktIPGenerate(IntPtr pPacket, uint PacketLen, uint Proto, uint SrcIP, uint DstIP);

        /// <summary>
        /// Creates a UDP packet.
        /// </summary>
        /// <param name="pUDPPacket"></param>
        /// <param name="PacketLen"></param>
        /// <param name="SrcPort"></param>
        /// <param name="DstPort"></param>
        /// <returns></returns>
        [DllImport("pssdk.dll", EntryPoint = "PktUDPGenerate")]
        private static extern int PktUDPGenerate(IntPtr pUDPPacket, int PacketLen, short SrcPort, short DstPort);

        /// <summary>
        /// Creates a TCP packet.
        /// </summary>
        /// <param name="pTCPPacket"></param>
        /// <param name="SrcPort"></param>
        /// <param name="DstPort"></param>
        /// <param name="Seq"></param>
        /// <param name="Ack"></param>
        /// <param name="Win"></param>
        /// <returns></returns>
        [DllImport("pssdk.dll", EntryPoint = "PktTCPGenerate")]
        private static extern int PktTCPGenerate(IntPtr pTCPPacket, short SrcPort, short DstPort, int Seq, int Ack, short Win);

        /// <summary>
        /// Return value of the packet mark, which was set for this packet by BPF filter.
        /// </summary>
        /// <param name="hPkt"></param>
        /// <returns></returns>
        [DllImport("pssdk.dll", EntryPoint = "PktGetMark")]
        private static extern uint PktGetMark(IntPtr hPkt);

        /// <summary>
        /// Set mark for a packet.
        /// </summary>
        /// <param name="hPkt"></param>
        /// <param name="Mark"></param>
        /// <returns></returns>
        [DllImport("pssdk.dll", EntryPoint = "PktSetMark")]
        private static extern uint PktSetMark(IntPtr hPkt, uint Mark);

        #endregion

        /// <summary>
        /// Handle of the HNPacket object
        /// </summary>
        private IntPtr hPkt = IntPtr.Zero;

        public HNPacket()
        {
            InitializeComponent();
        }

        #region HNPacket properties

        /// <summary>
        /// Checks if the HNPacket object has been created correctly.
        /// </summary>
        [Browsable(false)]
        public bool IsValid
        {
            get
            {
                return (hPkt != IntPtr.Zero);
            }
        }

        /// <summary>
        /// Sets/returns a packet handle
        /// </summary>
        [Browsable(false)]
        public IntPtr Handle
        {
            get
            {
                return hPkt;
            }
            set
            {
                hPkt = value;
            }
        }

        /// <summary>
        /// Sets/Returns the network adapter type.
        /// </summary>
        [Browsable(false)]
        public HNNetAdapterType MediumType
        {
            get
            {
                return (HNNetAdapterType)PktGetMediumType(hPkt);
            }
            set
            {
                PktSetMediumType(hPkt, (int)value);
            }
        }

        /// <summary>
        /// Sets/Returns the value definded by the user, and associated with this packet.
        /// </summary>
        [Browsable(false)]
        public IntPtr UserData
        {
            get
            {
                return PktGetUserData(hPkt);
            }
            set
            {
                PktSetUserData(hPkt, value);
            }
        }

        /// <summary>
        /// Returns the size of the buffer allocated for packet data.
        /// </summary>
        [Browsable(false)]
        public uint MaxPacketSize
        {
            get
            {
                return PktGetMaxPacketSize(hPkt);
            }
        }

        /// <summary>
        /// Sets/Returns the size of the packet data.
        /// </summary>
        [Browsable(false)]
        public uint PacketSize
        {
            get
            {
                return PktGetPacketSize(hPkt);
            }
            set
            {
                PktSetPacketSize(hPkt, value);
            }
        }

        /// <summary>
        /// Sets/Returns the size of the packet's data sent by PSSDK driver to the user application.
        /// </summary>
        [Browsable(false)]
        public uint IncPacketSize
        {
            get
            {
                return PktGetIncPacketSize(hPkt);
            }
            set
            {
                PktSetIncPacketSize(hPkt, value);
            }
        }

        /// <summary>
        /// Returns the pointer to the packet data.
        /// </summary>
        [Browsable(false)]
        public IntPtr PacketData
        {
            get
            {
                return PktGetPacketData(hPkt);
            }
        }

        /// <summary>
        /// Sets/Returns the packet number.
        /// </summary>
        [Browsable(false)]
        public ulong Id
        {
            get
            {
#if WIN64
                return PktGetId(hPkt);
#else
                uint LowValue, HighValue = 0;
                LowValue = PktGetId(hPkt, ref HighValue);
                return ((((ulong)HighValue) << 32) + LowValue);
#endif
            }
            set
            {
#if WIN64
                PktSetId(hPkt, value);
#else
                uint LowValue, HighValue;
                LowValue = (uint)value;
                HighValue = (uint)(value >> 32);
                PktSetId(hPkt, LowValue, HighValue);
#endif
            }
        }

        /// <summary>
        /// Sets/Returns the time of the packet receiving.
        /// </summary>
        [Browsable(false)]
        public long TimeStamp
        {
            get
            {
#if WIN64
                return PktGetTimeStamp(hPkt);
#else
                uint LowValue; int HighValue = 0;
                LowValue = PktGetTimeStamp(hPkt, ref HighValue);
                return ((((long)HighValue) << 32) + LowValue);
#endif
            }
            set
            {
#if WIN64
                PktSetTimeStamp(hPkt,value);
#else
                uint LowValue; int HighValue;
                LowValue = (uint)value;
                HighValue = (int)(value >> 32);
                PktSetTimeStamp(hPkt, LowValue, HighValue);
#endif
            }
        }

        /// <summary>
        /// Sets/Returns the mark of the packet.
        /// </summary>
        [Browsable(false)]
        public uint Mark
        {
            get
            {
                return PktGetMark(hPkt);
            }
            set
            {
                PktSetMark(hPkt, value);
            }
        }

        #endregion

        #region HNPacket methods

        /// <summary>
        /// Creates the HNPacket object.
        /// </summary>
        /// <param name="MaxPacketSize"></param>
        /// <returns></returns>
        public IntPtr AllocatePacket(int MaxPacketSize)
        {
            return PktCreate(MaxPacketSize);
        }

        /// <summary>
        /// Destroys the HNPacket object.
        /// </summary>
        /// <param name="hPacket"></param>
        /// <returns></returns>
        public PSSDKRES FreePacket(IntPtr hPacket)
        {
            return (PSSDKRES)PktDestroy(hPacket);
        }

        /// <summary>
        /// Copies current packet to another one.
        /// </summary>
        /// <param name="hPacket"></param>
        /// <returns></returns>
        public int CopyToPacket(IntPtr hPacket)
        {
            return PktCopyPacketToPacket(hPacket, hPkt);
        }

        /// <summary>
        /// Copies arbitrary packet to the current one.
        /// </summary>
        /// <param name="hPacket"></param>
        /// <returns></returns>
        public int CopyFromPacket(IntPtr hPacket)
        {
            return PktCopyPacketToPacket(hPkt, hPacket);
        }

        /// <summary>
        /// Counts the IP packets checksum.
        /// </summary>
        /// <param name="pXData"></param>
        /// <param name="Length"></param>
        /// <returns></returns>
        public short InetCheckSum(IntPtr pXData, uint Length)
        {
            return PktInetCheckSum(pXData, Length);
        }

        /// <summary>
        /// Counts the TCP and UDP packets checksums.
        /// </summary>
        /// <param name="pPacket"></param>
        /// <param name="PacketLen"></param>
        /// <param name="Proto"></param>
        /// <param name="SrcIP"></param>
        /// <param name="DstIP"></param>
        /// <returns></returns>
        public short TransportCheckSum(IntPtr pPacket, int PacketLen, int Proto, int SrcIP, int DstIP)
        {
            return PktTransportCheckSum(pPacket, PacketLen, Proto, SrcIP, DstIP);
        }

        /// <summary>
        /// Creates an IP packet.
        /// </summary>
        /// <param name="pPacket"></param>
        /// <param name="PacketLen"></param>
        /// <param name="Proto"></param>
        /// <param name="SrcIP"></param>
        /// <param name="DstIP"></param>
        /// <returns></returns>
        public int IPGenerate(IntPtr pPacket, uint PacketLen, uint Proto, uint SrcIP, uint DstIP)
        {
            return PktIPGenerate(pPacket, PacketLen, Proto, SrcIP, DstIP);
        }

        /// <summary>
        /// Creates a UDP packet
        /// </summary>
        /// <param name="pUDPPacket"></param>
        /// <param name="PacketLen"></param>
        /// <param name="SrcPort"></param>
        /// <param name="DstPort"></param>
        /// <returns></returns>
        public int UDPGenerate(IntPtr pUDPPacket, int PacketLen, short SrcPort, short DstPort)
        {
            return PktUDPGenerate(pUDPPacket, PacketLen, SrcPort, DstPort);
        }

        /// <summary>
        /// Creates a TCP packet.
        /// </summary>
        /// <param name="pTCPPacket"></param>
        /// <param name="SrcPort"></param>
        /// <param name="DstPort"></param>
        /// <param name="Seq"></param>
        /// <param name="Ack"></param>
        /// <param name="Win"></param>
        /// <returns></returns>
        public int TCPGenerate(IntPtr pTCPPacket, short SrcPort, short DstPort, int Seq, int Ack, short Win)
        {
            return PktTCPGenerate(pTCPPacket, SrcPort, DstPort, Seq, Ack, Win);
        }

        #endregion
    }
}
See also:HNPacket, All wrappers in one ZIP archive