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(); } }
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(); }
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; }
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); }
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); }
public EthPacket(INTERMEDIATE_BUFFER *in_packet) { data = in_packet; }
public EthPacket(INTERMEDIATE_BUFFER* in_packet) { data = in_packet; }
public EETHPacket(INTERMEDIATE_BUFFER *in_packet) : base(in_packet) { }