 |
|
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
}
}
|