コード例 #1
0
        public bool GenerateFakeReport()
        {
            return(StartTask("Generate fake reports",
                             () =>
            {
                var fakegenerator = new FakeHealthCheckDataGenerator();
                var hcconso = fakegenerator.GenerateData();

                foreach (var pingCastleReport in hcconso)
                {
                    var enduserReportGenerator = PingCastleFactory.GetEndUserReportGenerator <HealthcheckData>();
                    enduserReportGenerator.GenerateReportFile(pingCastleReport, License, pingCastleReport.GetHumanReadableFileName());
                    pingCastleReport.SetExportLevel(ExportLevel);
                    DataHelper <HealthcheckData> .SaveAsXml(pingCastleReport, pingCastleReport.GetMachineReadableFileName(), EncryptReport);
                }

                var reportConso = new ReportHealthCheckConsolidation();
                reportConso.GenerateReportFile(hcconso, License, "ad_hc_summary.html");
                ReportHealthCheckMapBuilder nodeAnalyzer = new ReportHealthCheckMapBuilder(hcconso, License);
                nodeAnalyzer.Log = Console.WriteLine;
                nodeAnalyzer.GenerateReportFile("ad_hc_summary_full_node_map.html");
                nodeAnalyzer.FullNodeMap = false;
                nodeAnalyzer.CenterDomainForSimpliedGraph = CenterDomainForSimpliedGraph;
                nodeAnalyzer.GenerateReportFile("ad_hc_summary_simple_node_map.html");
                var mapReport = new ReportNetworkMap();
                mapReport.GenerateReportFile(hcconso, License, "ad_hc_hilbert_map.html");
            }
                             ));
        }
コード例 #2
0
ファイル: Tasks.cs プロジェクト: pbutler6163/pingcastle
 public bool ConsolidationTask <T>() where T : IPingCastleReport
 {
     return(StartTask("PingCastle report consolidation (" + typeof(T).Name + ")",
                      () =>
     {
         if (String.IsNullOrEmpty(FileOrDirectory))
         {
             FileOrDirectory = Directory.GetCurrentDirectory();
         }
         if (!Directory.Exists(FileOrDirectory))
         {
             WriteInRed("The directory " + FileOrDirectory + " doesn't exist");
             return;
         }
         var consolidation = PingCastleReportHelper <T> .LoadXmls(FileOrDirectory, FilterReportDate);
         if (consolidation.Count == 0)
         {
             WriteInRed("No report has been found. Please generate one with PingCastle and try again. The task will stop.");
             return;
         }
         if (typeof(T) == typeof(HealthcheckData))
         {
             var hcconso = consolidation as PingCastleReportCollection <HealthcheckData>;
             var report = new ReportHealthCheckConsolidation();
             report.GenerateReportFile(hcconso, License, "ad_hc_summary.html");
             ReportHealthCheckMapBuilder nodeAnalyzer = new ReportHealthCheckMapBuilder(hcconso);
             nodeAnalyzer.Log = Console.WriteLine;
             nodeAnalyzer.GenerateReportFile("ad_hc_summary_full_node_map.html");
             nodeAnalyzer.FullNodeMap = false;
             nodeAnalyzer.CenterDomainForSimpliedGraph = CenterDomainForSimpliedGraph;
             nodeAnalyzer.GenerateReportFile("ad_hc_summary_simple_node_map.html");
             var mapReport = new ReportNetworkMap();
             mapReport.GenerateReportFile(hcconso, License, "ad_hc_hilbert_map.html");
         }
         else if (typeof(T) == typeof(CompromiseGraphData))
         {
             var gcconso = consolidation as PingCastleReportCollection <CompromiseGraphData>;
             var report = new ReportCompromiseGraphConsolidation();
             report.GenerateReportFile(gcconso, License, "ad_cg_summary.html");
         }
     }
                      ));
 }
