Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Program
- {
- static void Main(string[] args)
- {
- uint adapterIndex = 0;
- IntPtr driverPtr = Ndisapi.OpenFilterDriver();
- List<Packet> packets = new List<Packet>();
- try
- {
- if (Ndisapi.IsDriverLoaded(driverPtr))
- {
- TCP_AdapterList adapters = new TCP_AdapterList();
- Ndisapi.GetTcpipBoundAdaptersInfo(driverPtr, ref adapters);
- ADAPTER_MODE mode = new ADAPTER_MODE
- {
- dwFlags = Ndisapi.MSTCP_FLAG_SENT_TUNNEL /*| Ndisapi.MSTCP_FLAG_RECV_TUNNEL*/,
- hAdapterHandle = adapters.m_nAdapterHandle[adapterIndex]
- };
- Ndisapi.SetAdapterMode(driverPtr, ref mode);
- ManualResetEvent manualResetEvent = new ManualResetEvent(false);
- Ndisapi.SetPacketEvent(driverPtr, adapters.m_nAdapterHandle[adapterIndex], manualResetEvent.SafeWaitHandle);
- ETH_REQUEST request = new ETH_REQUEST();
- INTERMEDIATE_BUFFER buffer = new INTERMEDIATE_BUFFER();
- IntPtr bufferPtr = Marshal.AllocHGlobal(Marshal.SizeOf(buffer));
- Win32Api.ZeroMemory(bufferPtr, Marshal.SizeOf(buffer));
- try
- {
- request.hAdapterHandle = adapters.m_nAdapterHandle[adapterIndex];
- request.EthPacket.Buffer = bufferPtr;
- while (!Environment.HasShutdownStarted)
- {
- manualResetEvent.WaitOne();
- while (Ndisapi.ReadPacket(driverPtr, ref request))
- {
- buffer = (INTERMEDIATE_BUFFER)Marshal.PtrToStructure(bufferPtr, typeof(INTERMEDIATE_BUFFER));
- if (buffer.m_dwDeviceFlags == Ndisapi.PACKET_FLAG_ON_SEND)
- {
- Ndisapi.SendPacketToAdapter(driverPtr, ref request);
- //HERE GOES THE PROCESSING OF PACKET
- }
- }
- manualResetEvent.Reset();
- }
- }
- finally
- {
- Marshal.FreeHGlobal(bufferPtr);
- Ndisapi.CloseFilterDriver(driverPtr);
- }
- }
- }
- catch(Exception e)
- {
- Console.WriteLine(e.Message);
- }
- Ndisapi.CloseFilterDriver(driverPtr);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement