public string GenerateRawContent(PingCastleReportCollection <HealthcheckData> report) { data = NetworkMapData.BuildFromConsolidation(report); sb.Length = 0; GenerateContent(); return(sb.ToString()); }
public static NetworkMapData BuildFromConsolidation(PingCastleReportCollection <HealthcheckData> reports) { var data = new NetworkMapData() { Views = new List <NetworkMapDataView>() { new NetworkMapDataView() { framenetwork = Subnet.Parse("10.0.0.0/8"), order = 1024, }, new NetworkMapDataView() { framenetwork = Subnet.Parse("192.168.0.0/16"), order = 256, } }, }; data.networkrange = new Dictionary <string, List <NetworkMapDataItem> >(); data.DomainControllers = new List <NetworkMapDCItem>(); var latestForestReports = new Dictionary <string, HealthcheckData>(); foreach (var report in reports) { // select latest forest report to have the latest network information var version = new Version(report.EngineVersion.Split(' ')[0]); if (!(version.Major < 2 || (version.Major == 2 && version.Minor < 6))) { if (!latestForestReports.ContainsKey(report.Forest.DomainSID) || latestForestReports[report.Forest.DomainSID].GenerationDate < report.GenerationDate) { latestForestReports[report.Forest.DomainSID] = report; } } } // store network information foreach (var report in latestForestReports.Values) { var list = new List <NetworkMapDataItem>(); data.networkrange.Add(report.Forest.DomainSID, list); foreach (var site in report.Sites) { foreach (var network in site.Networks) { list.Add(new NetworkMapDataItem() { Network = Subnet.Parse(network), Source = report.Forest.DomainName, Description = site.Description, Location = site.Location, Name = site.SiteName, }); } } } // tag the network foreach (var report in reports) { IEnumerable <NetworkMapDataItem> networks = null; if (data.networkrange.ContainsKey(report.Forest.DomainSID)) { networks = data.networkrange[report.Forest.DomainSID]; } // collect DC info foreach (var dc in report.DomainControllers) { foreach (string ip in dc.IP) { IPAddress i; if (!IPAddress.TryParse(ip, out i)) { continue; } if (i.AddressFamily != System.Net.Sockets.AddressFamily.InterNetwork) { continue; } data.DomainControllers.Add(new NetworkMapDCItem() { Name = dc.DCName, Source = report.DomainFQDN, Ip = i, }); if (networks != null) { foreach (var network in networks) { if (network.Network.MatchIp(i)) { if (string.IsNullOrEmpty(network.DomainFQDN)) { network.DomainFQDN = report.DomainFQDN; } else if (network.DomainFQDN == report.DomainFQDN) { } else { network.DomainFQDN = "_multiple_"; } } } } } } } return(data); }
public string GenerateReportFile(PingCastleReportCollection <HealthcheckData> report, ADHealthCheckingLicense license, string filename) { data = NetworkMapData.BuildFromConsolidation(report); return(GenerateReportFile(filename)); }