コード例 #3
0
        public bool CartoTask(bool PerformHealthCheckGenerateDemoReports)
        {
            List <HealthcheckAnalyzer.ReachableDomainInfo> domains = null;

            StartTask("Exploration",
                      () =>
            {
                HealthcheckAnalyzer hcroot = new HealthcheckAnalyzer();
                domains = hcroot.GetAllReachableDomains(Port, Credential);
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.WriteLine("List of domains that will be queried");
                Console.ResetColor();
                foreach (var domain in domains)
                {
                    Console.WriteLine(domain.domain);
                }
            });
            var consolidation = new PingCastleReportCollection <HealthcheckData>();

            StartTask("Examining all domains in parallele (this can take a few minutes)",
                      () =>
            {
                BlockingQueue <string> queue = new BlockingQueue <string>(30);
                int numberOfThread           = 100;
                Thread[] threads             = new Thread[numberOfThread];
                try
                {
                    ThreadStart threadFunction = () =>
                    {
                        for (; ;)
                        {
                            string domain = null;
                            if (!queue.Dequeue(out domain))
                            {
                                break;
                            }
                            try
                            {
                                Console.WriteLine("[" + DateTime.Now.ToLongTimeString() + "] " + "Starting the analysis of " + domain);
                                HealthcheckAnalyzer hc = new HealthcheckAnalyzer();
                                var data = hc.GenerateCartoReport(domain, Port, Credential, AnalyzeReachableDomains);
                                consolidation.Add(data);
                                Console.WriteLine("[" + DateTime.Now.ToLongTimeString() + "] " + "Analysis of " + domain + " completed with success");
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine("[" + DateTime.Now.ToLongTimeString() + "] " + "Analysis of " + domain + " failed");
                                Trace.WriteLine("Exception while analysing domain " + domain + " : " + ex.Message);
                                Trace.WriteLine(ex.StackTrace);
                            }
                        }
                    };
                    // Consumers
                    for (int i = 0; i < numberOfThread; i++)
                    {
                        threads[i] = new Thread(threadFunction);
                        threads[i].Start();
                    }
                    foreach (var domain in domains)
                    {
                        queue.Enqueue(domain.domain);
                    }
                    queue.Quit();
                    Trace.WriteLine("examining domains file completed. Waiting for worker thread to complete");
                    for (int i = 0; i < numberOfThread; i++)
                    {
                        threads[i].Join();
                    }
                    Trace.WriteLine("Done examining domains");
                }
                catch (Exception ex)
                {
                    Trace.WriteLine("Exception while analysing domain in carto: " + ex.Message);
                    Trace.WriteLine(ex.StackTrace);
                }
                finally
                {
                    queue.Quit();
                    for (int i = 0; i < numberOfThread; i++)
                    {
                        if (threads[i] != null)
                        {
                            if (threads[i].ThreadState == System.Threading.ThreadState.Running)
                            {
                                threads[i].Abort();
                            }
                        }
                    }
                }
            });
            if (PerformHealthCheckGenerateDemoReports)
            {
                Console.WriteLine("Performing demo report transformation");
                Trace.WriteLine("Performing demo report transformation");
                consolidation = PingCastleReportHelper <HealthcheckData> .TransformReportsToDemo(consolidation);
            }
            if (!StartTask("Healthcheck consolidation",
                           () =>
            {
                consolidation.EnrichInformation();
                ReportHealthCheckMapBuilder nodeAnalyzer = new ReportHealthCheckMapBuilder(consolidation, License);
                nodeAnalyzer.Log = Console.WriteLine;
                nodeAnalyzer.CenterDomainForSimpliedGraph = CenterDomainForSimpliedGraph;
                nodeAnalyzer.GenerateReportFile("ad_carto_full_node_map.html");
                nodeAnalyzer.FullNodeMap = false;
                nodeAnalyzer.CenterDomainForSimpliedGraph = CenterDomainForSimpliedGraph;
                nodeAnalyzer.GenerateReportFile("ad_carto_simple_node_map.html");
            }
                           ))
            {
                return(false);
            }
            return(true);
        }