示例#1
0
 public string GenerateRawContent(PingCastleReportCollection <HealthcheckData> report)
 {
     data      = NetworkMapData.BuildFromConsolidation(report);
     sb.Length = 0;
     GenerateContent();
     return(sb.ToString());
 }
示例#2
0
            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);
            }
示例#3
0
 public string GenerateReportFile(PingCastleReportCollection <HealthcheckData> report, ADHealthCheckingLicense license, string filename)
 {
     data = NetworkMapData.BuildFromConsolidation(report);
     return(GenerateReportFile(filename));
 }