From 369137ae9973a6913bbdd7485de6e4902d73185c Mon Sep 17 00:00:00 2001 From: Sokratis Alichanidis Date: Sat, 3 May 2025 23:36:14 +0200 Subject: [PATCH] Add functions to get and parse SPF records --- .gitignore | 1 + pymsgcheck.py | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 pymsgcheck.py diff --git a/.gitignore b/.gitignore index ab3e8ce..5566902 100644 --- a/.gitignore +++ b/.gitignore @@ -162,3 +162,4 @@ cython_debug/ # option (not recommended) you can uncomment the following to ignore the entire idea folder. #.idea/ +/.idea/ diff --git a/pymsgcheck.py b/pymsgcheck.py new file mode 100644 index 0000000..bfc6ced --- /dev/null +++ b/pymsgcheck.py @@ -0,0 +1,36 @@ +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)