Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/dnsviz/dnsviz.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCasey Deccio <casey@deccio.net>2019-06-28 22:44:58 +0300
committerCasey Deccio <casey@deccio.net>2019-06-28 22:44:58 +0300
commit6e8451ce2944eef0c64f629fa99f2ef8bcce661f (patch)
tree31f1817c8410972ddd3b03f96ea7fbf32fe89876
parent54de8186268d9025645e3c5fcfceab2bdc9f5fc7 (diff)
Populate server status
-rw-r--r--dnsviz/analysis/offline.py42
-rw-r--r--dnsviz/analysis/status.py16
2 files changed, 58 insertions, 0 deletions
diff --git a/dnsviz/analysis/offline.py b/dnsviz/analysis/offline.py
index a3db2e0..f155b1c 100644
--- a/dnsviz/analysis/offline.py
+++ b/dnsviz/analysis/offline.py
@@ -776,6 +776,47 @@ class OfflineDomainNameAnalysis(OnlineDomainNameAnalysis):
(not x.effective_tcp and x.udp_responsive)) and \
(not require_valid or x.is_valid_response()))
+ def _initialize_server_checklist(self):
+ self.server_checklist = OrderedDict()
+
+ if not self.is_zone():
+ return
+
+ for status in ('UDP_RESPONSIVE', 'TCP_RESPONSIVE'):
+ self.server_checklist[status] = {}
+
+ for query in self.queries.values():
+ for query1 in query.queries.values():
+ for server in query1.responses:
+ for client in query1.responses[server]:
+ response = query1.responses[server][client]
+ if response.udp_attempted:
+ if response.udp_responsive:
+ if server not in self.server_checklist['UDP_RESPONSIVE']:
+ self.server_checklist['UDP_RESPONSIVE'][server] = Status.ServerStatusResponsive('UDP_RESPONSIVE', Status.SERVER_CHECKLIST_STATUS_OK)
+ elif self.server_checklist['UDP_RESPONSIVE'][server].status == Status.SERVER_CHECKLIST_STATUS_ERROR:
+ self.server_checklist['UDP_RESPONSIVE'][server].status = Status.SERVER_CHECKLIST_STATUS_WARNING
+ self.server_checklist['UDP_RESPONSIVE'][server].successes += 1
+ else:
+ if server not in self.server_checklist['UDP_RESPONSIVE']:
+ self.server_checklist['UDP_RESPONSIVE'][server] = Status.ServerStatusResponsive('UDP_RESPONSIVE', Status.SERVER_CHECKLIST_STATUS_ERROR)
+ elif self.server_checklist['UDP_RESPONSIVE'][server].status == Status.SERVER_CHECKLIST_STATUS_OK:
+ self.server_checklist['UDP_RESPONSIVE'][server].status = Status.SERVER_CHECKLIST_STATUS_WARNING
+ self.server_checklist['UDP_RESPONSIVE'][server].failures += 1
+ if response.tcp_attempted:
+ if response.tcp_responsive:
+ if server not in self.server_checklist['TCP_RESPONSIVE']:
+ self.server_checklist['TCP_RESPONSIVE'][server] = Status.ServerStatusResponsive('TCP_RESPONSIVE', Status.SERVER_CHECKLIST_STATUS_OK)
+ elif self.server_checklist['TCP_RESPONSIVE'][server].status == Status.SERVER_CHECKLIST_STATUS_ERROR:
+ self.server_checklist['TCP_RESPONSIVE'][server].status = Status.SERVER_CHECKLIST_STATUS_WARNING
+ self.server_checklist['TCP_RESPONSIVE'][server].successes += 1
+ else:
+ if server not in self.server_checklist['TCP_RESPONSIVE']:
+ self.server_checklist['TCP_RESPONSIVE'][server] = Status.ServerStatusResponsive('TCP_RESPONSIVE', Status.SERVER_CHECKLIST_STATUS_ERROR)
+ elif self.server_checklist['TCP_RESPONSIVE'][server].status == Status.SERVER_CHECKLIST_STATUS_OK:
+ self.server_checklist['TCP_RESPONSIVE'][server].status = Status.SERVER_CHECKLIST_STATUS_WARNING
+ self.server_checklist['TCP_RESPONSIVE'][server].failures += 1
+
def populate_status(self, trusted_keys, supported_algs=None, supported_digest_algs=None, is_dlv=False, trace=None, follow_mx=True):
if trace is None:
trace = []
@@ -829,6 +870,7 @@ class OfflineDomainNameAnalysis(OnlineDomainNameAnalysis):
self.dlv_parent.populate_status(trusted_keys, supported_algs, supported_digest_algs, is_dlv=True, trace=trace + [self])
_logger.debug('Assessing status of %s...' % (fmt.humanize_name(self.name)))
+ self._initialize_server_checklist()
self._populate_name_status()
self._index_dnskeys()
self._populate_rrsig_status_all(supported_algs)
diff --git a/dnsviz/analysis/status.py b/dnsviz/analysis/status.py
index d349ded..618da37 100644
--- a/dnsviz/analysis/status.py
+++ b/dnsviz/analysis/status.py
@@ -169,6 +169,11 @@ RRSIG_SIG_LENGTH_ERRORS = {
DS_DIGEST_ALGS_STRONGER_THAN_SHA1 = (2, 4)
DS_DIGEST_ALGS_IGNORING_SHA1 = (2,)
+SERVER_CHECKLIST_STATUS_OK = 0
+SERVER_CHECKLIST_STATUS_INDETERMINATE = 1
+SERVER_CHECKLIST_STATUS_WARNING = 2
+SERVER_CHECKLIST_STATUS_ERROR = 3
+
class RRSIGStatus(object):
def __init__(self, rrset, rrsig, dnskey, zone_name, reference_ts, supported_algs):
self.rrset = rrset
@@ -1553,3 +1558,14 @@ class CNAMEFromDNAMEStatus(object):
d['errors'] = [e.serialize(consolidate_clients=consolidate_clients, html_format=html_format) for e in self.errors]
return d
+
+class ServerStatus(object):
+ def __init__(self, terse_description, status):
+ self.terse_description = terse_description
+ self.status = status
+
+class ServerStatusResponsive(ServerStatus):
+ def __init__(self, terse_description, status):
+ super(ServerStatusResponsive, self).__init__(terse_description, status)
+ self.successes = 0
+ self.failures = 0