36 lines
937 B
Python
36 lines
937 B
Python
from os.path import split
|
|
import dns.resolver
|
|
import ipaddress
|
|
|
|
|
|
def parse_spf_parts(part):
|
|
if part.startswith('ip4:'):
|
|
return [part[4:]]
|
|
elif part.startswith('ip6:'):
|
|
return [part[4:]]
|
|
elif part.startswith('include'):
|
|
return get_spf_record(part[8:])
|
|
elif part.startswith('a'):
|
|
addresses = []
|
|
for address in dns.resolver.resolve_name(part[2:]).addresses():
|
|
addresses.append(address)
|
|
return addresses
|
|
else:
|
|
return []
|
|
|
|
|
|
def get_spf_record(domain_name):
|
|
spf_record = ''
|
|
servers = []
|
|
txt_records = dns.resolver.resolve(domain_name, 'TXT')
|
|
for record in txt_records:
|
|
if record.to_text().find('v=spf1') > 0:
|
|
spf_record = record.to_text()
|
|
parts = spf_record.split()
|
|
for part in parts:
|
|
servers += (parse_spf_parts(part))
|
|
return servers
|
|
|
|
|
|
spf_servers = get_spf_record('trivago.com')
|
|
print(spf_servers)
|