private void CaptureSearchResults(object sender, EventsThreads.CollectionFound <Uri> e) { try { LinkSearcher searcher = (LinkSearcher)sender; foreach (var group in e.Data.GroupBy(p => p.Host)) { CancelIfSkipRequested(); try { AddAndLogSubdomainDiscover(group.Key); DomainsItem domain = Program.data.GetDomain(group.Key); foreach (Uri url in group) { domain.map.AddUrl(url.ToString()); } } catch { } } } catch (InvalidCastException) { } }
/// <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) { } }
private void SearchLinks(LinkSearcher searcherEngine) { domain.map.SearchingAllLinks = HttpMap.SearchStatus.Searching; searcherEngine.ItemsFoundEvent += wsSearch_SearcherLinkFoundEvent; searcherEngine.SearchBySite(new System.Threading.CancellationTokenSource(), domain.Domain) .ContinueWith((e) => { domain.map.SearchingAllLinks = HttpMap.SearchStatus.Finished; Invoke(new MethodInvoker(delegate { Program.LogThis(new Log(Log.ModuleType.Crawling, @"Finishing the links extraction of " + domain.Domain, Log.LogType.debug)); Program.FormMainInstance.UpdateBottomPanel(domain); })); }); Program.LogThis(new Log(Log.ModuleType.Crawling, "Extracting links of " + domain.Domain, Log.LogType.debug)); AddLog($"Searching links with {searcherEngine.Name}"); }
/// <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); }
static void Main(string[] args) { var lnkSearcher = new LinkSearcher(new Everything(), cjk); var searcher = new Searcher(); while (true) { Console.Write("\n> "); var keyword = Console.ReadLine(); var beforDT = DateTime.Now; var result = lnkSearcher.Search(keyword); foreach (var ri in result) { Console.WriteLine(ri); } var afterDT = DateTime.Now; var ts = afterDT.Subtract(beforDT); //Console.WriteLine("Final Score: {0}", av+eScore); Console.WriteLine("Using {0} ms.", ts.TotalMilliseconds); } }
private void SearchIP(string ip, LinkSearcher searcher) { ConcurrentBag <string> domainsFound = new ConcurrentBag <string>(); searcher.ItemsFoundEvent += delegate(object sender, EventsThreads.CollectionFound <Uri> e) { var op = Partitioner.Create(e.Data); var po = new ParallelOptions(); if (Program.cfgCurrent.ParallelDnsQueries != 0) { po.MaxDegreeOfParallelism = Program.cfgCurrent.ParallelDnsQueries; } try { Parallel.ForEach(op, po, delegate(Uri url, ParallelLoopState loopState) { CancelIfSkipRequested(); try { if (domainsFound.Any(d => d.ToLower() == url.Host.ToLower())) { return; } domainsFound.Add(url.Host); bool isInBaseDomain = false; try { if (Dns.GetHostAddresses(url.Host).Any(IP => IP.ToString() == ip)) { isInBaseDomain = true; } } catch { } if (!isInBaseDomain) { return; } string source = $"{Program.data.GetIpSource(ip)} > {searcher.Name} [{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 { } }); } catch (AggregateException) { } }; searcher.SearcherLogEvent += IpBingSearcherLogEvent; searcher.CustomSearch(this.searchCancelToken, $"ip:{ip}") .ContinueWith((e) => SearchEngineFinish(e, searcher.Name, Log.ModuleType.IPBingSearch)) .Wait(); }