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; })); }