/// <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) { } }
/// <summary> /// Search an IP address in Bing /// </summary> /// <param name="ip"></param> /// <returns></returns> public bool SearchIpBingSingleIp(string ip) { if (CheckToSkip()) { EnableSkip("Skip to next IP"); return(false); } if (ip.Contains("\\") || ip.Contains("/") || !DNSUtil.IsIPv4(ip)) { return(false); } var message = $"[{PanelSearchIPBing.EngineToString(searchIPEngine)}] Searching domains in IP {ip}"; Program.LogThis(new Log(Log.ModuleType.IPBingSearch, message, Log.LogType.debug)); Program.ChangeStatus(message); List <string> currentResults; switch (searchIPEngine) { case PanelSearchIPBing.Engine.BingWeb: try { var bingSearcher = new BingWebSearcher { LocatedInRegion = BingWebSearcher.Region.AnyRegion, SearchAll = true, WriteInLanguage = BingWebSearcher.Language.AnyLanguage }; currentResults = new List <string>(); SerchLinkWebBingEvent(ip, bingSearcher, currentResults); break; } catch { break; } case PanelSearchIPBing.Engine.BingAPI: var bingSearcherApi = new BingAPISearcher(Program.cfgCurrent.BingApiKey); currentResults = new List <string>(); SerchLinkApiBingEvent(ip, bingSearcherApi, currentResults); break; } return(true); }
private void SerchLinkApiBingEvent(string ip, BingAPISearcher bingSearcherApi, List <string> currentResults) { bingSearcherApi.SearcherLinkFoundEvent += delegate(object sender, EventsThreads.ThreadListDataFoundEventArgs e) { var op = Partitioner.Create(e.Data); var po = new ParallelOptions(); if (Program.cfgCurrent.ParallelDnsQueries != 0) { po.MaxDegreeOfParallelism = Program.cfgCurrent.ParallelDnsQueries; } Parallel.ForEach(op, po, delegate(object item, ParallelLoopState loopState) { if (CheckToSkip()) { loopState.Stop(); } try { var br = (BingApiResult)item; var url = new Uri(br.Url); if ( currentResults.Any(d => string.Equals(d, url.Host, StringComparison.CurrentCultureIgnoreCase))) { return; } currentResults.Add(url.Host); var source = $"{Program.data.GetIpSource(ip)} > Bing IP Search [{url.Host}]"; Program.data.AddResolution(url.Host, ip, source, MaxRecursion, Program.cfgCurrent, true); Program.LogThis(new Log(Log.ModuleType.IPBingSearch, $"[{PanelSearchIPBing.EngineToString(searchIPEngine)}] Found domain {url.Host} in IP {ip}", Log.LogType.medium)); } catch { } } ); }; bingSearcherApi.SearcherLogEvent += IpBingSearcherLogEvent; bingSearcherApi.GetCustomLinks($"ip:{ip}"); bingSearcherApi.Join(); }
/// <summary> /// Search an IP address in Bing /// </summary> /// <param name="ip"></param> /// <returns></returns> public bool SearchIpBingSingleIp(string ip) { CancelIfSkipRequested(); if (ip.Contains("\\") || ip.Contains("/") || !DNSUtil.IsIPv4(ip)) { return(false); } var message = $"[{PanelSearchIPBing.EngineToString(searchIPEngine)}] Searching domains in IP {ip}"; Program.LogThis(new Log(Log.ModuleType.IPBingSearch, message, Log.LogType.debug)); Program.ChangeStatus(message); LinkSearcher searcher = null; try { switch (searchIPEngine) { case PanelSearchIPBing.Engine.BingWeb: searcher = new BingWebSearcher { LocatedInRegion = BingWebSearcher.Region.AnyRegion, WriteInLanguage = BingWebSearcher.Language.AnyLanguage }; break; case PanelSearchIPBing.Engine.BingAPI: searcher = new BingAPISearcher(Program.cfgCurrent.BingApiKey); break; } SearchIP(ip, searcher); } catch (Exception) { return(false); } return(true); }
/// <summary> /// Perform the search through Bing API /// </summary> private void BingApiSearch() { BingAPISearcher bingSearcherApi = null; try { bingSearcherApi = new BingAPISearcher(Program.cfgCurrent.BingApiKey); var currentResults = new List <string>(); bingSearcherApi.SearcherLinkFoundEvent += delegate(object sender, EventsThreads.ThreadListDataFoundEventArgs e) { var searcher = (BingAPISearcher)sender; foreach (var item in e.Data) { if (CheckToSkip()) { searcher.Abort(); } try { var br = (BingApiResult)item; var url = new Uri(br.Url); var strHost = url.Host; if ( currentResults.All( D => !string.Equals(D, strHost, StringComparison.CurrentCultureIgnoreCase))) { currentResults.Add(strHost); AddAndLogSubdomainDiscover(strHost); } var domain = Program.data.GetDomain(url.Host); domain.map.AddUrl(url.ToString()); } catch { } } }; bingSearcherApi.SearcherLogEvent += WebSearcherLogEvent; var endReason = EventsThreads.ThreadEndEventArgs.EndReasonEnum.ErrorFound; bingSearcherApi.SearcherEndEvent += delegate(object o, EventsThreads.ThreadEndEventArgs e) { endReason = e.EndReason; }; var strSearchString = $"site:{strDomain}"; int nroResultados; do { if (CheckToSkip()) { return; } nroResultados = currentResults.Count; bingSearcherApi.GetCustomLinks(strSearchString); bingSearcherApi.Join(); CheckEndReason(endReason, currentResults, strSearchString, 49); } while (endReason == EventsThreads.ThreadEndEventArgs.EndReasonEnum.LimitReached && nroResultados != currentResults.Count); } catch (ThreadAbortException) { } finally { bingSearcherApi?.Abort(); } }
/// <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(); } }