static public void data_NewMXDomain(object sender, EventArgs e) { // Nuevo dominio MX 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; } 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 SMTP) { existeFP = true; } } if (existeFP) // Si ya existe un fp previo de SMTP, no se vuelve a realizar { return; } FingerPrinting fprinting = new SMTP(domain.Domain, 25); 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 SMTP (" + domain.Domain + ":25)")); } }
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 http = (HTTP)sender; 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 smtp = (SMTP)sender; domain = Program.data.GetDomain(smtp.Host); { domain.fingerPrinting.Add(smtp); } } else if (sender is FTP) { FTP ftp = (FTP)sender; domain = Program.data.GetDomain(ftp.Host); { domain.fingerPrinting.Add(ftp); } } else if (sender is DNS) { DNS dns = (DNS)sender; domain = Program.data.GetDomain(dns.Host); { domain.fingerPrinting.Add(dns); } } // Actualiza la información de los servidores existentes ActualizaSOServidores(domain); }