コード例 #1
0
        public DomainScan Scan()
        {
            return(NamedLocker.RunWithLock(_domain.Uri, () =>
            {
                _logger.LogInformation($"Scanning domain {_domain.Uri}");
                var uri = new Uri(_domain.Uri);
                var hostEntry = _lookupClient.GetHostEntry(uri.Host);
                if (hostEntry != null && hostEntry.AddressList.Any())
                {
                    var msg = $"{uri.Host} resolved to the following IP addresses: " +
                              $"{string.Join(", ", hostEntry.AddressList.Select(x => x))}";
                    _messages.Add(msg);

                    _logger.LogDebug(msg);

                    var ip = hostEntry.AddressList.First();
                    OpenSslConnection(uri.Host, ip, uri.Port);
                }
                var domainCert = DomainCertificate.FromX509Certificate2(_certificate, CertificateSource.TrackedDomain);
                _certificate?.Dispose();

                var domainScan = new DomainScan
                {
                    DateScan = DateTime.UtcNow,
                    DomainCertificate = domainCert,
                    ScanResult = string.Join("\r\n", _messages),
                    ScanSuccess = domainCert != null,
                    ScanStatus = _scanStatus
                };
                _logger.LogInformation($"Domain scan finished {(domainScan.ScanSuccess ? "successfully" : "unsuccessfully")} " +
                                       $"for {_domain.Uri}");

                return domainScan;
            }));
        }