コード例 #1
0
 public AccountProvider(IAuthenticationProvider authenticationProvider, ICaptchaProvider captchaProvider,
                        IEmailProvider emailProvider, IMobileProvider mobileProvider)
 {
     _authenticationProvider = authenticationProvider;
     _captchaProvider = captchaProvider;
     _emailProvider = emailProvider;
     _mobileProvider = mobileProvider;
 }
コード例 #2
0
ファイル: Reddit.cs プロジェクト: hippiehunter/SnooSharp
 public Reddit(IListingFilter listingFilter, UserState userState, IActionDeferralSink deferalSink, ICaptchaProvider captchaProvider, string appId = null, string appSecret = null, string redirectUrl = null, ICachingProvider cacheProvider = null, INetworkLayer networkLayer = null)
 {
     _cacheProvider   = cacheProvider;
     _networkLayer    = networkLayer ?? new NetworkLayer(userState, appId, appSecret, redirectUrl);
     _listingFilter   = listingFilter;
     _userState       = userState ?? new UserState();
     _deferalSink     = deferalSink;
     _captchaProvider = captchaProvider;
     _appId           = appId;
     _appSecret       = appSecret;
     _redirectUrl     = redirectUrl;
 }
コード例 #3
0
 public static ICaptchaProvider GetCaptchaProvider()
 {
     Lock.EnterReadLock();
     try
     {
         {
             if (_provider == null)
             {
                 _provider = new ReCaptchaProvider();
             }
         }
     }
     finally
     {
         Lock.ExitReadLock();
     }
     return _provider;
 }
コード例 #4
0
        public Reddit(IListingFilter listingFilter, UserState userState, IActionDeferralSink deferalSink, ICaptchaProvider captchaProvider, string appId = null, string appSecret = null, string redirectUrl = null)
        {
            _listingFilter   = listingFilter;
            _userState       = userState;
            _deferalSink     = deferalSink;
            _captchaProvider = captchaProvider;
            _appId           = appId;
            _appSecret       = appSecret;
            _redirectUrl     = redirectUrl;
            _cookieContainer = new CookieContainer();
            var handler = new HttpClientHandler {
                CookieContainer = _cookieContainer
            };

            if (handler.SupportsAutomaticDecompression)
            {
                handler.AutomaticDecompression = DecompressionMethods.GZip |
                                                 DecompressionMethods.Deflate;
            }
            _httpClient = new HttpClient(handler);
            //_httpClient.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent", "SnooStream");
            //_httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Cache-Control", "no-cache");
        }
コード例 #5
0
 public CaptchaController(IKeyValueProvider keyValueProvider, ICaptchaProvider captchaProvider)
 {
     _KeyValueProvider = keyValueProvider;
     CaptchaProvider   = captchaProvider;
 }
コード例 #6
0
        /// <inheritdoc />
        public override void Process(BotData data)
        {
            base.Process(data);

            // If the clearance info is already set and we're not getting it fresh each time, skip
            if (data.UseProxies)
            {
                if (data.Proxy.Clearance != "" && !data.GlobalSettings.Proxies.AlwaysGetClearance)
                {
                    data.Log(new LogEntry("Skipping CF Bypass because there is already a valid cookie", Colors.White));
                    data.Cookies["cf_clearance"] = data.Proxy.Clearance;
                    data.Cookies["__cfduid"]     = data.Proxy.Cfduid;
                    return;
                }
            }

            var localUrl = ReplaceValues(url, data);
            var uri      = new Uri(localUrl);

            var timeout = data.GlobalSettings.General.RequestTimeout * 1000;

            // Initialize the captcha provider
            // TODO: Add more providers by implementing the ICaptchaProvider interface on the missing ones
            ICaptchaProvider provider = null;

            switch (data.GlobalSettings.Captchas.CurrentService)
            {
            case CaptchaServices.ServiceType.AntiCaptcha:
                provider = new AntiCaptchaProvider(data.GlobalSettings.Captchas.AntiCapToken);
                break;

            case CaptchaServices.ServiceType.TwoCaptcha:
                provider = new TwoCaptchaProvider(data.GlobalSettings.Captchas.TwoCapToken);
                break;
            }

            // Initialize the Cloudflare Solver
            CloudflareSolver cf = new CloudflareSolver(provider, ReplaceValues(UserAgent, data))
            {
                ClearanceDelay  = 3000,
                MaxCaptchaTries = 1,
                MaxTries        = 3
            };

            // Create the cookie container
            CookieContainer cookies = new CookieContainer();

            foreach (var cookie in data.Cookies)
            {
                cookies.Add(new Cookie(cookie.Key, cookie.Value, "/", uri.Host));
            }

            // Initialize the http handler
            HttpClientHandler handler = new HttpClientHandler
            {
                AllowAutoRedirect      = true,
                CookieContainer        = cookies,
                AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate
            };

            // Assign the proxy to the inner handler if necessary
            if (data.UseProxies)
            {
                if (data.Proxy.Type != Extreme.Net.ProxyType.Http)
                {
                    throw new Exception($"The proxy type {data.Proxy.Type} is not supported by this block yet");
                }

                handler.Proxy    = new WebProxy(data.Proxy.Proxy, false);
                handler.UseProxy = true;

                if (!string.IsNullOrEmpty(data.Proxy.Username))
                {
                    handler.DefaultProxyCredentials = new NetworkCredential(data.Proxy.Username, data.Proxy.Password);
                }
            }

            // Initialize the http client
            HttpClient http = new HttpClient(handler);

            http.Timeout = TimeSpan.FromMinutes(timeout);
            http.DefaultRequestHeaders.Add("User-Agent", ReplaceValues(UserAgent, data));

            var result = cf.Solve(http, handler, uri, ReplaceValues(UserAgent, data)).Result;

            if (result.Success)
            {
                data.Log(new LogEntry($"[Success] Protection bypassed: {result.DetectResult.Protection}", Colors.GreenYellow));
            }
            else if (result.DetectResult.Protection == CloudflareProtection.Unknown)
            {
                data.Log(new LogEntry($"Unknown protection, skipping the bypass!", Colors.Tomato));
            }
            else
            {
                throw new Exception($"CF Bypass Failed: {result.FailReason}");
            }

            // Now that we got the cookies, proceed with the normal request
            HttpResponseMessage response = null;

            try
            {
                response = http.GetAsync(uri).Result;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                handler.Dispose();
                http.Dispose();
            }

            var responseString = response.Content.ReadAsStringAsync().Result;

            // Save the cloudflare cookies
            var clearance = "";
            var cfduid    = "";

            foreach (Cookie cookie in cookies.GetCookies(uri))
            {
                switch (cookie.Name)
                {
                case "cf_clearance":
                    clearance = cookie.Value;
                    break;

                case "__cfduid":
                    cfduid = cookie.Value;
                    break;
                }
            }

            // Save the cookies in the proxy
            if (data.UseProxies)
            {
                data.Proxy.Clearance = clearance;
                data.Proxy.Cfduid    = cfduid;
            }

            if (clearance != "")
            {
                data.Log(new LogEntry("Got Cloudflare clearance!", Colors.GreenYellow));
                data.Log(new LogEntry(clearance + Environment.NewLine + cfduid + Environment.NewLine, Colors.White));
            }

            // Get code
            data.ResponseCode = ((int)response.StatusCode).ToString();
            if (PrintResponseInfo)
            {
                data.Log(new LogEntry($"Response code: {data.ResponseCode}", Colors.Cyan));
            }

            // Get headers
            if (PrintResponseInfo)
            {
                data.Log(new LogEntry("Received headers:", Colors.DeepPink));
            }
            data.ResponseHeaders.Clear();
            foreach (var header in response.Headers)
            {
                var h = new KeyValuePair <string, string>(header.Key, header.Value.First());
                data.ResponseHeaders.Add(h.Key, h.Value);
                if (PrintResponseInfo)
                {
                    data.Log(new LogEntry($"{h.Key}: {h.Value}", Colors.LightPink));
                }
            }

            // Add the Content-Length header if it was not sent by the server
            if (!data.ResponseHeaders.ContainsKey("Content-Length"))
            {
                if (data.ResponseHeaders.ContainsKey("Content-Encoding") && data.ResponseHeaders["Content-Encoding"].Contains("gzip"))
                {
                    data.ResponseHeaders["Content-Length"] = GZip.Zip(responseString).Length.ToString();
                }
                else
                {
                    data.ResponseHeaders["Content-Length"] = responseString.Length.ToString();
                }

                if (PrintResponseInfo)
                {
                    data.Log(new LogEntry($"Content-Length: {data.ResponseHeaders["Content-Length"]}", Colors.LightPink));
                }
            }

            // Get cookies
            if (PrintResponseInfo)
            {
                data.Log(new LogEntry("Received cookies:", Colors.Goldenrod));
            }
            foreach (Cookie cookie in cookies.GetCookies(uri))
            {
                data.Cookies[cookie.Name] = cookie.Value;
                if (PrintResponseInfo)
                {
                    data.Log(new LogEntry($"{cookie.Name}: {cookie.Value}", Colors.LightGoldenrodYellow));
                }
            }

            // Print source
            data.ResponseSource = responseString;
            if (PrintResponseInfo)
            {
                data.Log(new LogEntry("Response Source:", Colors.Green));
                data.Log(new LogEntry(data.ResponseSource, Colors.GreenYellow));
            }

            // Error on 302 status
            if (ErrorOn302 && response.StatusCode == HttpStatusCode.Redirect)
            {
                data.Status = BotStatus.ERROR;
            }
        }
