mirror of
https://github.com/domainaware/parsedmarc.git
synced 2026-07-06 00:35:09 +00:00
fixup and tests to extract_report() to handle documented inputs (#530)
This commit is contained in:
+13
-8
@@ -591,14 +591,19 @@ def extract_report(input_):
|
|||||||
str: The extracted text
|
str: The extracted text
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
def is_base64(s):
|
||||||
|
base64_regex = re.compile(r'^[A-Za-z0-9+/=]+\Z')
|
||||||
|
return bool(base64_regex.match(s))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
file_object = BytesIO()
|
file_object = None
|
||||||
if type(input_) is str:
|
if isinstance(input_, str):
|
||||||
try:
|
if is_base64(input_):
|
||||||
file_object = BytesIO(b64decode(input_))
|
try:
|
||||||
except binascii.Error:
|
file_object = BytesIO(b64decode(input_))
|
||||||
pass
|
except binascii.Error:
|
||||||
if file_object is None:
|
pass
|
||||||
|
else:
|
||||||
file_object = open(input_, "rb")
|
file_object = open(input_, "rb")
|
||||||
elif type(input_) is bytes:
|
elif type(input_) is bytes:
|
||||||
file_object = BytesIO(input_)
|
file_object = BytesIO(input_)
|
||||||
@@ -613,7 +618,7 @@ def extract_report(input_):
|
|||||||
errors='ignore')
|
errors='ignore')
|
||||||
elif header.startswith(MAGIC_GZIP):
|
elif header.startswith(MAGIC_GZIP):
|
||||||
report = zlib.decompress(
|
report = zlib.decompress(
|
||||||
file_object.getvalue(),
|
file_object.read(),
|
||||||
zlib.MAX_WBITS | 16).decode(errors='ignore')
|
zlib.MAX_WBITS | 16).decode(errors='ignore')
|
||||||
elif header.startswith(MAGIC_XML) or header.startswith(MAGIC_JSON):
|
elif header.startswith(MAGIC_XML) or header.startswith(MAGIC_JSON):
|
||||||
report = file_object.read().decode(errors='ignore')
|
report = file_object.read().decode(errors='ignore')
|
||||||
|
|||||||
@@ -0,0 +1,592 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<feedback>
|
||||||
|
<report_metadata>
|
||||||
|
<org_name>fred.com</org_name>
|
||||||
|
<email>noreply-dmarc-support@google.com</email>
|
||||||
|
<extra_contact_info>https://support.google.com/a/answer/2466580</extra_contact_info>
|
||||||
|
<report_id>11038226378739404135</report_id>
|
||||||
|
<date_range>
|
||||||
|
<begin>1718236800</begin>
|
||||||
|
<end>1718323199</end>
|
||||||
|
</date_range>
|
||||||
|
</report_metadata>
|
||||||
|
<policy_published>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<adkim>r</adkim>
|
||||||
|
<aspf>r</aspf>
|
||||||
|
<p>none</p>
|
||||||
|
<sp>none</sp>
|
||||||
|
<pct>100</pct>
|
||||||
|
<np>none</np>
|
||||||
|
</policy_published>
|
||||||
|
<record>
|
||||||
|
<row>
|
||||||
|
<source_ip>209.85.220.69</source_ip>
|
||||||
|
<count>1</count>
|
||||||
|
<policy_evaluated>
|
||||||
|
<disposition>none</disposition>
|
||||||
|
<dkim>fail</dkim>
|
||||||
|
<spf>pass</spf>
|
||||||
|
</policy_evaluated>
|
||||||
|
</row>
|
||||||
|
<identifiers>
|
||||||
|
<header_from>example.com</header_from>
|
||||||
|
</identifiers>
|
||||||
|
<auth_results>
|
||||||
|
<spf>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
</spf>
|
||||||
|
</auth_results>
|
||||||
|
</record>
|
||||||
|
<record>
|
||||||
|
<row>
|
||||||
|
<source_ip>209.85.220.41</source_ip>
|
||||||
|
<count>2</count>
|
||||||
|
<policy_evaluated>
|
||||||
|
<disposition>none</disposition>
|
||||||
|
<dkim>pass</dkim>
|
||||||
|
<spf>fail</spf>
|
||||||
|
</policy_evaluated>
|
||||||
|
</row>
|
||||||
|
<identifiers>
|
||||||
|
<header_from>example.com</header_from>
|
||||||
|
</identifiers>
|
||||||
|
<auth_results>
|
||||||
|
<dkim>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>awbr2rp4egb35wbg4umq4e5dcoe5kc4n</selector>
|
||||||
|
</dkim>
|
||||||
|
<dkim>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>ug7nbtf4gccmlpwj322ax3p6ow6yfsug</selector>
|
||||||
|
</dkim>
|
||||||
|
<spf>
|
||||||
|
<domain>gmail.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
</spf>
|
||||||
|
</auth_results>
|
||||||
|
</record>
|
||||||
|
<record>
|
||||||
|
<row>
|
||||||
|
<source_ip>54.240.48.90</source_ip>
|
||||||
|
<count>40</count>
|
||||||
|
<policy_evaluated>
|
||||||
|
<disposition>none</disposition>
|
||||||
|
<dkim>pass</dkim>
|
||||||
|
<spf>fail</spf>
|
||||||
|
</policy_evaluated>
|
||||||
|
</row>
|
||||||
|
<identifiers>
|
||||||
|
<header_from>example.com</header_from>
|
||||||
|
</identifiers>
|
||||||
|
<auth_results>
|
||||||
|
<dkim>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>awbr2rp4egb35wbg4umq4e5dcoe5kc4n</selector>
|
||||||
|
</dkim>
|
||||||
|
<dkim>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>ug7nbtf4gccmlpwj322ax3p6ow6yfsug</selector>
|
||||||
|
</dkim>
|
||||||
|
<spf>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
</spf>
|
||||||
|
</auth_results>
|
||||||
|
</record>
|
||||||
|
<record>
|
||||||
|
<row>
|
||||||
|
<source_ip>54.240.8.31</source_ip>
|
||||||
|
<count>40</count>
|
||||||
|
<policy_evaluated>
|
||||||
|
<disposition>none</disposition>
|
||||||
|
<dkim>pass</dkim>
|
||||||
|
<spf>fail</spf>
|
||||||
|
</policy_evaluated>
|
||||||
|
</row>
|
||||||
|
<identifiers>
|
||||||
|
<header_from>example.com</header_from>
|
||||||
|
</identifiers>
|
||||||
|
<auth_results>
|
||||||
|
<dkim>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>awbr2rp4egb35wbg4umq4e5dcoe5kc4n</selector>
|
||||||
|
</dkim>
|
||||||
|
<dkim>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>ug7nbtf4gccmlpwj322ax3p6ow6yfsug</selector>
|
||||||
|
</dkim>
|
||||||
|
<spf>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
</spf>
|
||||||
|
</auth_results>
|
||||||
|
</record>
|
||||||
|
<record>
|
||||||
|
<row>
|
||||||
|
<source_ip>54.240.8.33</source_ip>
|
||||||
|
<count>33</count>
|
||||||
|
<policy_evaluated>
|
||||||
|
<disposition>none</disposition>
|
||||||
|
<dkim>pass</dkim>
|
||||||
|
<spf>fail</spf>
|
||||||
|
</policy_evaluated>
|
||||||
|
</row>
|
||||||
|
<identifiers>
|
||||||
|
<header_from>example.com</header_from>
|
||||||
|
</identifiers>
|
||||||
|
<auth_results>
|
||||||
|
<dkim>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>awbr2rp4egb35wbg4umq4e5dcoe5kc4n</selector>
|
||||||
|
</dkim>
|
||||||
|
<dkim>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>ug7nbtf4gccmlpwj322ax3p6ow6yfsug</selector>
|
||||||
|
</dkim>
|
||||||
|
<spf>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
</spf>
|
||||||
|
</auth_results>
|
||||||
|
</record>
|
||||||
|
<record>
|
||||||
|
<row>
|
||||||
|
<source_ip>54.240.48.92</source_ip>
|
||||||
|
<count>40</count>
|
||||||
|
<policy_evaluated>
|
||||||
|
<disposition>none</disposition>
|
||||||
|
<dkim>pass</dkim>
|
||||||
|
<spf>fail</spf>
|
||||||
|
</policy_evaluated>
|
||||||
|
</row>
|
||||||
|
<identifiers>
|
||||||
|
<header_from>example.com</header_from>
|
||||||
|
</identifiers>
|
||||||
|
<auth_results>
|
||||||
|
<dkim>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>awbr2rp4egb35wbg4umq4e5dcoe5kc4n</selector>
|
||||||
|
</dkim>
|
||||||
|
<dkim>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>ug7nbtf4gccmlpwj322ax3p6ow6yfsug</selector>
|
||||||
|
</dkim>
|
||||||
|
<spf>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
</spf>
|
||||||
|
</auth_results>
|
||||||
|
</record>
|
||||||
|
<record>
|
||||||
|
<row>
|
||||||
|
<source_ip>54.240.48.110</source_ip>
|
||||||
|
<count>24</count>
|
||||||
|
<policy_evaluated>
|
||||||
|
<disposition>none</disposition>
|
||||||
|
<dkim>pass</dkim>
|
||||||
|
<spf>fail</spf>
|
||||||
|
</policy_evaluated>
|
||||||
|
</row>
|
||||||
|
<identifiers>
|
||||||
|
<header_from>example.com</header_from>
|
||||||
|
</identifiers>
|
||||||
|
<auth_results>
|
||||||
|
<dkim>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>awbr2rp4egb35wbg4umq4e5dcoe5kc4n</selector>
|
||||||
|
</dkim>
|
||||||
|
<dkim>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>ug7nbtf4gccmlpwj322ax3p6ow6yfsug</selector>
|
||||||
|
</dkim>
|
||||||
|
<spf>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
</spf>
|
||||||
|
</auth_results>
|
||||||
|
</record>
|
||||||
|
<record>
|
||||||
|
<row>
|
||||||
|
<source_ip>209.85.220.41</source_ip>
|
||||||
|
<count>12</count>
|
||||||
|
<policy_evaluated>
|
||||||
|
<disposition>none</disposition>
|
||||||
|
<dkim>pass</dkim>
|
||||||
|
<spf>fail</spf>
|
||||||
|
</policy_evaluated>
|
||||||
|
</row>
|
||||||
|
<identifiers>
|
||||||
|
<header_from>example.com</header_from>
|
||||||
|
</identifiers>
|
||||||
|
<auth_results>
|
||||||
|
<dkim>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>awbr2rp4egb35wbg4umq4e5dcoe5kc4n</selector>
|
||||||
|
</dkim>
|
||||||
|
<dkim>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>ug7nbtf4gccmlpwj322ax3p6ow6yfsug</selector>
|
||||||
|
</dkim>
|
||||||
|
<spf>
|
||||||
|
<domain>connectivityu.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
</spf>
|
||||||
|
</auth_results>
|
||||||
|
</record>
|
||||||
|
<record>
|
||||||
|
<row>
|
||||||
|
<source_ip>2607:f8b0:4864:20::132</source_ip>
|
||||||
|
<count>1</count>
|
||||||
|
<policy_evaluated>
|
||||||
|
<disposition>none</disposition>
|
||||||
|
<dkim>pass</dkim>
|
||||||
|
<spf>pass</spf>
|
||||||
|
</policy_evaluated>
|
||||||
|
</row>
|
||||||
|
<identifiers>
|
||||||
|
<header_from>example.com</header_from>
|
||||||
|
</identifiers>
|
||||||
|
<auth_results>
|
||||||
|
<dkim>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>google</selector>
|
||||||
|
</dkim>
|
||||||
|
<spf>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
</spf>
|
||||||
|
</auth_results>
|
||||||
|
</record>
|
||||||
|
<record>
|
||||||
|
<row>
|
||||||
|
<source_ip>54.240.8.83</source_ip>
|
||||||
|
<count>36</count>
|
||||||
|
<policy_evaluated>
|
||||||
|
<disposition>none</disposition>
|
||||||
|
<dkim>pass</dkim>
|
||||||
|
<spf>fail</spf>
|
||||||
|
</policy_evaluated>
|
||||||
|
</row>
|
||||||
|
<identifiers>
|
||||||
|
<header_from>example.com</header_from>
|
||||||
|
</identifiers>
|
||||||
|
<auth_results>
|
||||||
|
<dkim>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>awbr2rp4egb35wbg4umq4e5dcoe5kc4n</selector>
|
||||||
|
</dkim>
|
||||||
|
<dkim>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>ug7nbtf4gccmlpwj322ax3p6ow6yfsug</selector>
|
||||||
|
</dkim>
|
||||||
|
<spf>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
</spf>
|
||||||
|
</auth_results>
|
||||||
|
</record>
|
||||||
|
<record>
|
||||||
|
<row>
|
||||||
|
<source_ip>54.240.8.96</source_ip>
|
||||||
|
<count>27</count>
|
||||||
|
<policy_evaluated>
|
||||||
|
<disposition>none</disposition>
|
||||||
|
<dkim>pass</dkim>
|
||||||
|
<spf>fail</spf>
|
||||||
|
</policy_evaluated>
|
||||||
|
</row>
|
||||||
|
<identifiers>
|
||||||
|
<header_from>example.com</header_from>
|
||||||
|
</identifiers>
|
||||||
|
<auth_results>
|
||||||
|
<dkim>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>awbr2rp4egb35wbg4umq4e5dcoe5kc4n</selector>
|
||||||
|
</dkim>
|
||||||
|
<dkim>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>ug7nbtf4gccmlpwj322ax3p6ow6yfsug</selector>
|
||||||
|
</dkim>
|
||||||
|
<spf>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
</spf>
|
||||||
|
</auth_results>
|
||||||
|
</record>
|
||||||
|
<record>
|
||||||
|
<row>
|
||||||
|
<source_ip>54.240.48.95</source_ip>
|
||||||
|
<count>25</count>
|
||||||
|
<policy_evaluated>
|
||||||
|
<disposition>none</disposition>
|
||||||
|
<dkim>pass</dkim>
|
||||||
|
<spf>fail</spf>
|
||||||
|
</policy_evaluated>
|
||||||
|
</row>
|
||||||
|
<identifiers>
|
||||||
|
<header_from>example.com</header_from>
|
||||||
|
</identifiers>
|
||||||
|
<auth_results>
|
||||||
|
<dkim>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>awbr2rp4egb35wbg4umq4e5dcoe5kc4n</selector>
|
||||||
|
</dkim>
|
||||||
|
<dkim>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>ug7nbtf4gccmlpwj322ax3p6ow6yfsug</selector>
|
||||||
|
</dkim>
|
||||||
|
<spf>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
</spf>
|
||||||
|
</auth_results>
|
||||||
|
</record>
|
||||||
|
<record>
|
||||||
|
<row>
|
||||||
|
<source_ip>209.85.220.69</source_ip>
|
||||||
|
<count>2252</count>
|
||||||
|
<policy_evaluated>
|
||||||
|
<disposition>none</disposition>
|
||||||
|
<dkim>pass</dkim>
|
||||||
|
<spf>pass</spf>
|
||||||
|
</policy_evaluated>
|
||||||
|
</row>
|
||||||
|
<identifiers>
|
||||||
|
<header_from>example.com</header_from>
|
||||||
|
</identifiers>
|
||||||
|
<auth_results>
|
||||||
|
<dkim>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>google</selector>
|
||||||
|
</dkim>
|
||||||
|
<spf>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
</spf>
|
||||||
|
</auth_results>
|
||||||
|
</record>
|
||||||
|
<record>
|
||||||
|
<row>
|
||||||
|
<source_ip>54.240.48.94</source_ip>
|
||||||
|
<count>46</count>
|
||||||
|
<policy_evaluated>
|
||||||
|
<disposition>none</disposition>
|
||||||
|
<dkim>pass</dkim>
|
||||||
|
<spf>fail</spf>
|
||||||
|
</policy_evaluated>
|
||||||
|
</row>
|
||||||
|
<identifiers>
|
||||||
|
<header_from>example.com</header_from>
|
||||||
|
</identifiers>
|
||||||
|
<auth_results>
|
||||||
|
<dkim>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>awbr2rp4egb35wbg4umq4e5dcoe5kc4n</selector>
|
||||||
|
</dkim>
|
||||||
|
<dkim>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>ug7nbtf4gccmlpwj322ax3p6ow6yfsug</selector>
|
||||||
|
</dkim>
|
||||||
|
<spf>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
</spf>
|
||||||
|
</auth_results>
|
||||||
|
</record>
|
||||||
|
<record>
|
||||||
|
<row>
|
||||||
|
<source_ip>54.240.8.88</source_ip>
|
||||||
|
<count>37</count>
|
||||||
|
<policy_evaluated>
|
||||||
|
<disposition>none</disposition>
|
||||||
|
<dkim>pass</dkim>
|
||||||
|
<spf>fail</spf>
|
||||||
|
</policy_evaluated>
|
||||||
|
</row>
|
||||||
|
<identifiers>
|
||||||
|
<header_from>example.com</header_from>
|
||||||
|
</identifiers>
|
||||||
|
<auth_results>
|
||||||
|
<dkim>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>awbr2rp4egb35wbg4umq4e5dcoe5kc4n</selector>
|
||||||
|
</dkim>
|
||||||
|
<dkim>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>ug7nbtf4gccmlpwj322ax3p6ow6yfsug</selector>
|
||||||
|
</dkim>
|
||||||
|
<spf>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
</spf>
|
||||||
|
</auth_results>
|
||||||
|
</record>
|
||||||
|
<record>
|
||||||
|
<row>
|
||||||
|
<source_ip>209.85.220.55</source_ip>
|
||||||
|
<count>1</count>
|
||||||
|
<policy_evaluated>
|
||||||
|
<disposition>none</disposition>
|
||||||
|
<dkim>pass</dkim>
|
||||||
|
<spf>pass</spf>
|
||||||
|
</policy_evaluated>
|
||||||
|
</row>
|
||||||
|
<identifiers>
|
||||||
|
<header_from>example.com</header_from>
|
||||||
|
</identifiers>
|
||||||
|
<auth_results>
|
||||||
|
<dkim>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>google</selector>
|
||||||
|
</dkim>
|
||||||
|
<spf>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
</spf>
|
||||||
|
</auth_results>
|
||||||
|
</record>
|
||||||
|
<record>
|
||||||
|
<row>
|
||||||
|
<source_ip>54.240.48.93</source_ip>
|
||||||
|
<count>24</count>
|
||||||
|
<policy_evaluated>
|
||||||
|
<disposition>none</disposition>
|
||||||
|
<dkim>pass</dkim>
|
||||||
|
<spf>fail</spf>
|
||||||
|
</policy_evaluated>
|
||||||
|
</row>
|
||||||
|
<identifiers>
|
||||||
|
<header_from>example.com</header_from>
|
||||||
|
</identifiers>
|
||||||
|
<auth_results>
|
||||||
|
<dkim>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>awbr2rp4egb35wbg4umq4e5dcoe5kc4n</selector>
|
||||||
|
</dkim>
|
||||||
|
<dkim>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>ug7nbtf4gccmlpwj322ax3p6ow6yfsug</selector>
|
||||||
|
</dkim>
|
||||||
|
<spf>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
</spf>
|
||||||
|
</auth_results>
|
||||||
|
</record>
|
||||||
|
<record>
|
||||||
|
<row>
|
||||||
|
<source_ip>209.85.220.41</source_ip>
|
||||||
|
<count>23</count>
|
||||||
|
<policy_evaluated>
|
||||||
|
<disposition>none</disposition>
|
||||||
|
<dkim>pass</dkim>
|
||||||
|
<spf>pass</spf>
|
||||||
|
</policy_evaluated>
|
||||||
|
</row>
|
||||||
|
<identifiers>
|
||||||
|
<header_from>example.com</header_from>
|
||||||
|
</identifiers>
|
||||||
|
<auth_results>
|
||||||
|
<dkim>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>awbr2rp4egb35wbg4umq4e5dcoe5kc4n</selector>
|
||||||
|
</dkim>
|
||||||
|
<dkim>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>ug7nbtf4gccmlpwj322ax3p6ow6yfsug</selector>
|
||||||
|
</dkim>
|
||||||
|
<spf>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
</spf>
|
||||||
|
</auth_results>
|
||||||
|
</record>
|
||||||
|
<record>
|
||||||
|
<row>
|
||||||
|
<source_ip>209.85.220.41</source_ip>
|
||||||
|
<count>24</count>
|
||||||
|
<policy_evaluated>
|
||||||
|
<disposition>none</disposition>
|
||||||
|
<dkim>pass</dkim>
|
||||||
|
<spf>fail</spf>
|
||||||
|
</policy_evaluated>
|
||||||
|
</row>
|
||||||
|
<identifiers>
|
||||||
|
<header_from>example.com</header_from>
|
||||||
|
</identifiers>
|
||||||
|
<auth_results>
|
||||||
|
<dkim>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>awbr2rp4egb35wbg4umq4e5dcoe5kc4n</selector>
|
||||||
|
</dkim>
|
||||||
|
<dkim>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>ug7nbtf4gccmlpwj322ax3p6ow6yfsug</selector>
|
||||||
|
</dkim>
|
||||||
|
<spf>
|
||||||
|
<domain>rphvac.com</domain>
|
||||||
|
<result>none</result>
|
||||||
|
</spf>
|
||||||
|
</auth_results>
|
||||||
|
</record>
|
||||||
|
<record>
|
||||||
|
<row>
|
||||||
|
<source_ip>209.85.220.41</source_ip>
|
||||||
|
<count>359</count>
|
||||||
|
<policy_evaluated>
|
||||||
|
<disposition>none</disposition>
|
||||||
|
<dkim>pass</dkim>
|
||||||
|
<spf>pass</spf>
|
||||||
|
</policy_evaluated>
|
||||||
|
</row>
|
||||||
|
<identifiers>
|
||||||
|
<header_from>example.com</header_from>
|
||||||
|
</identifiers>
|
||||||
|
<auth_results>
|
||||||
|
<dkim>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>google</selector>
|
||||||
|
</dkim>
|
||||||
|
<spf>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
</spf>
|
||||||
|
</auth_results>
|
||||||
|
</record>
|
||||||
|
</feedback>
|
||||||
@@ -0,0 +1,592 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<feedback>
|
||||||
|
<report_metadata>
|
||||||
|
<org_name>google.com</org_name>
|
||||||
|
<email>noreply-dmarc-support@google.com</email>
|
||||||
|
<extra_contact_info>https://support.google.com/a/answer/2466580</extra_contact_info>
|
||||||
|
<report_id>11038226378739404135</report_id>
|
||||||
|
<date_range>
|
||||||
|
<begin>1718236800</begin>
|
||||||
|
<end>1718323199</end>
|
||||||
|
</date_range>
|
||||||
|
</report_metadata>
|
||||||
|
<policy_published>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<adkim>r</adkim>
|
||||||
|
<aspf>r</aspf>
|
||||||
|
<p>none</p>
|
||||||
|
<sp>none</sp>
|
||||||
|
<pct>100</pct>
|
||||||
|
<np>none</np>
|
||||||
|
</policy_published>
|
||||||
|
<record>
|
||||||
|
<row>
|
||||||
|
<source_ip>209.85.220.69</source_ip>
|
||||||
|
<count>1</count>
|
||||||
|
<policy_evaluated>
|
||||||
|
<disposition>none</disposition>
|
||||||
|
<dkim>fail</dkim>
|
||||||
|
<spf>pass</spf>
|
||||||
|
</policy_evaluated>
|
||||||
|
</row>
|
||||||
|
<identifiers>
|
||||||
|
<header_from>example.com</header_from>
|
||||||
|
</identifiers>
|
||||||
|
<auth_results>
|
||||||
|
<spf>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
</spf>
|
||||||
|
</auth_results>
|
||||||
|
</record>
|
||||||
|
<record>
|
||||||
|
<row>
|
||||||
|
<source_ip>209.85.220.41</source_ip>
|
||||||
|
<count>2</count>
|
||||||
|
<policy_evaluated>
|
||||||
|
<disposition>none</disposition>
|
||||||
|
<dkim>pass</dkim>
|
||||||
|
<spf>fail</spf>
|
||||||
|
</policy_evaluated>
|
||||||
|
</row>
|
||||||
|
<identifiers>
|
||||||
|
<header_from>example.com</header_from>
|
||||||
|
</identifiers>
|
||||||
|
<auth_results>
|
||||||
|
<dkim>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>awbr2rp4egb35wbg4umq4e5dcoe5kc4n</selector>
|
||||||
|
</dkim>
|
||||||
|
<dkim>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>ug7nbtf4gccmlpwj322ax3p6ow6yfsug</selector>
|
||||||
|
</dkim>
|
||||||
|
<spf>
|
||||||
|
<domain>gmail.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
</spf>
|
||||||
|
</auth_results>
|
||||||
|
</record>
|
||||||
|
<record>
|
||||||
|
<row>
|
||||||
|
<source_ip>54.240.48.90</source_ip>
|
||||||
|
<count>40</count>
|
||||||
|
<policy_evaluated>
|
||||||
|
<disposition>none</disposition>
|
||||||
|
<dkim>pass</dkim>
|
||||||
|
<spf>fail</spf>
|
||||||
|
</policy_evaluated>
|
||||||
|
</row>
|
||||||
|
<identifiers>
|
||||||
|
<header_from>example.com</header_from>
|
||||||
|
</identifiers>
|
||||||
|
<auth_results>
|
||||||
|
<dkim>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>awbr2rp4egb35wbg4umq4e5dcoe5kc4n</selector>
|
||||||
|
</dkim>
|
||||||
|
<dkim>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>ug7nbtf4gccmlpwj322ax3p6ow6yfsug</selector>
|
||||||
|
</dkim>
|
||||||
|
<spf>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
</spf>
|
||||||
|
</auth_results>
|
||||||
|
</record>
|
||||||
|
<record>
|
||||||
|
<row>
|
||||||
|
<source_ip>54.240.8.31</source_ip>
|
||||||
|
<count>40</count>
|
||||||
|
<policy_evaluated>
|
||||||
|
<disposition>none</disposition>
|
||||||
|
<dkim>pass</dkim>
|
||||||
|
<spf>fail</spf>
|
||||||
|
</policy_evaluated>
|
||||||
|
</row>
|
||||||
|
<identifiers>
|
||||||
|
<header_from>example.com</header_from>
|
||||||
|
</identifiers>
|
||||||
|
<auth_results>
|
||||||
|
<dkim>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>awbr2rp4egb35wbg4umq4e5dcoe5kc4n</selector>
|
||||||
|
</dkim>
|
||||||
|
<dkim>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>ug7nbtf4gccmlpwj322ax3p6ow6yfsug</selector>
|
||||||
|
</dkim>
|
||||||
|
<spf>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
</spf>
|
||||||
|
</auth_results>
|
||||||
|
</record>
|
||||||
|
<record>
|
||||||
|
<row>
|
||||||
|
<source_ip>54.240.8.33</source_ip>
|
||||||
|
<count>33</count>
|
||||||
|
<policy_evaluated>
|
||||||
|
<disposition>none</disposition>
|
||||||
|
<dkim>pass</dkim>
|
||||||
|
<spf>fail</spf>
|
||||||
|
</policy_evaluated>
|
||||||
|
</row>
|
||||||
|
<identifiers>
|
||||||
|
<header_from>example.com</header_from>
|
||||||
|
</identifiers>
|
||||||
|
<auth_results>
|
||||||
|
<dkim>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>awbr2rp4egb35wbg4umq4e5dcoe5kc4n</selector>
|
||||||
|
</dkim>
|
||||||
|
<dkim>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>ug7nbtf4gccmlpwj322ax3p6ow6yfsug</selector>
|
||||||
|
</dkim>
|
||||||
|
<spf>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
</spf>
|
||||||
|
</auth_results>
|
||||||
|
</record>
|
||||||
|
<record>
|
||||||
|
<row>
|
||||||
|
<source_ip>54.240.48.92</source_ip>
|
||||||
|
<count>40</count>
|
||||||
|
<policy_evaluated>
|
||||||
|
<disposition>none</disposition>
|
||||||
|
<dkim>pass</dkim>
|
||||||
|
<spf>fail</spf>
|
||||||
|
</policy_evaluated>
|
||||||
|
</row>
|
||||||
|
<identifiers>
|
||||||
|
<header_from>example.com</header_from>
|
||||||
|
</identifiers>
|
||||||
|
<auth_results>
|
||||||
|
<dkim>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>awbr2rp4egb35wbg4umq4e5dcoe5kc4n</selector>
|
||||||
|
</dkim>
|
||||||
|
<dkim>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>ug7nbtf4gccmlpwj322ax3p6ow6yfsug</selector>
|
||||||
|
</dkim>
|
||||||
|
<spf>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
</spf>
|
||||||
|
</auth_results>
|
||||||
|
</record>
|
||||||
|
<record>
|
||||||
|
<row>
|
||||||
|
<source_ip>54.240.48.110</source_ip>
|
||||||
|
<count>24</count>
|
||||||
|
<policy_evaluated>
|
||||||
|
<disposition>none</disposition>
|
||||||
|
<dkim>pass</dkim>
|
||||||
|
<spf>fail</spf>
|
||||||
|
</policy_evaluated>
|
||||||
|
</row>
|
||||||
|
<identifiers>
|
||||||
|
<header_from>example.com</header_from>
|
||||||
|
</identifiers>
|
||||||
|
<auth_results>
|
||||||
|
<dkim>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>awbr2rp4egb35wbg4umq4e5dcoe5kc4n</selector>
|
||||||
|
</dkim>
|
||||||
|
<dkim>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>ug7nbtf4gccmlpwj322ax3p6ow6yfsug</selector>
|
||||||
|
</dkim>
|
||||||
|
<spf>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
</spf>
|
||||||
|
</auth_results>
|
||||||
|
</record>
|
||||||
|
<record>
|
||||||
|
<row>
|
||||||
|
<source_ip>209.85.220.41</source_ip>
|
||||||
|
<count>12</count>
|
||||||
|
<policy_evaluated>
|
||||||
|
<disposition>none</disposition>
|
||||||
|
<dkim>pass</dkim>
|
||||||
|
<spf>fail</spf>
|
||||||
|
</policy_evaluated>
|
||||||
|
</row>
|
||||||
|
<identifiers>
|
||||||
|
<header_from>example.com</header_from>
|
||||||
|
</identifiers>
|
||||||
|
<auth_results>
|
||||||
|
<dkim>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>awbr2rp4egb35wbg4umq4e5dcoe5kc4n</selector>
|
||||||
|
</dkim>
|
||||||
|
<dkim>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>ug7nbtf4gccmlpwj322ax3p6ow6yfsug</selector>
|
||||||
|
</dkim>
|
||||||
|
<spf>
|
||||||
|
<domain>connectivityu.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
</spf>
|
||||||
|
</auth_results>
|
||||||
|
</record>
|
||||||
|
<record>
|
||||||
|
<row>
|
||||||
|
<source_ip>2607:f8b0:4864:20::132</source_ip>
|
||||||
|
<count>1</count>
|
||||||
|
<policy_evaluated>
|
||||||
|
<disposition>none</disposition>
|
||||||
|
<dkim>pass</dkim>
|
||||||
|
<spf>pass</spf>
|
||||||
|
</policy_evaluated>
|
||||||
|
</row>
|
||||||
|
<identifiers>
|
||||||
|
<header_from>example.com</header_from>
|
||||||
|
</identifiers>
|
||||||
|
<auth_results>
|
||||||
|
<dkim>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>google</selector>
|
||||||
|
</dkim>
|
||||||
|
<spf>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
</spf>
|
||||||
|
</auth_results>
|
||||||
|
</record>
|
||||||
|
<record>
|
||||||
|
<row>
|
||||||
|
<source_ip>54.240.8.83</source_ip>
|
||||||
|
<count>36</count>
|
||||||
|
<policy_evaluated>
|
||||||
|
<disposition>none</disposition>
|
||||||
|
<dkim>pass</dkim>
|
||||||
|
<spf>fail</spf>
|
||||||
|
</policy_evaluated>
|
||||||
|
</row>
|
||||||
|
<identifiers>
|
||||||
|
<header_from>example.com</header_from>
|
||||||
|
</identifiers>
|
||||||
|
<auth_results>
|
||||||
|
<dkim>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>awbr2rp4egb35wbg4umq4e5dcoe5kc4n</selector>
|
||||||
|
</dkim>
|
||||||
|
<dkim>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>ug7nbtf4gccmlpwj322ax3p6ow6yfsug</selector>
|
||||||
|
</dkim>
|
||||||
|
<spf>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
</spf>
|
||||||
|
</auth_results>
|
||||||
|
</record>
|
||||||
|
<record>
|
||||||
|
<row>
|
||||||
|
<source_ip>54.240.8.96</source_ip>
|
||||||
|
<count>27</count>
|
||||||
|
<policy_evaluated>
|
||||||
|
<disposition>none</disposition>
|
||||||
|
<dkim>pass</dkim>
|
||||||
|
<spf>fail</spf>
|
||||||
|
</policy_evaluated>
|
||||||
|
</row>
|
||||||
|
<identifiers>
|
||||||
|
<header_from>example.com</header_from>
|
||||||
|
</identifiers>
|
||||||
|
<auth_results>
|
||||||
|
<dkim>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>awbr2rp4egb35wbg4umq4e5dcoe5kc4n</selector>
|
||||||
|
</dkim>
|
||||||
|
<dkim>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>ug7nbtf4gccmlpwj322ax3p6ow6yfsug</selector>
|
||||||
|
</dkim>
|
||||||
|
<spf>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
</spf>
|
||||||
|
</auth_results>
|
||||||
|
</record>
|
||||||
|
<record>
|
||||||
|
<row>
|
||||||
|
<source_ip>54.240.48.95</source_ip>
|
||||||
|
<count>25</count>
|
||||||
|
<policy_evaluated>
|
||||||
|
<disposition>none</disposition>
|
||||||
|
<dkim>pass</dkim>
|
||||||
|
<spf>fail</spf>
|
||||||
|
</policy_evaluated>
|
||||||
|
</row>
|
||||||
|
<identifiers>
|
||||||
|
<header_from>example.com</header_from>
|
||||||
|
</identifiers>
|
||||||
|
<auth_results>
|
||||||
|
<dkim>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>awbr2rp4egb35wbg4umq4e5dcoe5kc4n</selector>
|
||||||
|
</dkim>
|
||||||
|
<dkim>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>ug7nbtf4gccmlpwj322ax3p6ow6yfsug</selector>
|
||||||
|
</dkim>
|
||||||
|
<spf>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
</spf>
|
||||||
|
</auth_results>
|
||||||
|
</record>
|
||||||
|
<record>
|
||||||
|
<row>
|
||||||
|
<source_ip>209.85.220.69</source_ip>
|
||||||
|
<count>2252</count>
|
||||||
|
<policy_evaluated>
|
||||||
|
<disposition>none</disposition>
|
||||||
|
<dkim>pass</dkim>
|
||||||
|
<spf>pass</spf>
|
||||||
|
</policy_evaluated>
|
||||||
|
</row>
|
||||||
|
<identifiers>
|
||||||
|
<header_from>example.com</header_from>
|
||||||
|
</identifiers>
|
||||||
|
<auth_results>
|
||||||
|
<dkim>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>google</selector>
|
||||||
|
</dkim>
|
||||||
|
<spf>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
</spf>
|
||||||
|
</auth_results>
|
||||||
|
</record>
|
||||||
|
<record>
|
||||||
|
<row>
|
||||||
|
<source_ip>54.240.48.94</source_ip>
|
||||||
|
<count>46</count>
|
||||||
|
<policy_evaluated>
|
||||||
|
<disposition>none</disposition>
|
||||||
|
<dkim>pass</dkim>
|
||||||
|
<spf>fail</spf>
|
||||||
|
</policy_evaluated>
|
||||||
|
</row>
|
||||||
|
<identifiers>
|
||||||
|
<header_from>example.com</header_from>
|
||||||
|
</identifiers>
|
||||||
|
<auth_results>
|
||||||
|
<dkim>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>awbr2rp4egb35wbg4umq4e5dcoe5kc4n</selector>
|
||||||
|
</dkim>
|
||||||
|
<dkim>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>ug7nbtf4gccmlpwj322ax3p6ow6yfsug</selector>
|
||||||
|
</dkim>
|
||||||
|
<spf>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
</spf>
|
||||||
|
</auth_results>
|
||||||
|
</record>
|
||||||
|
<record>
|
||||||
|
<row>
|
||||||
|
<source_ip>54.240.8.88</source_ip>
|
||||||
|
<count>37</count>
|
||||||
|
<policy_evaluated>
|
||||||
|
<disposition>none</disposition>
|
||||||
|
<dkim>pass</dkim>
|
||||||
|
<spf>fail</spf>
|
||||||
|
</policy_evaluated>
|
||||||
|
</row>
|
||||||
|
<identifiers>
|
||||||
|
<header_from>example.com</header_from>
|
||||||
|
</identifiers>
|
||||||
|
<auth_results>
|
||||||
|
<dkim>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>awbr2rp4egb35wbg4umq4e5dcoe5kc4n</selector>
|
||||||
|
</dkim>
|
||||||
|
<dkim>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>ug7nbtf4gccmlpwj322ax3p6ow6yfsug</selector>
|
||||||
|
</dkim>
|
||||||
|
<spf>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
</spf>
|
||||||
|
</auth_results>
|
||||||
|
</record>
|
||||||
|
<record>
|
||||||
|
<row>
|
||||||
|
<source_ip>209.85.220.55</source_ip>
|
||||||
|
<count>1</count>
|
||||||
|
<policy_evaluated>
|
||||||
|
<disposition>none</disposition>
|
||||||
|
<dkim>pass</dkim>
|
||||||
|
<spf>pass</spf>
|
||||||
|
</policy_evaluated>
|
||||||
|
</row>
|
||||||
|
<identifiers>
|
||||||
|
<header_from>example.com</header_from>
|
||||||
|
</identifiers>
|
||||||
|
<auth_results>
|
||||||
|
<dkim>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>google</selector>
|
||||||
|
</dkim>
|
||||||
|
<spf>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
</spf>
|
||||||
|
</auth_results>
|
||||||
|
</record>
|
||||||
|
<record>
|
||||||
|
<row>
|
||||||
|
<source_ip>54.240.48.93</source_ip>
|
||||||
|
<count>24</count>
|
||||||
|
<policy_evaluated>
|
||||||
|
<disposition>none</disposition>
|
||||||
|
<dkim>pass</dkim>
|
||||||
|
<spf>fail</spf>
|
||||||
|
</policy_evaluated>
|
||||||
|
</row>
|
||||||
|
<identifiers>
|
||||||
|
<header_from>example.com</header_from>
|
||||||
|
</identifiers>
|
||||||
|
<auth_results>
|
||||||
|
<dkim>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>awbr2rp4egb35wbg4umq4e5dcoe5kc4n</selector>
|
||||||
|
</dkim>
|
||||||
|
<dkim>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>ug7nbtf4gccmlpwj322ax3p6ow6yfsug</selector>
|
||||||
|
</dkim>
|
||||||
|
<spf>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
</spf>
|
||||||
|
</auth_results>
|
||||||
|
</record>
|
||||||
|
<record>
|
||||||
|
<row>
|
||||||
|
<source_ip>209.85.220.41</source_ip>
|
||||||
|
<count>23</count>
|
||||||
|
<policy_evaluated>
|
||||||
|
<disposition>none</disposition>
|
||||||
|
<dkim>pass</dkim>
|
||||||
|
<spf>pass</spf>
|
||||||
|
</policy_evaluated>
|
||||||
|
</row>
|
||||||
|
<identifiers>
|
||||||
|
<header_from>example.com</header_from>
|
||||||
|
</identifiers>
|
||||||
|
<auth_results>
|
||||||
|
<dkim>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>awbr2rp4egb35wbg4umq4e5dcoe5kc4n</selector>
|
||||||
|
</dkim>
|
||||||
|
<dkim>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>ug7nbtf4gccmlpwj322ax3p6ow6yfsug</selector>
|
||||||
|
</dkim>
|
||||||
|
<spf>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
</spf>
|
||||||
|
</auth_results>
|
||||||
|
</record>
|
||||||
|
<record>
|
||||||
|
<row>
|
||||||
|
<source_ip>209.85.220.41</source_ip>
|
||||||
|
<count>24</count>
|
||||||
|
<policy_evaluated>
|
||||||
|
<disposition>none</disposition>
|
||||||
|
<dkim>pass</dkim>
|
||||||
|
<spf>fail</spf>
|
||||||
|
</policy_evaluated>
|
||||||
|
</row>
|
||||||
|
<identifiers>
|
||||||
|
<header_from>example.com</header_from>
|
||||||
|
</identifiers>
|
||||||
|
<auth_results>
|
||||||
|
<dkim>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>awbr2rp4egb35wbg4umq4e5dcoe5kc4n</selector>
|
||||||
|
</dkim>
|
||||||
|
<dkim>
|
||||||
|
<domain>amazonses.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>ug7nbtf4gccmlpwj322ax3p6ow6yfsug</selector>
|
||||||
|
</dkim>
|
||||||
|
<spf>
|
||||||
|
<domain>rphvac.com</domain>
|
||||||
|
<result>none</result>
|
||||||
|
</spf>
|
||||||
|
</auth_results>
|
||||||
|
</record>
|
||||||
|
<record>
|
||||||
|
<row>
|
||||||
|
<source_ip>209.85.220.41</source_ip>
|
||||||
|
<count>359</count>
|
||||||
|
<policy_evaluated>
|
||||||
|
<disposition>none</disposition>
|
||||||
|
<dkim>pass</dkim>
|
||||||
|
<spf>pass</spf>
|
||||||
|
</policy_evaluated>
|
||||||
|
</row>
|
||||||
|
<identifiers>
|
||||||
|
<header_from>example.com</header_from>
|
||||||
|
</identifiers>
|
||||||
|
<auth_results>
|
||||||
|
<dkim>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
<selector>google</selector>
|
||||||
|
</dkim>
|
||||||
|
<spf>
|
||||||
|
<domain>example.com</domain>
|
||||||
|
<result>pass</result>
|
||||||
|
</spf>
|
||||||
|
</auth_results>
|
||||||
|
</record>
|
||||||
|
</feedback>
|
||||||
Binary file not shown.
Binary file not shown.
@@ -1,13 +1,26 @@
|
|||||||
from __future__ import print_function, unicode_literals, absolute_import
|
from __future__ import absolute_import, print_function, unicode_literals
|
||||||
|
|
||||||
|
import os
|
||||||
import unittest
|
import unittest
|
||||||
from glob import glob
|
from glob import glob
|
||||||
import os
|
|
||||||
|
from lxml import etree
|
||||||
|
|
||||||
import parsedmarc
|
import parsedmarc
|
||||||
import parsedmarc.utils
|
import parsedmarc.utils
|
||||||
|
|
||||||
|
|
||||||
|
def minify_xml(xml_string):
|
||||||
|
parser = etree.XMLParser(remove_blank_text=True)
|
||||||
|
tree = etree.fromstring(xml_string.encode('utf-8'), parser)
|
||||||
|
return etree.tostring(tree, pretty_print=False).decode('utf-8')
|
||||||
|
|
||||||
|
def compare_xml(xml1, xml2):
|
||||||
|
parser = etree.XMLParser(remove_blank_text=True)
|
||||||
|
tree1 = etree.fromstring(xml1.encode('utf-8'), parser)
|
||||||
|
tree2 = etree.fromstring(xml2.encode('utf-8'), parser)
|
||||||
|
return etree.tostring(tree1) == etree.tostring(tree2)
|
||||||
|
|
||||||
class Test(unittest.TestCase):
|
class Test(unittest.TestCase):
|
||||||
def testBase64Decoding(self):
|
def testBase64Decoding(self):
|
||||||
"""Test base64 decoding"""
|
"""Test base64 decoding"""
|
||||||
@@ -26,6 +39,66 @@ class Test(unittest.TestCase):
|
|||||||
result = parsedmarc.utils.get_base_domain(subdomain)
|
result = parsedmarc.utils.get_base_domain(subdomain)
|
||||||
assert result == "c.akamaiedge.net"
|
assert result == "c.akamaiedge.net"
|
||||||
|
|
||||||
|
def testExtractReportXMLComparator(self):
|
||||||
|
"""Test XML comparator function"""
|
||||||
|
print()
|
||||||
|
xmlnice = open("samples/extract_report/nice-input.xml").read()
|
||||||
|
print(xmlnice)
|
||||||
|
xmlchanged = minify_xml(open("samples/extract_report/changed-input.xml").read())
|
||||||
|
print(xmlchanged)
|
||||||
|
self.assertTrue(compare_xml(xmlnice, xmlnice))
|
||||||
|
self.assertTrue(compare_xml(xmlchanged, xmlchanged))
|
||||||
|
self.assertFalse(compare_xml(xmlnice, xmlchanged))
|
||||||
|
self.assertFalse(compare_xml(xmlchanged, xmlnice))
|
||||||
|
print("Passed!")
|
||||||
|
|
||||||
|
def testExtractReportBytes(self):
|
||||||
|
"""Test extract report function for bytes string input"""
|
||||||
|
print()
|
||||||
|
file = "samples/extract_report/nice-input.xml"
|
||||||
|
with open(file, 'rb') as f:
|
||||||
|
data = f.read()
|
||||||
|
print("Testing {0}: " .format(file), end="")
|
||||||
|
xmlout = parsedmarc.extract_report(data)
|
||||||
|
xmlin = open("samples/extract_report/nice-input.xml").read()
|
||||||
|
self.assertTrue(compare_xml(xmlout, xmlin))
|
||||||
|
print("Passed!")
|
||||||
|
|
||||||
|
def testExtractReportXML(self):
|
||||||
|
"""Test extract report function for XML input"""
|
||||||
|
print()
|
||||||
|
file = "samples/extract_report/nice-input.xml"
|
||||||
|
print("Testing {0}: " .format(file), end="")
|
||||||
|
xmlout = parsedmarc.extract_report(file)
|
||||||
|
xmlin = open("samples/extract_report/nice-input.xml").read()
|
||||||
|
self.assertTrue(compare_xml(xmlout, xmlin))
|
||||||
|
print("Passed!")
|
||||||
|
|
||||||
|
def testExtractReportGZip(self):
|
||||||
|
"""Test extract report function for gzip input"""
|
||||||
|
print()
|
||||||
|
file = "samples/extract_report/nice-input.xml.gz"
|
||||||
|
print("Testing {0}: " .format(file), end="")
|
||||||
|
xmlout = parsedmarc.extract_report(file)
|
||||||
|
xmlin = open("samples/extract_report/nice-input.xml").read()
|
||||||
|
self.assertTrue(compare_xml(xmlout, xmlin))
|
||||||
|
print("Passed!")
|
||||||
|
|
||||||
|
def testExtractReportZip(self):
|
||||||
|
"""Test extract report function for zip input"""
|
||||||
|
print()
|
||||||
|
file = "samples/extract_report/nice-input.xml.zip"
|
||||||
|
print("Testing {0}: " .format(file), end="")
|
||||||
|
xmlout = parsedmarc.extract_report(file)
|
||||||
|
print(xmlout)
|
||||||
|
xmlin = minify_xml(open("samples/extract_report/nice-input.xml").read())
|
||||||
|
print(xmlin)
|
||||||
|
self.assertTrue(compare_xml(xmlout, xmlin))
|
||||||
|
xmlin = minify_xml(open("samples/extract_report/changed-input.xml").read())
|
||||||
|
print(xmlin)
|
||||||
|
self.assertFalse(compare_xml(xmlout, xmlin))
|
||||||
|
print("Passed!")
|
||||||
|
|
||||||
def testAggregateSamples(self):
|
def testAggregateSamples(self):
|
||||||
"""Test sample aggregate/rua DMARC reports"""
|
"""Test sample aggregate/rua DMARC reports"""
|
||||||
print()
|
print()
|
||||||
|
|||||||
Reference in New Issue
Block a user