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)
            {
            }
        }
Exemple #4
0
        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
                {
                }
            }
        }
Exemple #5
0
        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);
        }
Exemple #6
0
        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);
        }
Exemple #8
0
        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);
        }
Exemple #11
0
        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
                {
                }
            }
        }
Exemple #12
0
        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);
        }
Exemple #13
0
        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);
        }
Exemple #14
0
        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();
        }
Exemple #18
0
        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();
            }
        }
Exemple #19
0
        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);
                }
            });
        }
Exemple #20
0
        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
                { }
            }
        }
Exemple #25
0
        /// <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)
                {
                }
            }
        }
Exemple #26
0
 public RelationsItem(DomainsItem domain, IPsItem ip, string source)
 {
     this.Domain = domain;
     this.Ip     = ip;
     this.Source = source;
 }
Exemple #27
0
        /// <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);
        }
Exemple #28
0
 public void FingerPrintDns(DomainsItem dom)
 {
     NewDomainByDNSServer?.Invoke(dom, null);
 }
Exemple #29
0
 public ComputerDomainsItem(ComputersItem computer, DomainsItem domain, string source)
 {
     this.Computer = computer;
     this.Domain   = domain;
     this.Source   = source;
 }