 |
|
Packet Sniffer SDK DLL Edition
HNLBAdapter wrapper for C# | | Previous Next |
File: HNLBAdapter.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 HNLBAdapter.
/// </summary>
public partial class HNLBAdapter : Component
{
#region DLL exports
/// <summary>
/// Creates an HNLBAdapter object.
/// </summary>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpCreate")]
private static extern IntPtr LbAdpCreate();
/// <summary>
/// Destroys the HNLBAdapter object.
/// </summary>
/// <param name="hLbAdp"></param>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpDestroy")]
private static extern int LbAdpDestroy(IntPtr hLbAdp);
/// <summary>
/// Opens loopback adapter for TCP/UDP traffic capturing and tracking of TCP sessions.
/// </summary>
/// <param name="hLbAdp"></param>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpOpenAdapter")]
private static extern int LbAdpOpenAdapter(IntPtr hLbAdp);
/// <summary>
/// Closes the loopback adapter, stops receiving of the local traffic and sessions tracking.
/// </summary>
/// <param name="hLbAdp"></param>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpCloseAdapter")]
private static extern int LbAdpCloseAdapter(IntPtr hLbAdp);
/// <summary>
/// Returns the time of the latest opening of the loopback adapter.
/// </summary>
/// <param name="hLbAdp"></param>
/// <param name="Hivariable"></param>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpGetOpenTime")]
#if WIN64
private static extern long LbAdpGetOpenTime(IntPtr hLbAdp);
#else
private static extern uint LbAdpGetOpenTime(IntPtr hLbAdp, ref int Hivariable);
#endif
/// <summary>
/// Returns the process name by the process identifier (PID).
/// </summary>
/// <param name="ProcessID"></param>
/// <param name="Name"></param>
/// <param name="Size"></param>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpGetProcessNameByIdW", CharSet = CharSet.Unicode)]
private static extern int LbAdpGetProcessNameByID(int ProcessID, StringBuilder Name, int Size);
/// <summary>
/// Returns the exefile name by the process identifier (PID).
/// </summary>
/// <param name="ProcessID"></param>
/// <param name="Name"></param>
/// <param name="Size"></param>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpGetProcessFileByIdW", CharSet = CharSet.Unicode)]
private static extern int LbAdpGetProcessFileByID(int ProcessID, StringBuilder Name, int Size);
/// <summary>
/// Sets the OnTcpPacketReceive event.
/// </summary>
/// <param name="hLbAdp"></param>
/// <param name="pfOnTcpPacketReceive"></param>
/// <param name="Param"></param>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpSetOnTcpPacketRecv")]
private static extern IntPtr LbAdpSetOnTcpPacketRecv(IntPtr hLbAdp, CallBackOnTcpPktReceive pfOnTcpPacketReceive, IntPtr Param);
/// <summary>
/// Sets the OnUdpPacketReceive event.
/// </summary>
/// <param name="hLbAdp"></param>
/// <param name="pfOnUdpPacketReceive"></param>
/// <param name="Param"></param>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpSetOnUdpPacketRecv")]
private static extern IntPtr LbAdpSetOnUdpPacketRecv(IntPtr hLbAdp, CallBackOnUdpPktReceive pfOnUdpPacketReceive, IntPtr Param);
/// <summary>
/// Sets the OnThreadBegin event.
/// </summary>
/// <param name="hLbAdp"></param>
/// <param name="pfOnThreadBegin"></param>
/// <param name="Param"></param>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpSetOnThreadBegin")]
private static extern IntPtr LbAdpSetOnThreadBegin(IntPtr hLbAdp, CallBackOnThreadBegin pfOnThreadBegin, IntPtr Param);
/// <summary>
/// Sets the OnThreadEnd event.
/// </summary>
/// <param name="hLbAdp"></param>
/// <param name="pfOnThreadEnd"></param>
/// <param name="Param"></param>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpSetOnThreadEnd")]
private static extern IntPtr LbAdpSetOnThreadEnd(IntPtr hLbAdp, CallBackOnThreadEnd pfOnThreadEnd, IntPtr Param);
/// <summary>
/// Sets the OnConnect event.
/// </summary>
/// <param name="hLbAdp"></param>
/// <param name="pfOnConnect"></param>
/// <param name="Param"></param>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpSetOnConnect")]
private static extern IntPtr LbAdpSetOnConnect(IntPtr hLbAdp, CallBackOnConnect pfOnConnect, IntPtr Param);
/// <summary>
/// Sets the OnDisconnect event.
/// </summary>
/// <param name="hLbAdp"></param>
/// <param name="pfOnDisconnect"></param>
/// <param name="Param"></param>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpSetOnDisconnect")]
private static extern IntPtr LbAdpSetOnDisconnect(IntPtr hLbAdp, CallBackOnDisconnect pfOnDisconnect, IntPtr Param);
/// <summary>
/// Get TCP traffic capture flag.
/// </summary>
/// <param name="hLbAdp"></param>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpGetCaptureTcp")]
private static extern bool LbAdpGetCaptureTcp(IntPtr hLbAdp);
/// <summary>
/// Change TCP traffic capture flag.
/// </summary>
/// <param name="hLbAdp"></param>
/// <param name="bCaptureTcp"></param>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpSetCaptureTcp")]
private static extern bool LbAdpSetCaptureTcp(IntPtr hLbAdp, bool bCaptureTcp);
/// <summary>
/// Get UDP traffic capture flag.
/// </summary>
/// <param name="hLbAdp"></param>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpGetCaptureUdp")]
private static extern bool LbAdpGetCaptureUdp(IntPtr hLbAdp);
/// <summary>
/// Change UDP traffic capture flag.
/// </summary>
/// <param name="hLbAdp"></param>
/// <param name="bCaptureUdp"></param>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpSetCaptureUdp")]
private static extern bool LbAdpSetCaptureUdp(IntPtr hLbAdp, bool bCaptureUdp);
/// <summary>
/// Return TCP ports filters using flag value.
/// </summary>
/// <param name="hLbAdp"></param>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpGetUseTcpPortFilters")]
private static extern bool LbAdpGetUseTcpPortFilters(IntPtr hLbAdp);
/// <summary>
/// Change TCP ports filters using flag.
/// </summary>
/// <param name="hLbAdp"></param>
/// <param name="bUseTcpPortFilters"></param>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpSetUseTcpPortFilters")]
private static extern bool LbAdpSetUseTcpPortFilters(IntPtr hLbAdp, bool bUseTcpPortFilters);
/// <summary>
/// Return UDP ports filters using flag value.
/// </summary>
/// <param name="hLbAdp"></param>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpGetUseUdpPortFilters")]
private static extern bool LbAdpGetUseUdpPortFilters(IntPtr hLbAdp);
/// <summary>
/// Change UDP ports filters using flag.
/// </summary>
/// <param name="hLbAdp"></param>
/// <param name="bUseUdpPortFilters"></param>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpSetUseUdpPortFilters")]
private static extern bool LbAdpSetUseUdpPortFilters(IntPtr hLbAdp, bool bUseUdpPortFilters);
/// <summary>
/// Add a TCP port filter.
/// </summary>
/// <param name="hLbAdp"></param>
/// <param name="Port"></param>
/// <param name="PortType"></param>
[DllImport("pssdk.dll", EntryPoint = "LbAdpAddFilterTcpPort")]
private static extern void LbAdpAddFilterTcpPort(IntPtr hLbAdp, ushort Port, int PortType);
/// <summary>
/// Remove a TCP port filter.
/// </summary>
/// <param name="hLbAdp"></param>
/// <param name="Port"></param>
[DllImport("pssdk.dll", EntryPoint = "LbAdpRemoveFilterTcpPort")]
private static extern void LbAdpRemoveFilterTcpPort(IntPtr hLbAdp, ushort Port);
/// <summary>
/// Remove all TCP port filters.
/// </summary>
/// <param name="hLbAdp"></param>
[DllImport("pssdk.dll", EntryPoint = "LbAdpRemoveAllTcpPortFilters")]
private static extern void LbAdpRemoveAllTcpPortFilters(IntPtr hLbAdp);
/// <summary>
/// Add a UDP port filter.
/// </summary>
/// <param name="hLbAdp"></param>
/// <param name="Port"></param>
/// <param name="PortType"></param>
[DllImport("pssdk.dll", EntryPoint = "LbAdpAddFilterUdpPort")]
private static extern void LbAdpAddFilterUdpPort(IntPtr hLbAdp, ushort Port, int PortType);
/// <summary>
/// Remove a UDP port filter.
/// </summary>
/// <param name="hLbAdp"></param>
/// <param name="Port"></param>
[DllImport("pssdk.dll", EntryPoint = "LbAdpRemoveFilterUdpPort")]
private static extern void LbAdpRemoveFilterUdpPort(IntPtr hLbAdp, ushort Port);
/// <summary>
/// Remove all UDP port filters.
/// </summary>
/// <param name="hLbAdp"></param>
[DllImport("pssdk.dll", EntryPoint = "LbAdpRemoveAllUdpPortFilters")]
private static extern void LbAdpRemoveAllUdpPortFilters(IntPtr hLbAdp);
/// <summary>
/// Returns the handle of the Receive HNQueue object.
/// </summary>
/// <param name="hLbAdp"></param>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpGetReceiveQueue")]
private static extern IntPtr LbAdpGetReceiveQueue(IntPtr hLbAdp);
/// <summary>
/// Sets the handle of the Receive HNQueue object.
/// </summary>
/// <param name="hLbAdp"></param>
/// <param name="hQue"></param>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpSetReceiveQueue")]
private static extern IntPtr LbAdpSetReceiveQueue(IntPtr hLbAdp, IntPtr hQue);
/// <summary>
/// Returns the handle of the HNUserFilter object.
/// </summary>
/// <param name="hLbAdp"></param>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpGetUserFilter")]
private static extern IntPtr LbAdpGetUserFilter(IntPtr hLbAdp);
/// <summary>
/// Sets the handle of the HNUserFilter object.
/// </summary>
/// <param name="hLbAdp"></param>
/// <param name="hUserFilter"></param>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpSetUserFilter")]
private static extern IntPtr LbAdpSetUserFilter(IntPtr hLbAdp, IntPtr hUserFilter);
/// <summary>
/// Returns the status flag of the user-settable packet filter using.
/// </summary>
/// <param name="hLbAdp"></param>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpGetUserFilterActive")]
private static extern bool LbAdpGetUserFilterActive(IntPtr hLbAdp);
/// <summary>
/// Sets the status flag of the user-settable packet filter using.
/// </summary>
/// <param name="hLbAdp"></param>
/// <param name="bActiveBpf"></param>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpSetUserFilterActive")]
private static extern bool LbAdpSetUserFilterActive(IntPtr hLbAdp, bool bActiveBpf);
/// <summary>
/// Returns the status flag of the FastBPF using.
/// </summary>
/// <param name="hLbAdp"></param>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpGetUseFastUserFilter")]
private static extern bool LbAdpGetUseFastUserFilter(IntPtr hLbAdp);
/// <summary>
/// Sets the status flag of the FastBPF using.
/// </summary>
/// <param name="hLbAdp"></param>
/// <param name="bUseFastBpf"></param>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpSetUseFastUserFilter")]
private static extern bool LbAdpSetUseFastUserFilter(IntPtr hLbAdp, bool bUseFastBpf);
/// <summary>
/// Returns the maximal number of the threads allowed to be created for work with the loopback adapter.
/// </summary>
/// <param name="hLbAdp"></param>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpGetMaxThreadCount")]
private static extern int LbAdpGetMaxThreadCount(IntPtr hLbAdp);
/// <summary>
/// Returns the number of threads created for work with the loopback adapter.
/// </summary>
/// <param name="hLbAdp"></param>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpGetThreadCount")]
private static extern int LbAdpGetThreadCount(IntPtr hLbAdp);
/// <summary>
/// Sets the number of threads created for work with the loopback adapter.
/// </summary>
/// <param name="hLbAdp"></param>
/// <param name="ThreadCount"></param>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpSetThreadCount")]
private static extern int LbAdpSetThreadCount(IntPtr hLbAdp, int ThreadCount);
/// <summary>
/// Returns the number of the packets received by the Packet Sniffer SDK internal driver from OS.
/// </summary>
/// <param name="hLbAdp"></param>
/// <param name="HiValue"></param>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpGetRecvCount")]
#if WIN64
private static extern ulong LbAdpGetRecvCount(IntPtr hLbAdp);
#else
private static extern uint LbAdpGetRecvCount(IntPtr hLbAdp, ref uint HiValue);
#endif
/// <summary>
/// Returns the number of the packets passed by the user-settable packet filter.
/// </summary>
/// <param name="hLbAdp"></param>
/// <param name="HiValue"></param>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpGetAcceptCount")]
#if WIN64
private static extern ulong LbAdpGetAcceptCount(IntPtr hLbAdp);
#else
private static extern uint LbAdpGetAcceptCount(IntPtr hLbAdp, ref uint HiValue);
#endif
/// <summary>
/// Returns the number of packets rejected by the user-settable packet filter.
/// </summary>
/// <param name="hLbAdp"></param>
/// <param name="HiValue"></param>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpGetRejectCount")]
#if WIN64
private static extern ulong LbAdpGetRejectCount(IntPtr hLbAdp);
#else
private static extern uint LbAdpGetRejectCount(IntPtr hLbAdp, ref uint HiValue);
#endif
/// <summary>
/// Returns the number of the packets transferred to the application.
/// </summary>
/// <param name="hLbAdp"></param>
/// <param name="HiValue"></param>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpGetProcessCount")]
#if WIN64
private static extern ulong LbAdpGetProcessCount(IntPtr hLbAdp);
#else
private static extern uint LbAdpGetProcessCount(IntPtr hLbAdp, ref uint HiValue);
#endif
/// <summary>
/// Returns the number of the packets lost by the Packet Sniffer SDK internal driver.
/// </summary>
/// <param name="hLbAdp"></param>
/// <param name="HiValue"></param>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpGetLostCount")]
#if WIN64
private static extern ulong LbAdpGetLostCount(IntPtr hLbAdp);
#else
private static extern uint LbAdpGetLostCount(IntPtr hLbAdp, ref uint HiValue);
#endif
/// <summary>
/// Updates the user-settable filter statistics synchronously.
/// </summary>
/// <param name="hLbAdp"></param>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpUpdateUserStatistics")]
private static extern int LbAdpUpdateUserStatistics(IntPtr hLbAdp);
/// <summary>
/// Sets the OnPacketReceive event.
/// </summary>
/// <param name="hLbAdp"></param>
/// <param name="pfOnPacketReceive"></param>
/// <param name="Param"></param>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpSetOnPacketRecv")]
private static extern IntPtr LbAdpSetOnPacketRecv(IntPtr hLbAdp, CallBackOnPacketReceive pfOnPacketReceive, IntPtr Param);
/// <summary>
/// Returns the status flag of the EthEmulation using.
/// </summary>
/// <param name="hLbAdp"></param>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpGetEthEmulation")]
private static extern bool LbAdpGetEthEmulation(IntPtr hLbAdp);
/// <summary>
/// Sets the status flag of the EthEmulation using.
/// </summary>
/// <param name="hLbAdp"></param>
/// <param name="bEthEmulation"></param>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpSetEthEmulation")]
private static extern bool LbAdpSetEthEmulation(IntPtr hLbAdp, bool bEthEmulation);
/// <summary>
/// Returns the status flag of the CalcCheckSum using.
/// </summary>
/// <param name="hLbAdp"></param>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpGetCalcCheckSum")]
private static extern bool LbAdpGetCalcCheckSum(IntPtr hLbAdp);
/// <summary>
/// Sets the status flag of the CalcCheckSum using.
/// </summary>
/// <param name="hLbAdp"></param>
/// <param name="bCalcCheckSum"></param>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpSetCalcCheckSum")]
private static extern bool LbAdpSetCalcCheckSum(IntPtr hLbAdp, bool bCalcCheckSum);
/// <summary>
/// Returns flag status of using High Precision Time.
/// </summary>
/// <param name="hLbAdp"></param>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpGetUseHighPrecisionTime")]
private static extern bool LbAdpGetUseHighPrecisionTime(IntPtr hLbAdp);
/// <summary>
/// Sets flag status of using High Precision Time.
/// </summary>
/// <param name="hLbAdp"></param>
/// <param name="bUseHighPrecision"></param>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpSetUseHighPrecisionTime")]
private static extern bool LbAdpSetUseHighPrecisionTime(IntPtr hLbAdp, bool bUseHighPrecision);
/// <summary>
/// Return the size of the packets pool which is used by PSSDK for transfering captured packets from the internal driver to application and back.
/// </summary>
/// <param name="hAdp"></param>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpGetPacketPool")]
private static extern uint LbAdpGetPacketPool(IntPtr hLbAdp);
/// <summary>
/// Set the size of the packets pool which is used by PSSDK for transfering captured packets from the internal driver to application and back.
/// </summary>
/// <param name="hAdp"></param>
/// <param name="dwPacketPool"></param>
/// <returns></returns>
[DllImport("pssdk.dll", EntryPoint = "LbAdpSetPacketPool")]
private static extern uint LbAdpSetPacketPool(IntPtr hLbAdp, uint dwPacketPool);
#endregion
#region HNLBAdapter events
/// <summary>
/// CallBack OnThreadBegin.
/// </summary>
/// <param name="Param"></param>
/// <param name="ThParam"></param>
private delegate void CallBackOnThreadBegin(IntPtr Param, ref IntPtr ThParam);
/// <summary>
/// CallBack OnThreadEnd.
/// </summary>
/// <param name="Param"></param>
/// <param name="ThParam"></param>
private delegate void CallBackOnThreadEnd(IntPtr Param, IntPtr ThParam);
/// <summary>
/// CallBack OnPacketReceive.
/// </summary>
/// <param name="Param"></param>
/// <param name="ThParam"></param>
/// <param name="hPacket"></param>
/// <param name="pPacketData"></param>
/// <param name="IncPacketSize"></param>
private delegate void CallBackOnPacketReceive(IntPtr Param, IntPtr ThParam, IntPtr hPacket, IntPtr pPacketData, uint IncPacketSize);
/// <summary>
/// CallBack OnConnect.
/// </summary>
/// <param name="Param"></param>
/// <param name="ThParam"></param>
/// <param name="hLBSession"></param>
/// <param name="hLBHosts"></param>
/// <param name="Direction"></param>
private delegate void CallBackOnConnect(IntPtr Param, IntPtr ThParam, IntPtr hLBSession, IntPtr hLBHosts, int Direction);
/// <summary>
/// CallBack OnDisconnect.
/// </summary>
/// <param name="Param"></param>
/// <param name="ThParam"></param>
/// <param name="hLBSession"></param>
/// <param name="Direction"></param>
private delegate void CallBackOnDisconnect(IntPtr Param, IntPtr ThParam, IntPtr hLBSession, int Direction);
/// <summary>
/// CallBack OnTcpPacketReceive.
/// </summary>
/// <param name="Param"></param>
/// <param name="ThParam"></param>
/// <param name="hLBSession"></param>
/// <param name="Direction"></param>
/// <param name="Pid"></param>
/// <param name="hPacket"></param>
/// <param name="pData"></param>
/// <param name="DataLength"></param>
private delegate void CallBackOnTcpPktReceive(IntPtr Param, IntPtr ThParam, IntPtr hLBSession, int Direction, int Pid, IntPtr hPacket, IntPtr pData, uint DataLength);
/// <summary>
/// CallBack OnUdpPacketReceive.
/// </summary>
/// <param name="Param"></param>
/// <param name="ThParam"></param>
/// <param name="hLBHosts"></param>
/// <param name="Direction"></param>
/// <param name="Pid"></param>
/// <param name="hPacket"></param>
/// <param name="pData"></param>
/// <param name="DataLength"></param>
private delegate void CallBackOnUdpPktReceive(IntPtr Param, IntPtr ThParam, IntPtr hLBHosts, int Direction, int Pid, IntPtr hPacket, IntPtr pData, uint DataLength);
/// <summary>
/// CallBack variable OnThreadBegin.
/// </summary>
private CallBackOnThreadBegin pfOnThreadBegin;
/// <summary>
/// CallBack variable OnThreadEnd.
/// </summary>
private CallBackOnThreadEnd pfOnThreadEnd;
/// <summary>
/// CallBack variable OnPacketReceive.
/// </summary>
private CallBackOnPacketReceive pfOnPacketReceive;
/// <summary>
/// CallBack variable OnConnect.
/// </summary>
private CallBackOnConnect pfOnConnect;
/// <summary>
/// CallBack variable OnDisconnect.
/// </summary>
private CallBackOnDisconnect pfOnDisconnect;
/// <summary>
/// CallBack variable OnTcpPacketReceive.
/// </summary>
private CallBackOnTcpPktReceive pfOnTcpPktReceive;
/// <summary>
/// CallBack variable OnUdpPacketReceive.
/// </summary>
private CallBackOnUdpPktReceive pfOnUdpPktReceive;
/// <summary>
/// OnThreadBegin event Handler.
/// </summary>
public event OnThreadBeginEventHandler OnThreadBegin;
/// <summary>
/// OnThreadEnd event Handler.
/// </summary>
public event OnThreadEndEventHandler OnThreadEnd;
/// <summary>
/// OnPacketReceive event handler.
/// </summary>
public event OnPacketReceiveEventHandler OnPacketReceive;
/// <summary>
/// OnConnect event Handler.
/// </summary>
public event OnConnectEventHandler OnConnect;
/// <summary>
/// OnDisconnect event Handler.
/// </summary>
public event OnDisconnectEventHandler OnDisconnect;
/// <summary>
/// OnTcpPktReceive event Handler.
/// </summary>
public event OnTcpPktReceiveEventHandler OnTcpPktReceive;
/// <summary>
/// OnUdpPktReceive event Handler.
/// </summary>
public event OnUdpPktReceiveEventHandler OnUdpPktReceive;
#endregion
/// <summary>
/// IntPtr of the HNLBAdapter object
/// </summary>
private IntPtr hLbAdp = IntPtr.Zero;
/// <summary>
/// User (bpf) filter.
/// </summary>
private HNUserFilter userFilter = null;
/// <summary>
/// Receive packet queue.
/// </summary>
private HNQueue receiveQueue = null;
/// <summary>
/// Creates an HNLBAdapter object.
/// </summary>
public HNLBAdapter()
{
InitializeComponent();
hLbAdp = LbAdpCreate();
if (hLbAdp != IntPtr.Zero)
{
pfOnThreadBegin = new CallBackOnThreadBegin(this.DoOnThreadBegin);
LbAdpSetOnThreadBegin(hLbAdp, pfOnThreadBegin, IntPtr.Zero);
pfOnThreadEnd = new CallBackOnThreadEnd(this.DoOnThreadEnd);
LbAdpSetOnThreadEnd(hLbAdp, pfOnThreadEnd, IntPtr.Zero);
pfOnPacketReceive = new CallBackOnPacketReceive(this.DoOnPacketReceive);
LbAdpSetOnPacketRecv(hLbAdp, pfOnPacketReceive, IntPtr.Zero);
pfOnConnect = new CallBackOnConnect(this.DoOnConnect);
LbAdpSetOnConnect(hLbAdp, pfOnConnect, IntPtr.Zero);
pfOnDisconnect = new CallBackOnDisconnect(this.DoOnDisconnect);
LbAdpSetOnDisconnect(hLbAdp, pfOnDisconnect, IntPtr.Zero);
pfOnTcpPktReceive = new CallBackOnTcpPktReceive(this.DoOnTcpPktReceive);
LbAdpSetOnTcpPacketRecv(hLbAdp, pfOnTcpPktReceive, IntPtr.Zero);
pfOnUdpPktReceive = new CallBackOnUdpPktReceive(this.DoOnUdpPktReceive);
LbAdpSetOnUdpPacketRecv(hLbAdp, pfOnUdpPktReceive, IntPtr.Zero);
}
}
/// <summary>
/// Destroys the HNLBAdapter object.
/// </summary>
~HNLBAdapter()
{
if (hLbAdp != IntPtr.Zero) LbAdpDestroy(hLbAdp);
}
#region HNLBAdapter properties
/// <summary>
/// Checks if the HNLBAdapter object has been created correctly.
/// </summary>
[Browsable(false)]
public bool IsValid
{
get
{
return (hLbAdp != IntPtr.Zero);
}
}
/// <summary>
/// Sets/Returns the handle of the Receive HNQueue object.
/// </summary>
public HNQueue ReceiveQueue
{
get
{
if (LbAdpGetReceiveQueue(hLbAdp) != IntPtr.Zero)
{
return receiveQueue;
}
else
{
receiveQueue = null;
return receiveQueue;
}
}
set
{
if (value != null)
{
receiveQueue = value;
LbAdpSetReceiveQueue(hLbAdp, receiveQueue.Handle);
}
else
{
LbAdpSetReceiveQueue(hLbAdp, IntPtr.Zero);
}
}
}
/// <summary>
/// Sets/Returns the status flag of the EthEmulation using.
/// </summary>
public bool EthEmulation
{
get
{
return LbAdpGetEthEmulation(hLbAdp);
}
set
{
LbAdpSetEthEmulation(hLbAdp, value);
}
}
/// <summary>
/// Sets/Returns the status flag of the CalcCheckSum using.
/// </summary>
public bool CalcCheckSum
{
get
{
return LbAdpGetCalcCheckSum(hLbAdp);
}
set
{
LbAdpSetCalcCheckSum(hLbAdp, value);
}
}
/// <summary>
/// Sets/Returns the handle of the HNUserFilter object.
/// </summary>
[Browsable(false)]
public HNUserFilter UserFilter
{
get
{
if (LbAdpGetUserFilter(hLbAdp) != IntPtr.Zero)
{
return userFilter;
}
else
{
userFilter = null;
return userFilter;
}
}
set
{
if (value != null)
{
userFilter = value;
LbAdpSetUserFilter(hLbAdp, userFilter.Handle);
}
else
{
LbAdpSetUserFilter(hLbAdp, IntPtr.Zero);
}
}
}
/// <summary>
/// Sets/Returns the status flag of the user-settable packet filter using.
/// </summary>
public bool UserFilterActive
{
get
{
return LbAdpGetUserFilterActive(hLbAdp);
}
set
{
LbAdpSetUserFilterActive(hLbAdp, value);
}
}
/// <summary>
/// Sets/Returns the status flag of the FastBPF using.
/// </summary>
public bool UseFastUserFilter
{
get
{
return LbAdpGetUseFastUserFilter(hLbAdp);
}
set
{
LbAdpSetUseFastUserFilter(hLbAdp, value);
}
}
/// <summary>
/// Sets/Returns the status flag of the High Precision Time using.
/// </summary>
public bool UseHighPrecisionTime
{
get
{
return LbAdpGetUseHighPrecisionTime(hLbAdp);
}
set
{
LbAdpSetUseHighPrecisionTime(hLbAdp, value);
}
}
/// <summary>
/// Returns the maximal number of the threads allowed to be created for work with the loopback adapter.
/// </summary>
public int MaxThreadCount
{
get
{
return LbAdpGetMaxThreadCount(hLbAdp);
}
}
/// <summary>
/// Sets/Returns the number of threads created for work with the loopback adapter.
/// </summary>
public int ThreadCount
{
get
{
return LbAdpGetThreadCount(hLbAdp);
}
set
{
LbAdpSetThreadCount(hLbAdp, value);
}
}
/// <summary>
/// Returns the number of the packets received by the Packet Sniffer SDK internal driver from OS.
/// </summary>
[Browsable(false)]
public uint RecvCount32
{
get
{
#if WIN64
return (uint)LbAdpGetRecvCount(hLbAdp);
#else
uint HighValue = 0;
return LbAdpGetRecvCount(hLbAdp, ref HighValue);
#endif
}
}
/// <summary>
/// Returns the number of the packets received by the Packet Sniffer SDK internal driver from OS.
/// </summary>
[Browsable(false)]
public ulong RecvCount64
{
get
{
#if WIN64
return LbAdpGetRecvCount(hLbAdp);
#else
uint LowValue = 0, HighValue = 0;
LowValue = LbAdpGetRecvCount(hLbAdp, ref HighValue);
return ((((ulong)HighValue) << 32) + LowValue);
#endif
}
}
/// <summary>
/// Returns the number of the packets passed by the user-settable packet filter.
/// </summary>
[Browsable(false)]
public uint AcceptCount32
{
get
{
#if WIN64
return (uint)LbAdpGetAcceptCount(hLbAdp);
#else
uint HighValue = 0;
return LbAdpGetAcceptCount(hLbAdp, ref HighValue);
#endif
}
}
/// <summary>
/// Returns the number of the packets passed by the user-settable packet filter.
/// </summary>
[Browsable(false)]
public ulong AcceptCount64
{
get
{
#if WIN64
return LbAdpGetAcceptCount(hLbAdp);
#else
uint LowValue = 0, HighValue = 0;
LowValue = LbAdpGetAcceptCount(hLbAdp, ref HighValue);
return ((((ulong)HighValue) << 32) + LowValue);
#endif
}
}
/// <summary>
/// Returns the number of packets rejected by the user-settable packet filter.
/// </summary>
[Browsable(false)]
public uint RejectCount32
{
get
{
#if WIN64
return (uint)LbAdpGetRejectCount(hLbAdp);
#else
uint HighValue = 0;
return LbAdpGetRejectCount(hLbAdp, ref HighValue);
#endif
}
}
/// <summary>
/// Returns the number of packets rejected by the user-settable packet filter.
/// </summary>
[Browsable(false)]
public ulong RejectCount64
{
get
{
#if WIN64
return LbAdpGetRejectCount(hLbAdp);
#else
uint LowValue = 0, HighValue = 0;
LowValue = LbAdpGetRejectCount(hLbAdp, ref HighValue);
return ((((ulong)HighValue) << 32) + LowValue);
#endif
}
}
/// <summary>
/// Returns the number of the packets transferred to the application.
/// </summary>
[Browsable(false)]
public uint ProcessCount32
{
get
{
#if WIN64
return (uint)LbAdpGetProcessCount(hLbAdp);
#else
uint HighValue = 0;
return LbAdpGetProcessCount(hLbAdp, ref HighValue);
#endif
}
}
/// <summary>
/// Returns the number of the packets transferred to the application.
/// </summary>
[Browsable(false)]
public ulong ProcessCount64
{
get
{
#if WIN64
return LbAdpGetProcessCount(hLbAdp);
#else
uint LowValue = 0, HighValue = 0;
LowValue = LbAdpGetProcessCount(hLbAdp, ref HighValue);
return ((((ulong)HighValue) << 32) + LowValue);
#endif
}
}
/// <summary>
/// Returns the number of the packets lost by the Packet Sniffer SDK internal driver.
/// </summary>
[Browsable(false)]
public uint LostCount32
{
get
{
#if WIN64
return (uint)LbAdpGetLostCount(hLbAdp);
#else
uint HighValue = 0;
return LbAdpGetLostCount(hLbAdp, ref HighValue);
#endif
}
}
/// <summary>
/// Returns the number of the packets lost by the Packet Sniffer SDK internal driver.
/// </summary>
[Browsable(false)]
public ulong LostCount64
{
get
{
#if WIN64
return LbAdpGetLostCount(hLbAdp);
#else
uint LowValue = 0, HighValue = 0;
LowValue = LbAdpGetLostCount(hLbAdp, ref HighValue);
return ((((ulong)HighValue) << 32) + LowValue);
#endif
}
}
/// <summary>
/// Returns the time of the latest opening of the loopback adapter.
/// </summary>
[Browsable(false)]
public long OpenTime
{
get
{
#if WIN64
return LbAdpGetOpenTime(hLbAdp);
#else
uint LowValue = 0; int HighValue = 0;
LowValue = LbAdpGetOpenTime(hLbAdp, ref HighValue);
return ((((long)HighValue) << 32) + LowValue);
#endif
}
}
/// <summary>
/// Set/Get TCP traffic capture flag.
/// </summary>
public bool CaptureTcp
{
get
{
return LbAdpGetCaptureTcp(hLbAdp);
}
set
{
LbAdpSetCaptureTcp(hLbAdp, value);
}
}
/// <summary>
/// Set/Get UDP traffic capture flag.
/// </summary>
public bool CaptureUdp
{
get
{
return LbAdpGetCaptureUdp(hLbAdp);
}
set
{
LbAdpSetCaptureUdp(hLbAdp, value);
}
}
/// <summary>
/// Set/Get TCP ports filters using flag value.
/// </summary>
public bool UseTcpPortFilters
{
get
{
return LbAdpGetUseTcpPortFilters(hLbAdp);
}
set
{
LbAdpSetUseTcpPortFilters(hLbAdp, value);
}
}
/// <summary>
/// Set/Get UDP ports filters using flag value.
/// </summary>
public bool UseUdpPortFilters
{
get
{
return LbAdpGetUseUdpPortFilters(hLbAdp);
}
set
{
LbAdpSetUseUdpPortFilters(hLbAdp, value);
}
}
/// <summary>
/// Sets/Returns the size of the packets pool which is used by PSSDK for transfering captured packets from the internal driver to application and back.
/// </summary>
public uint PacketPool
{
get
{
return LbAdpGetPacketPool(hLbAdp);
}
set
{
LbAdpSetPacketPool(hLbAdp, value);
}
}
#endregion
#region HNLBAdapter methods
/// <summary>
/// Opens loopback adapter for TCP/UDP traffic capturing and tracking of TCP sessions.
/// </summary>
/// <returns></returns>
public PSSDKRES OpenAdapter()
{
return (PSSDKRES)LbAdpOpenAdapter(hLbAdp);
}
/// <summary>
/// Closes the loopback adapter, stops receiving of the local traffic and sessions tracking.
/// </summary>
/// <returns></returns>
public PSSDKRES CloseAdapter()
{
return (PSSDKRES)LbAdpCloseAdapter(hLbAdp);
}
/// <summary>
/// Updates the user-settable filter statistics synchronously.
/// </summary>
/// <returns></returns>
public PSSDKRES UpdateUserStatistics()
{
return (PSSDKRES)LbAdpUpdateUserStatistics(hLbAdp);
}
/// <summary>
/// Returns the process name by the process identifier (PID).
/// </summary>
/// <param name="ProcessID"></param>
/// <param name="Name"></param>
/// <returns></returns>
public PSSDKRES Get_ProcessNameByID(int ProcessID, ref string Name)
{
StringBuilder StrBuf = new StringBuilder(260);
int Res = LbAdpGetProcessNameByID(ProcessID, StrBuf, StrBuf.Capacity);
Name = StrBuf.ToString();
return (PSSDKRES)Res;
}
/// <summary>
/// Returns the exefile name by the process identifier (PID).
/// </summary>
/// <param name="ProcessID"></param>
/// <param name="Name"></param>
/// <returns></returns>
public PSSDKRES Get_ProcessFileByID(int ProcessID, ref string Name)
{
StringBuilder StrBuf = new StringBuilder(260);
int Res = LbAdpGetProcessFileByID(ProcessID, StrBuf, StrBuf.Capacity);
Name = StrBuf.ToString();
return (PSSDKRES)Res;
}
/// <summary>
/// Add a TCP port filter.
/// </summary>
/// <param name="Port"></param>
/// <param name="PortType"></param>
public void AddFilterTcpPort(ushort Port, HNLBPortFilter PortType)
{
LbAdpAddFilterTcpPort(hLbAdp, Port, (int)PortType);
}
/// <summary>
/// Remove a TCP port filter.
/// </summary>
/// <param name="Port"></param>
public void RemoveFilterTcpPort(ushort Port)
{
LbAdpRemoveFilterTcpPort(hLbAdp, Port);
}
/// <summary>
/// Remove all TCP port filters.
/// </summary>
public void RemoveAllTcpPortFilters()
{
LbAdpRemoveAllTcpPortFilters(hLbAdp);
}
/// <summary>
/// Add a UDP port filter.
/// </summary>
/// <param name="Port"></param>
/// <param name="PortType"></param>
public void AddFilterUdpPort(ushort Port, HNLBPortFilter PortType)
{
LbAdpAddFilterUdpPort(hLbAdp, Port, (int)PortType);
}
/// <summary>
/// Remove a UDP port filter.
/// </summary>
/// <param name="Port"></param>
public void RemoveFilterUdpPort(ushort Port)
{
LbAdpRemoveFilterUdpPort(hLbAdp, Port);
}
/// <summary>
/// Remove all UDP port filters.
/// </summary>
public void RemoveAllUdpPortFilters()
{
LbAdpRemoveAllUdpPortFilters(hLbAdp);
}
#endregion
#region HNLBAdapter callbacks
/// <summary>
/// Tracks the creating of the internal component thread.
/// </summary>
/// <param name="Param"></param>
/// <param name="ThParam"></param>
private void DoOnThreadBegin(IntPtr Param, ref IntPtr ThParam)
{
if (OnThreadBegin != null)
OnThreadBegin(this, ref ThParam);
}
/// <summary>
/// Tracks the closing of the internal component thread.
/// </summary>
/// <param name="Param"></param>
/// <param name="ThParam"></param>
private void DoOnThreadEnd(IntPtr Param, IntPtr ThParam)
{
if (OnThreadEnd != null)
OnThreadEnd(this, ThParam);
}
/// <summary>
/// Occurs immediately after a packet has been received by the loopback adapter.
/// </summary>
/// <param name="Param"></param>
/// <param name="ThParam"></param>
/// <param name="hPacket"></param>
/// <param name="pPacketData"></param>
/// <param name="IncPacketSize"></param>
private void DoOnPacketReceive(IntPtr Param, IntPtr ThParam, IntPtr hPacket, IntPtr pPacketData, uint IncPacketSize)
{
if (OnPacketReceive != null)
OnPacketReceive(this, ThParam, hPacket, pPacketData, IncPacketSize);
}
/// <summary>
/// Fires on the new TCP session is created.
/// </summary>
/// <param name="Param"></param>
/// <param name="ThParam"></param>
/// <param name="hLBSession"></param>
/// <param name="hLBHosts"></param>
/// <param name="Direction"></param>
private void DoOnConnect(IntPtr Param, IntPtr ThParam, IntPtr hLBSession, IntPtr hLBHosts, int Direction)
{
if (OnConnect != null)
OnConnect(this, ThParam, hLBSession, hLBHosts, (HNLBDirection)Direction);
}
/// <summary>
/// Fires when TCP session is closed.
/// </summary>
/// <param name="Param"></param>
/// <param name="ThParam"></param>
/// <param name="hLBSession"></param>
/// <param name="Direction"></param>
private void DoOnDisconnect(IntPtr Param, IntPtr ThParam, IntPtr hLBSession, int Direction)
{
if (OnDisconnect != null)
OnDisconnect(this, ThParam, hLBSession, (HNLBDirection)Direction);
}
/// <summary>
/// Fires when an application receives or sends TCP data.
/// </summary>
/// <param name="Param"></param>
/// <param name="ThParam"></param>
/// <param name="hLBSession"></param>
/// <param name="Direction"></param>
/// <param name="Pid"></param>
/// <param name="hPacket"></param>
/// <param name="pData"></param>
/// <param name="DataLength"></param>
private void DoOnTcpPktReceive(IntPtr Param, IntPtr ThParam, IntPtr hLBSession, int Direction, int Pid, IntPtr hPacket, IntPtr pData, uint DataLength)
{
if (OnTcpPktReceive != null)
OnTcpPktReceive(this, ThParam, hLBSession, (HNLBDirection)Direction, Pid, hPacket, pData, DataLength);
}
/// <summary>
/// Fires when an application receives or sends UDP data.
/// </summary>
/// <param name="Param"></param>
/// <param name="ThParam"></param>
/// <param name="hLBHosts"></param>
/// <param name="Direction"></param>
/// <param name="Pid"></param>
/// <param name="hPacket"></param>
/// <param name="pData"></param>
/// <param name="DataLength"></param>
private void DoOnUdpPktReceive(IntPtr Param, IntPtr ThParam, IntPtr hLBHosts, int Direction, int Pid, IntPtr hPacket, IntPtr pData, uint DataLength)
{
if (OnUdpPktReceive != null)
OnUdpPktReceive(this, ThParam, hLBHosts, (HNLBDirection)Direction, Pid, hPacket, pData, DataLength);
}
#endregion
}
}
|