Esempio n. 1
0
        // sometimes we have only the netbios name. Try to find if we know the FQDN
        private static void EnrichDomainInfo(PingCastleReportCollection <HealthcheckData> consolidation, HealthCheckTrustDomainInfoData di)
        {
            bool enriched = false;

            // search direct report
            foreach (HealthcheckData data in consolidation)
            {
                if (data.NetBIOSName.Equals(di.NetbiosName, StringComparison.InvariantCultureIgnoreCase))
                {
                    di.DnsName    = data.DomainFQDN;
                    di.ForestName = data.ForestFQDN;
                    break;
                }
                foreach (var trust in data.Trusts)
                {
                    // for old report: no netbios name defined in domain object !
                    string[] values  = trust.TrustPartner.Split('.');
                    string   netbios = values[0];
                    if (!String.IsNullOrEmpty(trust.NetBiosName))
                    {
                        netbios = trust.NetBiosName;
                    }
                    if (netbios.Equals(di.NetbiosName, StringComparison.InvariantCultureIgnoreCase))
                    {
                        di.DnsName = trust.TrustPartner;
                        // unknown forest name
                        enriched = true;
                        break;
                    }
                    foreach (var forestinfo in trust.KnownDomains)
                    {
                        if (!String.IsNullOrEmpty(forestinfo.NetbiosName) && forestinfo.NetbiosName.Equals(di.NetbiosName, StringComparison.InvariantCultureIgnoreCase))
                        {
                            di.DnsName    = forestinfo.DnsName;
                            di.ForestName = trust.TrustPartner;
                            enriched      = true;
                            break;
                        }
                    }
                    if (enriched)
                    {
                        break;
                    }
                }
                if (enriched)
                {
                    break;
                }
            }
        }
        public PingCastleReportCollection <HealthcheckData> GenerateForest(int maxDomain = 15)
        {
            int numberDomains = rnd.Next(5, maxDomain > 15 ? 15 : maxDomain);
            var children      = new PingCastleReportCollection <HealthcheckData>();
            // head of forest
            var root = GenerateSingleReport(new FakeHealthCheckDataGeneratorDomainModel()
            {
                Size = DomainSizeModel.VerySmall
            });

            for (int i = 0; i < numberDomains; i++)
            {
                var child = GenerateSingleReport(new FakeHealthCheckDataGeneratorDomainModel()
                {
                    Size = DomainSizeModel.Medium, Forest = root
                });
                children.Add(child);
            }
            foreach (var child in children)
            {
                // root trust
                var trust = new HealthCheckTrustData();
                trust.CreationDate    = child.DomainCreation;
                trust.IsActive        = true;
                trust.NetBiosName     = child.NetBIOSName;
                trust.SID             = child.DomainSid;
                trust.TrustDirection  = 3;
                trust.TrustAttributes = 32;
                trust.TrustType       = 2;
                trust.TrustPartner    = child.DomainFQDN;
                trust.SID             = child.DomainSid;
                trust.KnownDomains    = new List <HealthCheckTrustDomainInfoData>();
                root.Trusts.Add(trust);

                // child trust
                trust = new HealthCheckTrustData();
                trust.CreationDate    = child.DomainCreation;
                trust.IsActive        = true;
                trust.NetBiosName     = root.NetBIOSName;
                trust.SID             = child.DomainSid;
                trust.TrustDirection  = 3;
                trust.TrustAttributes = 32;
                trust.TrustType       = 2;
                trust.TrustPartner    = root.DomainFQDN;
                trust.SID             = root.DomainSid;
                trust.KnownDomains    = new List <HealthCheckTrustDomainInfoData>();
                child.Trusts.Add(trust);

                foreach (var child2 in children)
                {
                    if (child2.DomainSid == child.DomainSid)
                    {
                        continue;
                    }
                    var kdomain = new HealthCheckTrustDomainInfoData();
                    kdomain.CreationDate  = child2.DomainCreation;
                    kdomain.DnsName       = child2.DomainFQDN;
                    kdomain.ForestName    = child2.ForestFQDN;
                    kdomain.ForestNetbios = root.NetBIOSName;
                    kdomain.ForestSid     = root.DomainSid;
                    kdomain.NetbiosName   = child2.NetBIOSName;
                    kdomain.Sid           = child2.DomainSid;
                    trust.KnownDomains.Add(kdomain);
                }
            }
            // output all domains
            children.Add(root);
            return(children);
        }