Files
Spoofy/modules/dkim.py
2025-12-03 16:26:44 -07:00

87 lines
2.9 KiB
Python

# modules/dkim.py
import requests
class DKIM:
def __init__(self, domain, dns_server=None, api_base_url=None):
self.domain = domain
self.dns_server = dns_server
self.api_base_url = "https://archive.prove.email/api"
self.dkim_record = self.get_dkim_record()
def get_dkim_record(self):
"""Returns the DKIM records for a given domain using the API."""
try:
base_url = self.api_base_url.rstrip('/')
url = f"{base_url}/key"
params = {"domain": self.domain}
headers = {"accept": "application/json"}
response = requests.get(url, params=params, headers=headers, timeout=10)
if response.status_code == 200:
data = response.json()
return self.format_dkim_records(data)
elif response.status_code == 400:
return None
elif response.status_code == 429:
return None
elif response.status_code == 500:
return None
else:
return None
except requests.exceptions.RequestException:
return None
except (KeyError, ValueError, TypeError):
return None
def format_dkim_records(self, api_response):
"""Formats the API response into a readable string format."""
combined_txt_records = ""
if not isinstance(api_response, list):
return None
records_by_key = {}
for record in api_response:
if not isinstance(record, dict):
continue
selector = record.get("selector", "unknown")
domain = record.get("domain", self.domain)
value = record.get("value", "")
last_seen = record.get("lastSeenAt", "")
key = f"{selector}._domainkey.{domain}"
if key not in records_by_key:
records_by_key[key] = record
else:
existing_last_seen = records_by_key[key].get("lastSeenAt", "")
if last_seen > existing_last_seen:
records_by_key[key] = record
for key, record in records_by_key.items():
selector = record.get("selector", "unknown")
domain = record.get("domain", self.domain)
value = record.get("value", "")
if len(value) > 128:
trimmed_value = value[:128] + "...(trimmed)"
else:
trimmed_value = value
combined_txt_records += (
f"[*] {selector}._domainkey.{domain} -> {trimmed_value}\r\n"
)
if combined_txt_records:
return combined_txt_records.strip()
else:
return None
def __str__(self):
return f"DKIM Record: {self.dkim_record}"