diff --git a/satori/dns.py b/satori/dns.py index 7e8ff8d..979254c 100644 --- a/satori/dns.py +++ b/satori/dns.py @@ -57,15 +57,21 @@ def domain_info(domain): registrar = [] if 'registrar' in result and len(result['registrar']) > 0: registrar = result['registrar'][0] - expires = result['expiration_date'][0] - if not isinstance(expires, datetime.datetime): - expires = dateutil.parser.parse(expires) - days_until_expires = (expires - datetime.datetime.now()).days + nameservers = result.get('nameservers', []) + days_until_expires = None + expires = None + if 'expiration_date' in result: + if (isinstance(result['expiration_date'], list) + and len(result['expiration_date']) > 0): + expires = result['expiration_date'][0] + if not isinstance(expires, datetime.datetime): + expires = dateutil.parser.parse(expires) + days_until_expires = (expires - datetime.datetime.now()).days return { 'name': domain, 'whois': result['raw'], 'registrar': registrar, - 'nameservers': result['nameservers'], + 'nameservers': nameservers, 'days_until_expires': days_until_expires, 'expiration_date': expires, } diff --git a/satori/shell.py b/satori/shell.py index 877cd14..42918e4 100644 --- a/satori/shell.py +++ b/satori/shell.py @@ -137,10 +137,13 @@ def output_results(discovered_target, results): if 'domain' in results: print(u"Domain: %s" % results['domain']['name']) print(u"\tRegistrar: %s" % results['domain']['registrar']) - print(u"\tNameservers: %s" % ( - ", ".join(results['domain']['nameservers']) - )) - print(u"\tExpires: %d days" % results['domain']['days_until_expires']) + if results['domain']['nameservers']: + print(u"\tNameservers: %s" % ( + ", ".join(results['domain']['nameservers']) + )) + if results['domain'].get('days_until_expires') is not None: + print(u"\tExpires: %d days" % + results['domain']['days_until_expires']) if 'host' in results: host = results['host'] diff --git a/satori/tests/test_dns.py b/satori/tests/test_dns.py index fb564cb..e7813bc 100644 --- a/satori/tests/test_dns.py +++ b/satori/tests/test_dns.py @@ -163,6 +163,13 @@ class TestDNS(utils.TestCase): data['nameservers'] ) + def test_domain_info_returns_nameservers_as_list(self): + data = dns.domain_info(self.domain) + self.assertIsInstance( + data['nameservers'], + list + ) + def test_domain_info_returns_registrar_from_whois(self): data = dns.domain_info(self.domain) self.assertEqual( @@ -208,6 +215,21 @@ class TestDNS(utils.TestCase): data['days_until_expires'] ) + def test_domain_info_returns_none_for_days_until_expires(self): + small_whois = [""" + Domain : example.io + Status : Live + + NS 1 : dns1.example.com + NS 2 : dns2.example.com + """] + self.mynet.get_whois_raw.return_value = small_whois + data = dns.domain_info(self.domain) + self.assertEqual( + data['days_until_expires'], + None + ) + def test_domain_info_returns_array_of_strings_whois_data(self): data = dns.domain_info(self.domain) self.assertIsInstance(data['whois'][0], str) @@ -235,5 +257,20 @@ class TestDNS(utils.TestCase): datetime.datetime ) + def test_domain_info_returns_none_for_missing_expiration_date(self): + small_whois = [""" + Domain : example.io + Status : Live + + NS 1 : dns1.example.com + NS 2 : dns2.example.com + """] + self.mynet.get_whois_raw.return_value = small_whois + data = dns.domain_info(self.domain) + self.assertEqual( + data['expiration_date'], + None + ) + if __name__ == "__main__": unittest.main()