diff --git a/satori/dns.py b/satori/dns.py index feb9831..fb0e5d9 100644 --- a/satori/dns.py +++ b/satori/dns.py @@ -55,6 +55,19 @@ def get_registered_domain(hostname): return tldextract.extract(hostname).registered_domain +def ip_info(ip): + """Get as much information as possible for a given ip address.""" + if not utils.is_valid_ip_address(ip): + error = "`%s` is an invalid IP address." % ip + raise errors.SatoriInvalidIP(error) + + result = pythonwhois.get_whois(ip) + + return { + 'whois': result['raw'] + } + + def domain_info(domain): """Get as much information as possible for a given domain name.""" registered_domain = get_registered_domain(domain) @@ -87,3 +100,11 @@ def domain_info(domain): 'days_until_expires': days_until_expires, 'expiration_date': expires, } + + +def netloc_info(netloc): + """Determine if netloc is an IP or domain name.""" + if utils.is_valid_ip_address(netloc): + ip_info(netloc) + else: + domain_info(netloc) diff --git a/satori/errors.py b/satori/errors.py index 9b53b49..e9aa0c0 100644 --- a/satori/errors.py +++ b/satori/errors.py @@ -31,6 +31,11 @@ class SatoriInvalidDomain(SatoriException): """Invalid Domain provided.""" +class SatoriInvalidIP(SatoriException): + + """Invalid IP provided.""" + + class SatoriShellException(SatoriException): """Invalid shell parameters.""" diff --git a/satori/tests/test_dns.py b/satori/tests/test_dns.py index 5bf4962..7203625 100644 --- a/satori/tests/test_dns.py +++ b/satori/tests/test_dns.py @@ -276,5 +276,19 @@ class TestDNS(utils.TestCase): "192.168.0.1" ) + def test_ip_info_raises_invalid_ip_error(self): + self.assertRaises( + errors.SatoriInvalidIP, + dns.ip_info, + "example.com" + ) + + def test_ip_info_raises_invalid_ip_error_bad_ip(self): + self.assertRaises( + errors.SatoriInvalidIP, + dns.ip_info, + "1.2.3" + ) + if __name__ == "__main__": unittest.main()