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); }
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 { } } }