Advertisement
ZiJer

passthru modified

May 21st, 2017
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.81 KB | None | 0 0
  1.     class Program
  2.     {
  3.         static void Main(string[] args)
  4.         {
  5.             uint adapterIndex = 0;
  6.             IntPtr driverPtr = Ndisapi.OpenFilterDriver();
  7.             List<Packet> packets = new List<Packet>();
  8.             try
  9.             {
  10.                
  11.                 if (Ndisapi.IsDriverLoaded(driverPtr))
  12.                 {
  13.                     TCP_AdapterList adapters = new TCP_AdapterList();
  14.                     Ndisapi.GetTcpipBoundAdaptersInfo(driverPtr, ref adapters);
  15.  
  16.                     ADAPTER_MODE mode = new ADAPTER_MODE
  17.                     {
  18.                         dwFlags = Ndisapi.MSTCP_FLAG_SENT_TUNNEL /*| Ndisapi.MSTCP_FLAG_RECV_TUNNEL*/,
  19.                         hAdapterHandle = adapters.m_nAdapterHandle[adapterIndex]
  20.                     };
  21.  
  22.                     Ndisapi.SetAdapterMode(driverPtr, ref mode);
  23.  
  24.                     ManualResetEvent manualResetEvent = new ManualResetEvent(false);
  25.                     Ndisapi.SetPacketEvent(driverPtr, adapters.m_nAdapterHandle[adapterIndex], manualResetEvent.SafeWaitHandle);
  26.  
  27.                     ETH_REQUEST request = new ETH_REQUEST();
  28.                     INTERMEDIATE_BUFFER buffer = new INTERMEDIATE_BUFFER();
  29.                     IntPtr bufferPtr = Marshal.AllocHGlobal(Marshal.SizeOf(buffer));
  30.                     Win32Api.ZeroMemory(bufferPtr, Marshal.SizeOf(buffer));
  31.                    
  32.  
  33.                     try
  34.                     {
  35.                         request.hAdapterHandle = adapters.m_nAdapterHandle[adapterIndex];
  36.                         request.EthPacket.Buffer = bufferPtr;
  37.  
  38.                         while (!Environment.HasShutdownStarted)
  39.                         {
  40.                             manualResetEvent.WaitOne();
  41.                             while (Ndisapi.ReadPacket(driverPtr, ref request))
  42.                             {
  43.                                 buffer = (INTERMEDIATE_BUFFER)Marshal.PtrToStructure(bufferPtr, typeof(INTERMEDIATE_BUFFER));
  44.  
  45.                                 if (buffer.m_dwDeviceFlags == Ndisapi.PACKET_FLAG_ON_SEND)
  46.                                 {
  47.                                     Ndisapi.SendPacketToAdapter(driverPtr, ref request);
  48.  
  49.                                     //HERE GOES THE PROCESSING OF PACKET
  50.  
  51.                                 }
  52.                             }
  53.                             manualResetEvent.Reset();
  54.                         }
  55.                     }
  56.                     finally
  57.                     {
  58.                         Marshal.FreeHGlobal(bufferPtr);
  59.                         Ndisapi.CloseFilterDriver(driverPtr);
  60.                     }
  61.                 }
  62.             }
  63.             catch(Exception e)
  64.             {
  65.                 Console.WriteLine(e.Message);
  66.             }
  67.             Ndisapi.CloseFilterDriver(driverPtr);
  68.         }
  69.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement