Вот немного очищенная рекурсивная функция с правильно локальной переменной.
import dns.resolver
def get_spf_count(domain_name, dns_resolver=None):
if dns_resolver is None:
dns_resolver = dns.resolver.Resolver()
dns_resolver.nameservers = ['1.1.1.1', '1.0.0.1']
resolve_count = 0
for answer in dns_resolver.query(domain_name, 'TXT'):
spf = answer.to_text() if 'v=spf1' in answer.to_text() else None
if spf:
spf_records = [
record
for record in spf.replace('" "', '').replace('"', '').split()
if record not in ['v=spf1', '~all', '-all', '+all', '?all']
]
for record in spf_records:
if 'include:' in record:
check_domain = record.split(':')[1]
resolve_count += 1 + get_spf_count(check_domain, dns_resolver)
elif record.startswith(('a:', 'mx:', 'ptr:', 'exists:')):
resolve_count += 1
return resolve_count
print(get_spf_count('google.com'))
Обратите внимание, что все функции, необходимые для этой функции, являются локальными внутри функции, включая объект dns.resolver.Resolver()
(и какесли хотите, передайте объект общего резолвера.