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