📅  最后修改于: 2023-12-03 14:47:32.227000             🧑  作者: Mango
SpoofThatMail 是一款用于检查域名是否可以被欺骗的工具。它主要使用了 DMARC (Domain-based Message Authentication, Reporting and Conformance) 标准来验证域名是否可以被伪造。
DMARC 是一种基于 SPF (Sender Policy Framework) 和 DKIM (DomainKeys Identified Mail) 的标准,它可以帮助邮件服务器判断一封邮件是否为伪造。当一个邮件服务器收到一封邮件时,它会查找邮件头中是否有 SPF 和 DKIM 记录,根据这些记录来判断邮件的真伪性。如果 DMARC 记录中指定了接收方对未能通过 SPF 或 DKIM 验证的邮件的处理措施,那么邮件服务器将按照 DMARC 记录中的指示来处理这些邮件。
SpoofThatMail 使用了一个公共的 DMARC 测试服务器来查询指定域名的 DMARC 记录,并根据 DMARC 记录中设置的策略来判断这个域名是否可以被欺骗。
你可以通过以下步骤来使用 SpoofThatMail:
pip install -r requirements.txt
。python spoofthatmail.py example.com
命令来测试 example.com 域名是否可以被欺骗。首先,导入必要的库:
import requests
import xml.etree.ElementTree as ET
import sys
然后,定义一个函数 query_dmarc_record(domain)
,用于查询指定域名的 DMARC 记录。这里使用了一个公共的 DMARC 测试服务器,可以将 query_dmarc_record(domain)
函数理解为向这个服务器发送了一个 HTTP 请求。
def query_dmarc_record(domain):
try:
response = requests.get(f'https://mxtoolbox.com/api/dmarc/lookup/xml/?argument={domain}')
tree = ET.fromstring(response.text)
if tree.find('dmarc').find('records').find('record').find('rule').text == 'none':
return 'No DMARC record found!'
else:
dmarc_record = tree.find('dmarc').find('records').find('record').find('txtdata').text
return dmarc_record
except:
print('Error: Failed to query DMARC record!')
sys.exit()
接下来是主函数 main()
。首先,检查命令行参数是否合法,如果不合法则打印错误信息并退出程序。
def main():
if len(sys.argv) != 2:
print('Usage: python spoofthatmail.py <domain>')
sys.exit()
else:
domain = sys.argv[1]
接下来,调用 query_dmarc_record(domain)
函数来查询指定域名的 DMARC 记录,并打印查询结果。
print(f"Querying DMARC record for {domain}...\n")
dmarc_record = query_dmarc_record(domain)
print(f"DMARC record for {domain}: {dmarc_record}\n")
接着,解析 DMARC 记录,打印 DMARC 策略和报告地址。
dmarc_policy = 'unknown'
dmarc_rua = 'unknown'
if dmarc_record:
try:
for record in dmarc_record.split(';'):
record = record.strip()
if record.startswith('p='):
dmarc_policy = record.split('=')[1]
elif record.startswith('rua='):
dmarc_rua = record.split('=')[1]
print(f"DMARC policy: {dmarc_policy}")
print(f"DMARC report address: {dmarc_rua}\n")
except:
print('Error: Failed to parse DMARC record!')
sys.exit()
最后,根据 DMARC 策略来判断域名是否可以被欺骗。根据 DMARC 记录中设置的处理措施来判断是否可以欺骗。
if dmarc_policy == 'none':
print('The domain does not have DMARC policy set, it can be spoofed.')
elif dmarc_policy == 'reject':
print('The domain has configured DMARC policy "reject", it cannot be spoofed.')
elif dmarc_policy == 'quarantine':
print('The domain has configured DMARC policy "quarantine", it may be spoofed.')
else:
print('Unknown DMARC policy, unable to determine if it can be spoofed.')
以上就是 SpoofThatMail 的介绍和代码解析。通过这个简单的工具,我们可以很容易地查询一个域名的 DMARC 记录,并根据 DMARC 策略来判断这个域名是否可以被欺骗。当然,这个工具只是一个简单地示例,实际上 DMARC 的检查远比这个复杂得多,如果你需要更加完备的 DMARC 检查工具,可以考虑使用已有的第三方库。