-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathrecord.py
108 lines (92 loc) · 2.99 KB
/
record.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
from output import bcolors
import whois
from enum import Enum
class CheckResults(Enum):
PASS = 'pass'
FAIL = 'fail'
WARNING = 'warn'
INFO = 'info'
class Provider:
def __init__(self):
self.lookup = ''
self.org = ''
self.registrar = ''
self.banner = ''
self.subdata = None
def set_lookup(self, val):
self.lookup = val
def set_whois(self, org, reg):
self.org = org
self.registrar = reg
def set_banner(self, val):
self.banner = val
def set_subdata(self, d):
self.subdata = d
@property
def get_lookup(self):
return self.lookup
@property
def is_set(self):
return self.org or self.lookup or self.banner
def print(self):
if not self.is_set and not self.registrar:
return ''
else:
tok = [' (']
if self.lookup:
tok.append(self.lookup + ',')
if self.org:
tok.append('OrgName: ' + self.org + ',')
if self.registrar:
tok.append('Registrar: ' + self.registrar + ',')
if self.banner:
tok.append('Banner: ' + self.banner)
tok.append(')')
return ' '.join(tok)
class Record():
rectype = ''
def __init__(self, rec, base, quiet=False):
self.record = rec.lower().strip().strip('.')
self.base = base.lower()
self.provider = Provider()
self.results = {}
self.quiet = quiet
def print_console(self, data=None):
if self.quiet:
return
# if no data -> regular printing for get_record()
if data is None:
print(bcolors.OKGREEN + self.record + bcolors.OKBLUE + self.provider.print() + bcolors.ENDC)
# if data -> printing results from record check
else:
print(self.get_color(data[0]), data[1], bcolors.ENDC)
def print_results(self):
for (k,v) in self.results.items():
# if v[0] != CheckResults.PASS:
print(f"\t{self.rectype} ({k}):", self.get_color(v[0]), v[1], bcolors.ENDC)
def get_color(self, res):
if res == CheckResults.PASS:
color = bcolors.OKCYAN
elif res == CheckResults.FAIL:
color = bcolors.FAIL
elif res == CheckResults.WARNING:
color = bcolors.WARNING
else:
color = bcolors.PLAIN
return color
def check_provider(self, providers=None, base=None):
import time
time.sleep(1)
if providers is not None:
# list lookup
for (k,v) in providers.items():
if k in self.record:
self.provider.set_lookup(v)
break
# check whois for arin info
try:
res = whois.whois(self.record)
self.provider.set_whois(res.org, res.registrar)
except whois.parser.PywhoisError:
# means NXDOMAIN, but we won't do anything here
pass