Beispiel #1
0
        public unsafe void SendPacket(Packet pkt)
        {
            bool worked = false;

            if (pkt.Outbound)
            {
                ETH_REQUEST          Request = new ETH_REQUEST();
                INTERMEDIATE_BUFFER *ib      = pkt.IB;
                Request.EthPacket.Buffer = (IntPtr)ib;
                Request.hAdapterHandle   = adapterHandle;
                if (!Ndisapi.SendPacketToAdapter(hNdisapi, ref Request))
                {
                    worked = false;
                }
                else
                {
                    worked = true;
                }
            }
            else
            {
                ETH_REQUEST          Request = new ETH_REQUEST();
                INTERMEDIATE_BUFFER *ib      = pkt.IB;
                Request.EthPacket.Buffer = (IntPtr)ib;
                Request.hAdapterHandle   = adapterHandle;
                worked = Ndisapi.SendPacketToMstcp(hNdisapi, ref Request);
            }
            if (pkt.CodeGenerated)
            {
                pkt.ClearGeneratedPacket();
            }
        }
Beispiel #2
0
 public UDPPacket(INTERMEDIATE_BUFFER *in_packet)
     : base(in_packet)
 {
     if (!isUDP())
     {
         throw new Exception("Not a UDP packet!");
     }
     start = base.LayerStart() + base.LayerLength();
 }
 public ARPPacket(INTERMEDIATE_BUFFER *in_packet)
     : base(in_packet)
 {
     if (!isARP())
     {
         throw new Exception("Not an ARP packet!");
     }
     start  = base.LayerStart() + base.LayerLength();
     length = this.Length() - base.LayerLength();
 }
Beispiel #4
0
 public DNSPacket(INTERMEDIATE_BUFFER *in_packet)
     : base(in_packet)
 {
     if (!isDNS())
     {
         throw new Exception("Not a DNS packet!");
     }
     start  = base.LayerStart() + base.LayerLength();
     length = Length() - start;
 }
 public ICMPv6Packet(INTERMEDIATE_BUFFER *in_packet)
     : base(in_packet)
 {
     if (!isICMPv6())
     {
         throw new Exception("Not an ICMPv6 packet!");
     }
     start  = base.LayerStart() + base.LayerLength();
     length = base.TotalLength;
 }
Beispiel #6
0
 public TCPPacket(INTERMEDIATE_BUFFER *in_packet)
     : base(in_packet)
 {
     if (!isTCP())
     {
         throw new Exception("Not a TCP packet!");
     }
     start  = base.LayerStart() + base.LayerLength();
     length = (uint)((data->m_IBuffer[start + 12] >> 4) * 4);
 }
Beispiel #7
0
 public EthPacket(int length)
 {
     data = (INTERMEDIATE_BUFFER*)Marshal.AllocHGlobal(Marshal.SizeOf(new INTERMEDIATE_BUFFER()));
     ZeroMemory((IntPtr)data, Marshal.SizeOf(new INTERMEDIATE_BUFFER()));
     data->m_qLink = new LIST_ENTRY();
     data->m_qLink.Blink = IntPtr.Zero;
     data->m_qLink.Flink = IntPtr.Zero;
     data->m_Length = (uint)length;
     data->m_dwDeviceFlags = PACKET_FLAG_ON_SEND;
     data->m_Flags = 0;
     generated = true;
 }
 public IPPacket(INTERMEDIATE_BUFFER *in_packet)
     : base(in_packet)
 {
     if (!isIP())
     {
         throw new Exception("Not an IP packet!");
     }
     start = base.LayerStart() + base.LayerLength();
     if (isIPv6())
     {
         length = 40;
     }
     else
     {
         length = (uint)((data->m_IBuffer[start] & 0xf) * 4);
     }
 }
 public unsafe override PacketMainReturn interiorMain(ref Packet in_packet)
 {
     lock (padlock)
     {
         if (theirMac == null)
         {
             return(null);
         }
         EthPacket e = (EthPacket)in_packet;
         if ((e.Proto[0] & 0x01) == 0x01 && (CompareMac(theirMac, e.FromMac) && CompareMac(myMac, e.ToMac) || (CompareMac(theirMac, e.ToMac) && CompareMac(myMac, e.FromMac))))
         {
             INTERMEDIATE_BUFFER *IB = e.IB;
             rc4.SetKeyState(key);
             INTERMEDIATE_BUFFER *iba = (INTERMEDIATE_BUFFER *)Marshal.AllocHGlobal(Marshal.SizeOf(new INTERMEDIATE_BUFFER()));
             iba->m_dwDeviceFlags = IB->m_dwDeviceFlags;
             iba->m_Flags         = IB->m_Flags;
             iba->m_Length        = IB->m_Length;
             iba->m_qLink         = IB->m_qLink;
             for (int x = 12; x < IB->m_Length; x++)
             {
                 iba->m_IBuffer[x] = (byte)(IB->m_IBuffer[x] ^ rc4.Next());
             }
             EthPacket nPacket = new EthPacket(iba);
             nPacket.FromMac  = e.FromMac;
             nPacket.ToMac    = e.ToMac;
             nPacket.Proto    = new byte[2];
             nPacket.Proto[0] = (byte)(0xFE & e.Proto[0]);
             nPacket.Proto[1] = e.Proto[1];
             adapter.ProcessPacket(nPacket);
             return(new PacketMainReturn("SimpleMacEncryption")
             {
                 returnType = PacketMainReturnType.Drop
             });
         }
     }
     return(null);
 }
Beispiel #10
0
 public EthPacket(INTERMEDIATE_BUFFER *in_packet)
 {
     data = in_packet;
 }
Beispiel #11
0
 public EthPacket(INTERMEDIATE_BUFFER* in_packet)
 {
     data = in_packet;
 }
Beispiel #12
0
 public EETHPacket(INTERMEDIATE_BUFFER *in_packet)
     : base(in_packet)
 {
 }