Exemplo n.º 1
0
        /// <summary>
        /// Setup Web Search
        /// </summary>
        private void SetUpWebSearch()
        {
            var message =
                $"Searching subdomains for {strDomain} in {PanelWebSearcherInformation.EngineToString(searchEngine)}";

            Program.LogThis(new Log(Log.ModuleType.WebSearch, message, Log.LogType.debug));
            Program.ChangeStatus(message);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Perform web search based on the user's choice
        /// </summary>
        private void SearchWeb()
        {
            string message = $"Searching subdomains for {strDomain} in {PanelWebSearcherInformation.EngineToString(searchEngine)}";

            Program.LogThis(new Log(Log.ModuleType.WebSearch, message, Log.LogType.debug));
            Program.ChangeStatus(message);

            LinkSearcher searcher = null;

            switch (searchEngine)
            {
            case PanelWebSearcherInformation.Engine.GoogleWeb:
                searcher = new GoogleWebSearcher
                {
                    cSafeSearch     = GoogleWebSearcher.SafeSearch.off,
                    FirstSeen       = GoogleWebSearcher.FirstSeenGoogle.AnyTime,
                    LocatedInRegion = GoogleWebSearcher.Region.AnyRegion,
                    WriteInLanguage = GoogleWebSearcher.Language.AnyLanguage
                };
                break;

            case PanelWebSearcherInformation.Engine.GoogleAPI:
                searcher = new GoogleAPISearcher(Program.cfgCurrent.GoogleApiKey, Program.cfgCurrent.GoogleApiCx);
                break;

            case PanelWebSearcherInformation.Engine.BingWeb:
                searcher = new BingWebSearcher
                {
                    LocatedInRegion = BingWebSearcher.Region.AnyRegion,
                    WriteInLanguage = BingWebSearcher.Language.AnyLanguage
                };
                break;

            case PanelWebSearcherInformation.Engine.BingAPI:
                searcher = new BingAPISearcher(Program.cfgCurrent.BingApiKey);
                break;

            case PanelWebSearcherInformation.Engine.DuckDuckGoWeb:
                searcher = new DuckduckgoWebSearcher();
                break;
            }

            try
            {
                searcher.ItemsFoundEvent  += CaptureSearchResults;
                searcher.SearcherLogEvent += WebSearcherLogEvent;
                CancelIfSkipRequested();

                searcher.SearchBySite(this.searchCancelToken, strDomain)
                .ContinueWith((e) => SearchEngineFinish(e, searcher.Name, Log.ModuleType.WebSearch))
                .Wait();
            }
            catch (OperationCanceledException)
            {
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Adds and logs a subdomain discovery event
        /// </summary>
        /// <param name="strHost">Discovered subdomain</param>
        private void AddAndLogSubdomainDiscover(string strHost)
        {
            Program.data.AddDomain(strHost,
                                   string.Format("WebSearch, {1} [{0}]", strHost,
                                                 PanelWebSearcherInformation.EngineToString(searchEngine)),
                                   MaxRecursion, Program.cfgCurrent);

            Program.LogThis(new Log(Log.ModuleType.WebSearch,
                                    $"[{PanelWebSearcherInformation.EngineToString(searchEngine)}] Found subdomain {strHost}",
                                    Log.LogType.debug));
        }
Exemplo n.º 4
0
        /// <summary>
        /// max length of the request is 2058 including the GET and HTTP/1.1 words
        /// we limit the string to 1900 to leave space for offset, count and filters
        /// </summary>
        /// <param name="len"></param>
        /// <returns></returns>
        private bool CheckTotalLength(int len)
        {
            var res = len > 1900;

            if (res)
            {
                Program.LogThis(new Log(Log.ModuleType.WebSearch,
                                        $"[{PanelWebSearcherInformation.EngineToString(searchEngine)}] Reached limit of 1900 characters in search string.",
                                        Log.LogType.debug));
            }

            return(res);
        }
Exemplo n.º 5
0
        /// <summary>
        /// Checks thread's end reason and logs if the reason was LimitReached
        /// </summary>
        /// <param name="endReason"></param>
        /// <param name="currentResults"></param>
        /// <param name="strSearchString"></param>
        /// <param name="wordsCountLimit"></param>
        private void CheckEndReason(EventsThreads.ThreadEndEventArgs.EndReasonEnum endReason,
                                    IList <string> currentResults, string strSearchString, int wordsCountLimit)
        {
            if (strSearchString == null)
            {
                return;
            }
            if (endReason != EventsThreads.ThreadEndEventArgs.EndReasonEnum.LimitReached)
            {
                return;
            }
            var newSearchString = new StringBuilder($"site:{strDomain}");

            var wordsCounter = 1;

            foreach (var item in currentResults)
            {
                var strExcludeSite = $" -site:{item}";
                if (CheckTotalLength(newSearchString.Length + strExcludeSite.Length))
                {
                    break;
                }

                newSearchString.Append(strExcludeSite);
                if (++wordsCounter != wordsCountLimit)
                {
                    continue;
                }
                var excludeSubDomains = string.Empty;
                var currentIndex      = currentResults.IndexOf(item);
                for (var i = currentIndex; i < currentResults.Count; i++)
                {
                    excludeSubDomains += currentResults[i] + " ";
                }
                LogLimit(excludeSubDomains);
                break;
            }
            strSearchString = newSearchString.ToString();
            Program.LogThis(new Log(Log.ModuleType.WebSearch,
                                    $"[{PanelWebSearcherInformation.EngineToString(searchEngine)}] Searching again with restricted sites, search string: {strSearchString}",
                                    Log.LogType.debug));
        }
Exemplo n.º 6
0
 /// <summary>
 /// Logs that length limit was reached
 /// </summary>
 /// <param name="excludeSubdomains"></param>
 private void LogLimit(string excludeSubdomains)
 {
     Program.LogThis(new Log(Log.ModuleType.WebSearch,
                             $"[{PanelWebSearcherInformation.EngineToString(searchEngine)}] Reached limit of 32 words in search string, the next subdomains can't be used to exclude them: {excludeSubdomains}",
                             Log.LogType.debug));
 }
Exemplo n.º 7
0
        /// <summary>
        /// Perform web search based on the user's choice
        /// </summary>
        private void SearchWeb()
        {
            string message = $"Searching subdomains for {strDomain} in {PanelWebSearcherInformation.EngineToString(searchEngine)}";

            Program.LogThis(new Log(Log.ModuleType.WebSearch, message, Log.LogType.debug));
            Program.ChangeStatus(message);

            WebSearcher searcher = null;

            switch (searchEngine)
            {
            case PanelWebSearcherInformation.Engine.GoogleWeb:
                searcher = new GoogleWebSearcher
                {
                    SearchAll       = true,
                    cSafeSearch     = GoogleWebSearcher.SafeSearch.off,
                    FirstSeen       = GoogleWebSearcher.FirstSeenGoogle.AnyTime,
                    LocatedInRegion = GoogleWebSearcher.Region.AnyRegion,
                    WriteInLanguage = GoogleWebSearcher.Language.AnyLanguage
                };
                break;

            case PanelWebSearcherInformation.Engine.GoogleAPI:
                searcher = new GoogleAPISearcher(Program.cfgCurrent.GoogleApiKey, Program.cfgCurrent.GoogleApiCx)
                {
                    SearchAll = true
                };
                break;

            case PanelWebSearcherInformation.Engine.BingWeb:
                searcher = new BingWebSearcher
                {
                    LocatedInRegion = BingWebSearcher.Region.AnyRegion,
                    SearchAll       = true,
                    WriteInLanguage = BingWebSearcher.Language.AnyLanguage
                };
                break;

            case PanelWebSearcherInformation.Engine.BingAPI:
                searcher = new BingAPISearcher(Program.cfgCurrent.BingApiKey);
                break;

            case PanelWebSearcherInformation.Engine.DuckDuckGoWeb:
                searcher = new DuckduckgoWebSearcher();
                break;
            }

            try
            {
                searcher.SearcherLinkFoundEvent += CaptureSearchResults;
                searcher.SearcherLogEvent       += WebSearcherLogEvent;
                string strSearchString = $"site:{strDomain}";
                if (CheckToSkip())
                {
                    return;
                }

                searcher.GetCustomLinks(strSearchString);
                searcher.Join();
            }
            catch (ThreadAbortException)
            {
            }
            finally
            {
                searcher?.Abort();
            }
        }