Пример #1
0
        /// <summary>
        /// 所有服务控制中心
        /// </summary>
        public static void Init()
        {
            //基础服务
            BaseHost.Init(false);
            //特巡报告服务
            ReportHost.Init(false);
            //用户信息服务
            UserHost.Init(false);

            //Web管理后台特巡报告服务
            PatrolHost.Init(false);
        }
            public GetReportsResponse Beautify()
            {
                GetReportsResponse ret = null;

                if (this.Status.Status == "200")
                {
                    ret = new GetReportsResponse();
                    if (null != this.Report)
                    {
                        ret.Results = new List <GetReportsResponse.Result>();
                        foreach (WelcomeReport report in this.Report)
                        {
                            var r = new GetReportsResponse.Result();

                            r.Id = report.Id?.Id;
                            if (TryGetValue(report.Owner, out var owner) && TryGetValue(owner.Name, out var ownerName))
                            {
                                r.Owner = ownerName;
                            }
                            if (TryGetValue(report.Name, out var name))
                            {
                                r.Name = name.ToString();
                            }

                            r.Comment      = report.Comment?.FirstOrDefault();
                            r.CreationTime = report.CreationTime.FirstOrDefault();
                            r.Writable     = report.Writable.FirstOrDefault().As <bool>();
                            r.InUse        = report.InUse.FirstOrDefault().As <bool>();
                            //r.TaskId = report.GetValue(p => p.Task).As<ReportFormat>()?.Empty?.Id?.ConvertTo<string>();
                            //r.TaskName = report.GetValue(p => p.Task).As<ReportFormat>()?.GetValue(p=>p.Name).As<string>();

                            ReportReport inner = report.Report.FirstOrDefault();
                            if (null != inner)
                            {
                                r.OmpVersion    = inner.Omp.FirstOrDefault()?.Version.FirstOrDefault();
                                r.ScanRunStatus = inner.ScanRunStatus.FirstOrDefault();
                                r.VulnsCount    = inner.Vulns.FirstOrDefault()?.Count?.FirstOrDefault();
                                r.AppCount      = inner.Apps.FirstOrDefault()?.Count.FirstOrDefault();
                                r.SslCertsCount = inner.SslCerts.FirstOrDefault()?.Count.FirstOrDefault();

                                ReportTask task = inner.Task.FirstOrDefault();
                                if (null != task)
                                {
                                    r.Task          = new GetReportsResponse.Result.TaskInfo();
                                    r.Task.Id       = task.Empty?.Id;// task.GetValue(p => p.Empty).As<Filter>()?.Id;
                                    r.Task.Name     = task.Name?.FirstOrDefault();
                                    r.Task.Comment  = task.Comment?.FirstOrDefault();
                                    r.Task.TargetId = task.Target?.FirstOrDefault()?.Empty?.Id;
                                    r.Task.Progress = task.Progress?.FirstOrDefault();
                                }

                                r.ScanStart = inner.ScanStart.FirstOrDefault();

                                var ports = inner.Ports;
                                if (ports != null && ports.Length > 0)
                                {
                                    var port = ports[0];
                                    if (null != port && null != port.Port)
                                    {
                                        r.Ports = new List <GetReportsResponse.Result.PortInfo>();
                                        foreach (PortPort prt in port.Port)
                                        {
                                            var entity = new GetReportsResponse.Result.PortInfo();

                                            entity.Port     = prt.Empty;
                                            entity.Host     = prt.Host?.FirstOrDefault();
                                            entity.Severity = prt.Severity?.FirstOrDefault()?.As <double>();
                                            entity.Threat   = prt.Threat?.FirstOrDefault();

                                            r.Ports.Add(entity);
                                        }
                                    }
                                }

                                var resultsArr = inner.Results;
                                if (resultsArr != null && resultsArr.Length > 0)
                                {
                                    var results = resultsArr[0];
                                    if (null != results && null != results.Result)
                                    {
                                        r.Results = new List <ResultInfo>();
                                        foreach (ResultResult result in results.Result)
                                        {
                                            var entity = new ResultInfo();

                                            entity.Id               = result.Empty?.Id;
                                            entity.Name             = result.Name?.FirstOrDefault();
                                            entity.Owner            = result.Owner?.FirstOrDefault()?.Name.FirstOrDefault();
                                            entity.Comment          = result.Comment?.FirstOrDefault();
                                            entity.CreationTime     = result.CreationTime?.FirstOrDefault();
                                            entity.ModificationTime = result.ModificationTime?.FirstOrDefault();
                                            entity.Host             = result.Host?.FirstOrDefault()?.Empty;
                                            entity.AssetId          = result.Host?.FirstOrDefault().Asset?.FirstOrDefault()?.Empty?.AssetId;
                                            entity.Port             = result.Port?.FirstOrDefault();

                                            var nvt = result.Nvt.FirstOrDefault();
                                            if (null != nvt)
                                            {
                                                entity.Nvt          = new NvtInfo();
                                                entity.Nvt.Oid      = nvt.Empty?.Oid;
                                                entity.Nvt.Type     = nvt.Type?.FirstOrDefault();
                                                entity.Nvt.Name     = nvt.Name?.FirstOrDefault();
                                                entity.Nvt.Family   = nvt.Family?.FirstOrDefault();
                                                entity.Nvt.CvssBase = nvt.CvssBase?.FirstOrDefault();
                                                entity.Nvt.Cve      = nvt.Cve?.FirstOrDefault();
                                                entity.Nvt.Bid      = nvt.Bid?.FirstOrDefault();
                                                entity.Nvt.Xref     = nvt.Xref?.FirstOrDefault();
                                                entity.Nvt.Tags     = nvt.Tags?.FirstOrDefault();
                                                entity.Nvt.Cert     = nvt.Cert?.FirstOrDefault()?.ToString();
                                            }

                                            entity.ScanNvtVersion  = result.ScanNvtVersion?.FirstOrDefault();
                                            entity.Threat          = result.Threat?.FirstOrDefault();
                                            entity.Severity        = result.Severity?.FirstOrDefault();
                                            entity.Qod             = result.Qod?.FirstOrDefault()?.Value?.FirstOrDefault().ToString();
                                            entity.QodType         = result.Qod?.FirstOrDefault()?.Type.FirstOrDefault();
                                            entity.Description     = result.Description?.FirstOrDefault();
                                            entity.OrginalThreat   = result.OriginalThreat?.FirstOrDefault();
                                            entity.OrginalSeverity = result.OriginalSeverity?.FirstOrDefault()?.As <double>();
                                            entity.Notes           = result.Notes?.FirstOrDefault();
                                            entity.Overrides       = result.Overrides?.FirstOrDefault();

                                            r.Results.Add(entity);
                                        }
                                    }

                                    ReportResultCount[] resultCountArr = inner.ResultCount;
                                    if (null != resultCountArr && 0 != resultCountArr.Length)
                                    {
                                        ReportResultCount resultCount = resultCountArr[0];
                                        if (null != resultCount)
                                        {
                                            r.ResultCount               = new GetReportsResponse.Result.ResultCountInfo();
                                            r.ResultCount.Total         = resultCount.Empty;
                                            r.ResultCount.Debug         = resultCount.Debug?.FirstOrDefault()?.Full?.FirstOrDefault()?.As <int>();
                                            r.ResultCount.Hole          = resultCount.Hole?.FirstOrDefault()?.Full?.FirstOrDefault()?.As <int>();
                                            r.ResultCount.Info          = resultCount.Info?.FirstOrDefault()?.Full?.FirstOrDefault()?.As <int>();
                                            r.ResultCount.Log           = resultCount.Log?.FirstOrDefault()?.Full?.FirstOrDefault()?.As <int>();
                                            r.ResultCount.Warning       = resultCount.Warning?.FirstOrDefault()?.Full?.FirstOrDefault()?.As <int>();
                                            r.ResultCount.FalsePositive = resultCount.FalsePositive?.FirstOrDefault()?.Full?.FirstOrDefault()?.As <int>();
                                        }
                                    }

                                    r.Severity = inner.Severity?.FirstOrDefault()?.Full?.FirstOrDefault().As <double>();

                                    ReportHost host = inner.Host?.FirstOrDefault();
                                    if (null != host)
                                    {
                                        r.Host = new GetReportsResponse.Result.HostInfo();
                                        var model = r.Host;
                                        model.Ip        = host.Ip?.FirstOrDefault();
                                        model.AssetId   = host.Asset?.FirstOrDefault()?.Empty?.AssetId;
                                        model.Start     = host.Start?.FirstOrDefault();
                                        model.End       = host.End?.FirstOrDefault();
                                        model.PortCount = host.PortCount?.FirstOrDefault()?.Page?.FirstOrDefault();
                                        var rcArr = host.ResultCount;
                                        if (null != rcArr && 0 != rcArr.Length)
                                        {
                                            var rc = rcArr[0];
                                            model.ResultCount               = new GetReportsResponse.Result.ResultCountInfo();
                                            model.ResultCount.Total         = rc.Page?.FirstOrDefault();
                                            model.ResultCount.Hole          = rc.Hole?.FirstOrDefault()?.Page?.FirstOrDefault();
                                            model.ResultCount.Warning       = rc.Warning?.FirstOrDefault()?.Page?.FirstOrDefault();
                                            model.ResultCount.Info          = rc.Info?.FirstOrDefault()?.Page?.FirstOrDefault();
                                            model.ResultCount.Log           = rc.Log?.FirstOrDefault()?.Page?.FirstOrDefault();
                                            model.ResultCount.FalsePositive = rc.FalsePositive?.FirstOrDefault()?.Page?.FirstOrDefault();
                                        }
                                        var details = host.Detail;
                                        if (null != details && 0 != details.Length)
                                        {
                                            model.Details = new List <GetReportsResponse.Result.HostInfo.Detail>();
                                            foreach (var detail in details)
                                            {
                                                var d = new GetReportsResponse.Result.HostInfo.Detail();

                                                d.Name              = detail.Name?.FirstOrDefault();
                                                d.Value             = detail.Value?.FirstOrDefault();
                                                d.SourceType        = detail.Source?.FirstOrDefault()?.Type?.FirstOrDefault();
                                                d.SourceName        = detail.Source?.FirstOrDefault()?.Name?.FirstOrDefault();
                                                d.SourceDescription = detail.Source?.FirstOrDefault()?.Description.FirstOrDefault();
                                                d.Extra             = detail.Extra?.FirstOrDefault();

                                                model.Details.Add(d);
                                            }
                                        }
                                    }

                                    var hostStart = inner.HostStart?.FirstOrDefault();
                                    if (null != hostStart)
                                    {
                                        r.HostStart     = hostStart.Empty;
                                        r.HostStartHost = hostStart.HostHost?.FirstOrDefault();
                                    }
                                    var hostEnd = inner.HostEnd?.FirstOrDefault();
                                    if (null != hostEnd)
                                    {
                                        r.HostEnd     = hostEnd.Empty;
                                        r.HostEndHost = hostEnd.HostHost?.FirstOrDefault();
                                    }
                                    r.ScanEnd      = inner.ScanEnd?.FirstOrDefault();
                                    r.ErrorCount   = inner.Errors?.FirstOrDefault()?.Count?.FirstOrDefault();
                                    r.ReportFormat = inner.ReportFormat?.FirstOrDefault();
                                }
                            }

                            ret.Results.Add(r);
                        }
                    }

                    ret.Filters = this.Filters?.FirstOrDefault()?.Term?.FirstOrDefault();
                    if (null != this.Sort && 0 < this.Sort.Length)
                    {
                        var s = this.Sort[0];
                        ret.Sort = s.Field?.FirstOrDefault()?.Empty + ", " + s.Field?.FirstOrDefault()?.Order?.FirstOrDefault();
                    }
                    ret.ReportCount = this.ReportCount?.FirstOrDefault()?.Empty.As <int>();
                }

                return(ret);
            }