public void eventLinkFoundDetailed(object sender, FOCA.Threads.EventsThreads.ThreadListDataFoundEventArgs e) { for (int i = 0; i < e.Data.Count; i++) { string url = e.Data[i].ToString(); Uri uri = new Uri(url); uri = new Uri(uri.Scheme + "://" + uri.Host + uri.AbsolutePath); if (LinkFound != null) { LinkFound(uri.ToString(), null); } /* Este if, newdomain=null se da cuando por ejemplo se hace una busqueda de tecnologia * sobre DOMINIO.COM y aparecen resultados de subdominio1.DOMINO.COM... Así que se agrega * subdominio1.DOMINIO.com y se le agregan las URLs y tecnologias que se han encontrado */ DomainsItem NewDomain = Program.data.GetDomain(uri.Host); if (NewDomain == null) { Program.data.AddDomain(uri.Host, source, Program.cfgCurrent.MaxRecursion, Program.cfgCurrent); Program.LogThis(new Log(Log.ModuleType.TechnologyRecognition, "Domain found: " + uri.Host, Log.LogType.medium)); NewDomain = Program.data.GetDomain(uri.Host); NewDomain.map.AddUrl(uri.ToString()); } /* Si el dominio de la URL coincide con el dominio que se esta tratando, se agrega y se extraen los directorio */ else if (uri.Host == this.domain) { Program.data.GetDomain(domain).map.AddUrl(uri.ToString()); } } }
static public void data_NewDNSDomain(object sender, EventArgs e) { // Nuevo dominio DNS extraido if (sender is DomainsItem) { DomainsItem domain = (DomainsItem)sender; //Solo se hace fingerPrinting a los dominios principales y alternativos List <string> mainDomains = new List <string>(); if (string.IsNullOrEmpty(Program.data.Project.Domain)) { return; } bool existeFP = false; for (int fpI = 0; fpI < domain.fingerPrinting.Count(); fpI++) { FingerPrinting fp = domain.fingerPrinting[fpI]; if (fp is DNS) { existeFP = true; } } if (existeFP) // Si ya existe un fp previo de DNS, no se vuelve a realizar { return; } FingerPrinting fprinting = new DNS(domain.Domain); fprinting.FingerPrintingFinished += new EventHandler(AsociateFingerPrinting); Thread t = new Thread(new ThreadStart(fprinting.GetVersion)); t.IsBackground = true; Program.data.tasker.AddTask(new FOCA.TaskManager.TaskFOCA(t, null, "Fingerprinting DNS (" + domain.Domain + ":53)")); } }
private void CaptureSearchResults(object sender, EventsThreads.CollectionFound <Uri> e) { try { 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) { } }
private void CaptureSearchResults(object sender, EventsThreads.CollectionFound <Uri> e) { WebSearcher searcher = (WebSearcher)sender; foreach (var group in e.Data.GroupBy(p => p.Host)) { if (CheckToSkip()) { searcher.Abort(); } try { AddAndLogSubdomainDiscover(group.Key); DomainsItem domain = Program.data.GetDomain(group.Key); foreach (Uri url in group) { domain.map.AddUrl(url.ToString()); } } catch { } } }
public IPsItem GetIpsItemFromDomainItem(DomainsItem dominio) { IPsItem ip = null; var po = new ParallelOptions(); if (Program.cfgCurrent.ParallelDnsQueries != 0) { po.MaxDegreeOfParallelism = Program.cfgCurrent.ParallelDnsQueries; } Parallel.For(0, Program.data.computerDomains.Items.Count, po, delegate(int i) { if (dominio == computerDomains.Items[i].Domain) { for (int c = 0; c < computerIPs.Items.Count; c++) { if (computerIPs.Items[c].Computer.name == computerDomains.Items[i].Computer.name) { ip = computerIPs.Items[c].Ip; return; } } } }); return(ip); }
private void SearchTechRecog(IReadOnlyList <string> dominios) { var domsArray = new DomainsItem[dominios.Count]; for (var i = 0; i < dominios.Count; i++) { domsArray[i] = Program.data.GetDomain(dominios[i]); } var handler = new TechnologyAnalysisHandler(); handler.LinkFound += delegate { if (CheckToSkip()) { return; } }; handler.EndAnalysisMultipleDomains += delegate { Program.LogThis(new Log(Log.ModuleType.FingingerPrinting, "Fingerprinting finished", Log.LogType.debug)); buttonStart.Text = "&Start"; buttonStart.Image = Resources.tick; }; handler.AnalysisMultiplesDomains(domsArray); }
private bool UpdateDdnsInfo(IDdnsService ddns, string ip, DomainsItem domain) { if (ddns == null) { throw new Exception("Ddns service provider is null."); } //检查域名解析是否存在 List <DomainRecord> records = ddns.DescribeSubDomainRecords(domain.Domain); DomianInfo configDomainInfo = DomianInfo(domain.Domain); DomainRecord domainInfo = null; foreach (var item in records) { if ($"{item.RR}.{item.DomainName}".ToLower() == domain.Domain.ToLower()) { domainInfo = item; break; } } if (records.Count > 1) { ddns.DeleteSubDomainRecords(new DeleteDomainRecordParam() { RR = domainInfo.RR, DomainName = domainInfo.DomainName }); domainInfo = null; } if (domainInfo == null) { ddns.AddDomainRecord(new AddDomainRecordParam() { DomainName = configDomainInfo.DomainName, RR = configDomainInfo.RR, Type = DdnsSDK.Model.Enum.DomainRecordType.A, Value = ip, TTL = domain.TTL }); } else { if (domainInfo.RR == configDomainInfo.RR && domainInfo.TTL == domain.TTL && domainInfo.Value == ip) { return(false); } ddns.UpdateDomainRecord(new UpdateDomainRecordParam() { DomainName = configDomainInfo.DomainName, RecordId = domainInfo.RecordId, RR = configDomainInfo.RR, Type = DdnsSDK.Model.Enum.DomainRecordType.A, Value = ip, TTL = domain.TTL }); } return(true); }
public void LoadDomain(DomainsItem dom) { domain = dom; config = dom.informationOptions; ClearValues(); LoadValuesFromDomain(); }
public void LoadDomain(DomainsItem dom) { domain = dom; lblFilesSearchStatus.Text = dom.Domain; config = dom.informationOptions; ClearValues(); LoadValuesFromDomain(); }
/// <summary> /// Add new. /// </summary> /// <param name="item"></param> private static void AddNew(DomainsItem item) { item.IdProject = Program.data.Project.Id; CurrentContextDb.Domains.Add(item); CurrentContextDb.SaveChanges(); new HttpMapController().Save(item.map); }
private void wsSearch_SearcherLinkFoundEvent(object sender, EventsThreads.CollectionFound <Uri> e) { foreach (Uri url in e.Data) { try { try { string fileExtension = Path.GetExtension(url.AbsolutePath).ToLowerInvariant(); if (!String.IsNullOrWhiteSpace(fileExtension) && DocumentExtractor.IsSupportedExtension(fileExtension)) { var fi = new FilesItem { Ext = fileExtension, URL = url.ToString(), Downloaded = false, MetadataExtracted = false, Date = DateTime.MinValue, ModifiedDate = DateTime.MinValue, Path = string.Empty, Size = -1 }; Program.data.files.Items.Add(fi); Program.FormMainInstance.treeViewMetadata_UpdateDocumentsNumber(); Program.FormMainInstance.panelMetadataSearch.listViewDocuments_Update(fi); Program.FormMainInstance.panelMetadataSearch.HttpSizeDaemonInst.AddURL(fi); } } catch (Exception) { } // add the url to the files list DomainsItem domain = Program.data.GetDomain(url.Host); if (domain == null) { Program.data.AddDomain(url.Host, "Crawling", Program.cfgCurrent.MaxRecursion, Program.cfgCurrent); Program.LogThis(new Log(Log.ModuleType.Crawling, "Domain found: " + url.Host, Log.LogType.medium)); domain = Program.data.GetDomain(url.Host); } domain.map.AddUrl(url.ToString()); if (domain.techAnalysis.domain == null) { domain.techAnalysis.domain = domain.Domain; } domain.techAnalysis.eventLinkFoundDetailed(null, new EventsThreads.CollectionFound <Uri>(new List <Uri> { url })); } catch { } } }
static public void AsociateFingerPrinting(object sender, EventArgs e) { // Añade al DomainItem del dominio la información del fingerprinting if (sender == null) { return; } DomainsItem domain = null; if (sender is HTTP http) { domain = Program.data.GetDomain(http.Host); if (domain != null) { domain.fingerPrinting.Add(http); } else { string ip = http.Host; if (ip == null) { return; } ThreadSafeList <DomainsItem> dominiosAsociados = Program.data.GetResolutionDomains(ip); foreach (DomainsItem dAsociado in dominiosAsociados) { dAsociado.fingerPrinting.Add(http); } } } else if (sender is SMTP smtp) { domain = Program.data.GetDomain(smtp.Host); { domain.fingerPrinting.Add(smtp); } } else if (sender is FTP ftp) { domain = Program.data.GetDomain(ftp.Host); { domain.fingerPrinting.Add(ftp); } } else if (sender is DNS dns) { domain = Program.data.GetDomain(dns.Host); { domain.fingerPrinting.Add(dns); } } // Actualiza la información de los servidores existentes ActualizaSOServidores(domain); }
public string GetDomainSource(string domain) { domain = domain.Trim(); DomainsItem d = null; try { d = domains.Items.First(S => S.Domain.ToLower() == domain.ToLower()); } catch { } return(d != null ? d.Source : string.Empty); }
public DomainsItem GetDomain(string domain) { domain = domain.Trim(); DomainsItem di = null; try { di = domains.Items.First(D => D.Domain.ToLower() == domain.ToLower()); } catch {} return(di); }
private bool DomainTTLVal(DomainsItem domain) { if (domain == null) { return(false); } if (domain.TTL < 60) { return(false); } return(true); }
private bool DomainInfoVal(DomainsItem domain) { if (domain == null || string.IsNullOrEmpty(domain.Domain)) { return(false); } string[] dos = domain.Domain.Split('.'); if (dos.Length < 3) { return(false); } return(true); }
private void StartSearch(DomainsItem domain) { LoadNewTechList(); wsSearch = new FOCA.Searcher.GoogleWebSearcher(); wsSearch.SearchAll = true; wsSearch.Site = domain.Domain; wsSearch.SearcherLinkFoundEvent += new EventHandler <EventsThreads.ThreadListDataFoundEventArgs>(eventLinkFoundDetailed); wsSearch.SearcherEndEvent += new EventHandler <EventsThreads.ThreadEndEventArgs>(EndSearch); foreach (Technology tech in listaTech) { wsSearch.AddExtension(tech.extension); } Program.LogThis(new Log(Log.ModuleType.TechnologyRecognition, "Starting technology recognition in " + domain.Domain, Log.LogType.debug)); wsSearch.GetLinks(); }
private void AnalyzeDomain(DomainsItem domain) { indice++; domain.techAnalysis.LinkFound += delegate { if (this.LinkFound != null) { LinkFound(null, null); } }; domain.techAnalysis.EndAnalysis += new EventHandler(techAnalysis_EndAnalysis); { domain.AnalyzeTechnology(); } }
private void StartSearch(DomainsItem domain) { LoadNewTechList(); wsSearch = new FOCA.Searcher.GoogleWebSearcher(); wsSearch.ItemsFoundEvent += new EventHandler <EventsThreads.CollectionFound <Uri> >(eventLinkFoundDetailed); Program.LogThis(new Log(Log.ModuleType.TechnologyRecognition, "Starting technology recognition in " + domain.Domain, Log.LogType.debug)); wsSearch.SearchBySite(new CancellationTokenSource(), domain.Domain, this.SelectedTechnologies.Select(p => p.extension).ToArray()) .ContinueWith((e) => { Program.LogThis(new Log(Log.ModuleType.TechnologyRecognition, "Finishing technology recognition in " + domain, Log.LogType.debug)); if (this.EndAnalysis != null) { EndAnalysis(domain, null); } }); }
public ComputerDomains GetComputerDomainsFromDomainsItem(DomainsItem dominio) { var lstComputers = new ComputerDomains(); var po = new ParallelOptions(); if (Program.cfgCurrent.ParallelDnsQueries != 0) { po.MaxDegreeOfParallelism = Program.cfgCurrent.ParallelDnsQueries; } Parallel.ForEach(Program.data.computerDomains.Items, S => { if ((S.Domain != null) && (S.Domain.Domain == dominio.Domain)) { lstComputers.Items.Add(S); } }); return(lstComputers); }
/// <summary> /// Update Item. /// </summary> /// <param name="item"></param> private static void Update(DomainsItem item) { var domain = CurrentContextDb.Domains.FirstOrDefault(x => x.Id == item.Id); if (domain != null) { domain.IdProject = Program.data.Project.Id; domain.Domain = item.Domain; domain.fingerPrinting = item.fingerPrinting; domain.informationOptions = item.informationOptions; domain.jspFingerprintingAnalyzed = item.jspFingerprintingAnalyzed; domain.map = item.map; domain.multiplesChoisesAnalyzed = item.multiplesChoisesAnalyzed; domain.os = item.os; domain.robotsAnalyzed = item.robotsAnalyzed; domain.Source = item.Source; domain.techAnalysis = item.techAnalysis; } }
private static void ActualizaSOServidores(DomainsItem di) { if (di == null) { return; } int i = 0; ThreadSafeList <ComputerDomainsItem> lstRes = new ThreadSafeList <ComputerDomainsItem>(Program.data.computerDomains.Items.Where(C => C.Domain.Domain == di.Domain)); //Se buscan los equipos que están relacionados con este dominio foreach (ComputerDomainsItem cdi in lstRes) { i++; { //Se usa el fingerPrint del dominio para asignar un SO al servidor for (int fpI = 0; fpI < di.fingerPrinting.Count(); fpI++) { Analysis.FingerPrinting.FingerPrinting fp = di.fingerPrinting[fpI]; //Nos fiamos mas del so obtenido mediante fingerprinting que el que pueda haber sido obtenido en Shodan if (fp.os != OperatingSystem.OS.Unknown) { cdi.Computer.os = fp.os; break; } //Se extrae software del banner foreach (string software in BannerAnalysis.GetSoftwareFromBanner(fp.Version)) { if (!cdi.Computer.Software.Items.Any(A => A.Name.ToLower() == software.ToLower())) { cdi.Computer.Software.Items.Add(new ApplicationsItem(software, string.Format("{0} FingerPrinting Banner: {1}", di.Domain, fp.Version))); } } } } } }
public void DetailledSearch(DomainsItem domain) { this.domain = domain.Domain; StartSearch(domain); }
static public void data_NewWebDomain(object sender, EventArgs e) { // Nuevo dominio web extraido if (sender is DomainsItem) { DomainsItem domain = (DomainsItem)sender; //Solo se hace fingerPrinting a los dominios principales y alternativos List <string> mainDomains = new List <string>(); mainDomains.Add(Program.data.Project.Domain); mainDomains.AddRange(Program.data.Project.AlternativeDomains); if (!mainDomains.Any(D => domain.Domain.EndsWith(D))) { return; } bool existeFP = false; for (int fpI = 0; fpI < domain.fingerPrinting.Count(); fpI++) { FingerPrinting fp = domain.fingerPrinting[fpI]; if (fp is HTTP) { existeFP = true; } } if (existeFP) // Si ya existe un fp previo de HTTP, no se vuelve a realizar { return; } // Se hace el fingerprinting por HOST/80/443 y IP/80/443 // FP por HOST:80 FingerPrinting fprintingHost = new HTTP(domain.Domain, "/", 80, false); fprintingHost.FingerPrintingFinished += new EventHandler(AsociateFingerPrinting); fprintingHost.FingerPrintingError += new EventHandler(fprinting_FingerPrintingError); Thread tHost = new Thread(new ThreadStart(fprintingHost.GetVersion)); tHost.IsBackground = true; Program.data.tasker.AddTask(new FOCA.TaskManager.TaskFOCA(tHost, null, "Fingerprinting HTTP (" + domain.Domain + ":80)")); // FP por HOST:443 SSL fprintingHost = new HTTP(domain.Domain, "/", 443, true); fprintingHost.FingerPrintingFinished += new EventHandler(AsociateFingerPrinting); fprintingHost.FingerPrintingError += new EventHandler(fprinting_FingerPrintingError); tHost = new Thread(new ThreadStart(fprintingHost.GetVersion)); tHost.IsBackground = true; Program.data.tasker.AddTask(new FOCA.TaskManager.TaskFOCA(tHost, null, "Fingerprinting HTTPS (" + domain.Domain + ":443)")); try { // FP por IP:80 string ip = Program.data.GetResolutionIPs(domain.Domain)[0].Ip; FingerPrinting fprintingIP = new HTTP(ip, "/", 80, false); fprintingIP.FingerPrintingFinished += new EventHandler(AsociateFingerPrinting); fprintingIP.FingerPrintingError += new EventHandler(fprinting_FingerPrintingError); Thread tIP = new Thread(new ThreadStart(fprintingIP.GetVersion)); tIP.IsBackground = true; Program.data.tasker.AddTask(new FOCA.TaskManager.TaskFOCA(tIP, null, "Fingerprinting HTTP (" + ip + ":80)")); // FP por IP:443 SSL ip = Program.data.GetResolutionIPs(domain.Domain)[0].Ip; fprintingIP = new HTTP(ip, "/", 443, true); fprintingIP.FingerPrintingFinished += new EventHandler(AsociateFingerPrinting); fprintingIP.FingerPrintingError += new EventHandler(fprinting_FingerPrintingError); tIP = new Thread(new ThreadStart(fprintingIP.GetVersion)); tIP.IsBackground = true; Program.data.tasker.AddTask(new TaskManager.TaskFOCA(tIP, null, "Fingerprinting HTTPS (" + ip + ":443)")); } catch { } } }
/// <summary> /// Process node Domains. /// </summary> /// <param name="domains"></param> /// <param name="tnDomains"></param> private static void NodeDomainsProcess(List <string> domains, TreeNode tnDomains, CancellationToken cancelToken) { if (!String.IsNullOrWhiteSpace(Program.data.Project.Domain)) { try { foreach (string domain in domains) { System.Windows.Forms.Application.DoEvents(); cancelToken.ThrowIfCancellationRequested(); if (Program.data.IsDomainOrAlternative(domain)) { string[] domainParts = domain.Split('.'); if (domainParts.Length >= 2) { string mainDomain = domainParts[domainParts.Length - 2] + "." + domainParts[domainParts.Length - 1]; TreeNode tnDomain = null; if (tnDomains.Nodes[mainDomain] != null) { tnDomain = tnDomains.Nodes[mainDomain]; } else { tnDomain = tnDomains.Nodes.Insert(Program.FormMainInstance.SearchTextInNodes(tnDomains.Nodes, mainDomain), mainDomain, mainDomain); tnDomain.ImageIndex = tnDomain.SelectedImageIndex = 107; } tnDomain.ContextMenuStrip = Program.FormMainInstance.contextMenu; foreach (TreeNode tnNewDomain in from altDom in Program.data.Project.AlternativeDomains where tnDomains.Nodes[altDom] == null select tnDomains.Nodes.Insert(Program.FormMainInstance.SearchTextInNodes(tnDomains.Nodes, altDom), altDom, altDom)) { tnNewDomain.ImageIndex = tnNewDomain.SelectedImageIndex = 107; } bool dominioDoble = false; for (int i = 0; i < DoubleDomains.Length; i++) { if (domainParts[domainParts.Length - 2] == DoubleDomains[i]) { if (domainParts.Length == 2) { break; } mainDomain = domainParts[domainParts.Length - 3] + "." + mainDomain; dominioDoble = true; break; } } for (var i = 3; i <= domainParts.Length; i++) { if ((dominioDoble) & (i == 3)) { i = 4; } if (dominioDoble) { if (domainParts.Length == 3) { continue; } } mainDomain = domainParts[domainParts.Length - i] + "." + mainDomain; if (tnDomain.Nodes[mainDomain] != null) { tnDomain = tnDomain.Nodes[mainDomain]; tnDomain.ContextMenuStrip = Program.FormMainInstance.contextMenu; DomainsItem itemDominio = Program.data.GetDomain(mainDomain); if (itemDominio == null) { continue; } tnDomain.ImageIndex = tnDomain.SelectedImageIndex = 111;//OperatingSystemUtils.OSToIconNumber(itemDominio.os);//45; tnDomain.Tag = itemDominio; } else { if ((!mainDomain.Contains(Program.data.Project.Domain)) && (!Program.data.Project.AlternativeDomains.Contains(mainDomain))) { continue; } tnDomain = tnDomain.Nodes.Insert(Program.FormMainInstance.SearchTextInNodes(tnDomain.Nodes, mainDomain), mainDomain, mainDomain); tnDomain.ContextMenuStrip = Program.FormMainInstance.contextMenu; var itemDominio = Program.data.GetDomain(mainDomain); if (itemDominio == null) { continue; } tnDomain.ImageIndex = tnDomain.SelectedImageIndex = 111;//OperatingSystemUtils.OSToIconNumber(itemDominio.os);//45; tnDomain.Tag = itemDominio; } } } } } } catch (Exception) { } } }
public RelationsItem(DomainsItem domain, IPsItem ip, string source) { this.Domain = domain; this.Ip = ip; this.Source = source; }
/// <summary> /// Add domain if this not exist in the list. /// </summary> /// <param name="domain"></param> /// <param name="source"></param> /// <param name="maxRecursion"></param> /// <param name="cfgCurrent"></param> public void AddDomain(string domain, string source, int maxRecursion, Configuration cfgCurrent) { domain = domain.Trim(); if (domains.Items.Any(S => S.Domain.ToLower() == domain.ToLower())) { return; } var dItem = new DomainsItem(domain, source); domains.Items.Add(dItem); #if PLUGINS Thread tPluginOnDomain = new Thread(new ParameterizedThreadStart(Program.data.plugins.OnNewDomain)); tPluginOnDomain.IsBackground = true; object[] oDomain = new object[] { new object[] { domain } }; tPluginOnDomain.Start(oDomain); #endif var domainParts = domain.Split('.'); var currentdomain = domainParts[domainParts.Length - 1]; for (var i = 2; i < domainParts.Length; i++) { currentdomain = domainParts[domainParts.Length - i] + "." + currentdomain; AddDomain(currentdomain, string.Format("{0} > Inferred by {2} [{1}]", GetDomainSource(domain), currentdomain, domain), maxRecursion - 1, cfgCurrent); } if (maxRecursion <= 0) { OnChangeEvent(null); return; } //OnLog(null, new EventsThreads.ThreadStringEventArgs(string.Format("Resolving domain: {0}", domain))); var listIpsOfDomain = DNSUtil.GetHostAddresses(domain); if (listIpsOfDomain.Count == 0) { var computer = new ComputersItem(); computer.type = ComputersItem.Tipo.Server; computer.name = domain; computer.NotOS = true; computer.os = OperatingSystem.OS.Unknown; if (!computers.Items.Any(S => S.name == domain)) { computers.Items.Add(computer); } } foreach (var IP in listIpsOfDomain) { if (Program.data.IsMainDomainOrAlternative(domain)) { var limit = Program.data.GetLimitFromIp(IP.ToString()); if (limit == null) { Program.data.AddLimit(new Limits(IP.ToString())); } else { var lastOct = int.Parse(IP.ToString().Split(new char[] { '.' })[3]); if (lastOct < limit.Lower) { limit.Lower = lastOct; } else if (lastOct > limit.Higher) { limit.Higher = lastOct; } } } AddResolution(domain, IP.ToString(), string.Format("{0} > DNS resolution [{1}]", GetDomainSource(domain), IP.ToString()), maxRecursion - 1, Program.cfgCurrent, false); } // Fingerprinting HTTP if (cfgCurrent.PassiveFingerPrintingHttp && cfgCurrent.FingerPrintingAllHttp) { if (NewDomainByHTTPServer != null) { NewDomainByHTTPServer(dItem, null); } } else if ((cfgCurrent.PassiveFingerPrintingHttp) && (source.ToLower() == "documents search" || source.ToLower().Contains("websearch") || source.ToLower().Contains("bing ip search") || source.ToLower().Contains("technologyrecognition") || source.ToLower().Contains("fingerprinting") || source.ToLower().Contains("certificate fingerprinting"))) { if (NewDomainByHTTPServer != null) { NewDomainByHTTPServer(dItem, null); } } // Fingerprinting SMTP if (cfgCurrent.PasiveFingerPrintingSmtp && cfgCurrent.FingerPrintingAllSmtp) { if (NewDomainByMXServer != null) { NewDomainByMXServer(dItem, null); } } else if ((cfgCurrent.PasiveFingerPrintingSmtp) && (source.ToLower().Contains("mx server"))) { if (NewDomainByMXServer != null) { NewDomainByMXServer(dItem, null); } } // Fingerprinting FTP if (cfgCurrent.FingerPrintingAllFtp) { if (NewDomainByFTPServer != null) { NewDomainByFTPServer(dItem, null); } } OnChangeEvent(null); }
public void FingerPrintDns(DomainsItem dom) { NewDomainByDNSServer?.Invoke(dom, null); }
public ComputerDomainsItem(ComputersItem computer, DomainsItem domain, string source) { this.Computer = computer; this.Domain = domain; this.Source = source; }