import subprocess from utils import prettyprint def resolve_by_spf(domain): output = subprocess.run(["nslookup", "-q=TXT", domain], capture_output=True) lines = output.stdout.decode().split('\n') result = [] for line in lines: res = line.find('v=spf') if res == -1: continue values = line[res:].split() for val in values: if val.startswith("include:"): result += resolve_by_spf(val[8:].strip()) if val.startswith("ip4:"): result.append(val[4:].strip()) return list(dict.fromkeys(result)) def main(): ips = resolve_by_spf("_spf.google.com") with open('ips.txt', 'a') as out: for ip in ips: out.write(prettyprint(ip, 'google (spf)') + '\n')