コード例 #7
0
 public CloudflareSolver(ICaptchaProvider captchaProvider, [Optional] string userAgent)
 {
     this.captchaProvider = captchaProvider;
     defaultUserAgent     = userAgent ?? Utils.GetGenerateRandomUserAgent();
     captchaDetectResults = new List <DetectResult>();
 }
コード例 #8
0
 internal CaptchaChallengeSolver(CloudflareHandler handler, Uri siteUrl, DetectResult detectResult, string userAgent, ICaptchaProvider captchaProvider)
     : base(handler, siteUrl, detectResult, userAgent)
 {
     this.captchaProvider = captchaProvider;
 }
コード例 #9
0
ファイル: Captcha.cs プロジェクト: sasha237/NorthCitadel
        public static void Init(string antigateKey, int bufferSize, bool bBeep)
        {
            if (inited)
                return;

            lock (locker)
            {
                if (inited)
                    return;

                inited = true;
                doStop = false;

                captchaBuf = new List<ResolvedCaptcha>();
                buffSize = bufferSize;

                threadPoolSize = 5;
                threadPool = new Thread[threadPoolSize];
                inResolve = 0;

                if (String.IsNullOrEmpty(antigateKey))
                {
                    captchaProvider = new WinFormsCaptchaProvider(bBeep);
                }
                else
                {
                    captchaProvider = new AntigateCaptchaProvider(antigateKey);
                }

                var preCaptchaThread = new Thread(Worker);
                preCaptchaThread.Start();
            }
        }
コード例 #10
0
 public async Task <CaptchaSolveResult> Solve(ICaptchaProvider captchaProvider)
 {
     return(await captchaProvider.SolveCaptcha(SiteKey, SiteUrl.AbsoluteUri));
 }
コード例 #11
0
        public CloudflareSolver(ICaptchaProvider captchaProvider)
        {
            this.captchaProvider = captchaProvider;

            _captchaDetectResults = new List <DetectResult>();
        }
コード例 #12
0
 internal CaptchaChallengeSolver(HttpClient client, CloudflareHandler handler, Uri siteUrl, DetectResult detectResult, ICaptchaProvider captchaProvider)
     : base(client, handler, siteUrl, detectResult)
 {
     this.captchaProvider = captchaProvider;
 }