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