Example #1
0
        private void Drop()
        {
            _dropTokenSource.Token.ThrowIfCancellationRequested();
            try
            {
                _dropPacket      = true;
                _dropPacketCount = _random.Next(2, 4);
                _dropHandler     = WinDivertMethods.WinDivertOpen(string.Format(Resources.Template_PacketFilter, _port),
                                                                  WINDIVERT_LAYER.WINDIVERT_LAYER_NETWORK, 0, 0);

                OnMessage(Resources.DropPacketInitializeMessage);

                while (_dropPacketCount > 0)
                {
                    unsafe
                    {
                        uint               packetLen  = 0;
                        byte[]             pack       = new byte[MaxBuff];
                        WINDIVERT_ADDRESS  addr       = new WINDIVERT_ADDRESS();
                        WINDIVERT_TCPHDR **packHeader = default(WINDIVERT_TCPHDR * *);

                        if (HasError())
                        {
                            continue;
                        }

                        if (
                            !WinDivertMethods.WinDivertRecv(_dropHandler, pack, (uint)pack.Length, ref addr,
                                                            ref packetLen))
                        {
                            continue;
                        }

                        WinDivertMethods.WinDivertHelperParsePacket(pack, packetLen, null, null, null, null, packHeader,
                                                                    null, null, null);

                        _dropPacketCount--;

                        OnMessage(string.Format(Resources.Template_DropPacket, _dropPacketCount));
                    }
                }
                WinDivertMethods.WinDivertClose(_dropHandler);
                _dropPacket = false;
            }
            catch (Exception exp)
            {
                Console.WriteLine(Resources.ExceptionMessage, exp.Message);
            }
        }
Example #2
0
 public static unsafe extern bool WinDivertHelperParsePacket(byte *pPacket, uint packetLen, WINDIVERT_IPHDR **ppIpHdr, WINDIVERT_IPV6HDR **ppIpv6Hdr, WINDIVERT_ICMPHDR **ppIcmpHdr, WINDIVERT_ICMPV6HDR **ppIcmpv6Hdr, WINDIVERT_TCPHDR **ppTcpHdr, WINDIVERT_UDPHDR **ppUdpHdr, byte **ppData, uint *pDataLen);
Example #3
0
 public static unsafe extern bool WinDivertHelperParsePacket(
     [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] byte[] pPacket, uint packetLen,
     WINDIVERT_IPHDR **ppIpHdr, WINDIVERT_IPV6HDR **ppIpv6Hdr, WINDIVERT_ICMPHDR **ppIcmpHdr,
     WINDIVERT_ICMPV6HDR **ppIcmpv6Hdr, WINDIVERT_TCPHDR **ppTcpHdr, WINDIVERT_UDPHDR **ppUdpHdr, byte **ppData,
     uint *pDataLen);
Example #4
0
        private void Steg()
        {
            try
            {
                _stegPacket = true;
                int breakCount = 1;
                _stegPacketCount = 1;
                _stegTokenSource.Token.ThrowIfCancellationRequested();

                OnMessage(Resources.StegonographyInitializeMessage);
                unsafe
                {
                    _stegHandler = WinDivertMethods.WinDivertOpen(string.Format(Resources.Template_DestinationFilter, _port),
                                                                  WINDIVERT_LAYER.WINDIVERT_LAYER_NETWORK, 0, 0);

                    while (_stegPacketCount > 0)
                    {
                        byte[]             pack       = new byte[MaxBuff];
                        WINDIVERT_ADDRESS  addr       = new WINDIVERT_ADDRESS();
                        WINDIVERT_TCPHDR **packHeader = default(WINDIVERT_TCPHDR * *);
                        uint packetLen = 0;

                        if (
                            !WinDivertMethods.WinDivertRecv(_stegHandler, pack, (uint)pack.Length, ref addr,
                                                            ref packetLen))
                        {
                            continue;
                        }


                        WinDivertMethods.WinDivertHelperParsePacket(pack, packetLen, null, null, null, null, packHeader,
                                                                    null, null, null);


                        if (breakCount > 0)
                        {
                            OnMessage(Resources.SendLegalDataMessage);
                        }
                        else
                        {
                            OnMessage(Resources.StegonographyAddedMessage);
                            for (int i = 0; i < _stegWord.Length; i++)
                            {
                                pack[41 + i] = Convert.ToByte(_stegWord[i]);
                            }
                        }

                        if (!WinDivertMethods.WinDivertSend(_stegHandler, pack, packetLen, ref addr, IntPtr.Zero))
                        {
                            OnMessage(Resources.SendPacketError);
                        }
                        else
                        {
                            if (breakCount == 0)
                            {
                                _stegPacketCount--;
                            }
                            else
                            {
                                breakCount--;
                            }
                        }
                    }
                    WinDivertMethods.WinDivertClose(_stegHandler);
                }
                _stegPacket = false;
            }
            catch (Exception exp)
            {
                Console.WriteLine(Resources.ExceptionMessage, exp.Message);
            }
        }