first commit
This commit is contained in:
commit
25352479a1
120
check_clear_smtp.py
Normal file
120
check_clear_smtp.py
Normal file
@ -0,0 +1,120 @@
|
||||
#!/usr/bin/python3
|
||||
from string import ascii_lowercase
|
||||
from random import choices
|
||||
from argparse import ArgumentParser
|
||||
from smtplib import (
|
||||
SMTP,
|
||||
SMTPSenderRefused,
|
||||
SMTPRecipientsRefused,
|
||||
)
|
||||
|
||||
|
||||
def check_clear(domain, port, orgin_domain, from_addr, to_addr, log_level):
|
||||
with SMTP(host=domain, port=port, local_hostname=orgin_domain) as smtp:
|
||||
smtp.set_debuglevel(log_level)
|
||||
try:
|
||||
smtp.sendmail(
|
||||
from_addr=from_addr,
|
||||
to_addrs=[to_addr],
|
||||
msg="test_cleartextmail"
|
||||
)
|
||||
except SMTPSenderRefused as error:
|
||||
code = error.smtp_code
|
||||
error = error.smtp_error.decode()
|
||||
if code == 530 and "STARTTLS" in error:
|
||||
return False
|
||||
else:
|
||||
raise
|
||||
except SMTPRecipientsRefused:
|
||||
pass
|
||||
return True
|
||||
|
||||
|
||||
def color(string, color_name):
|
||||
color_code = ""
|
||||
if color_name == "green":
|
||||
color_code = "\033[92m"
|
||||
elif color_name == "red":
|
||||
color_code = "\033[91m"
|
||||
elif color_name == "orange":
|
||||
color_code = "\033[93m"
|
||||
end_color = "\033[1m"
|
||||
return f"{color_code}{string}{end_color}"
|
||||
|
||||
|
||||
def main():
|
||||
parser = ArgumentParser(
|
||||
description=(
|
||||
"Script to check wether or not the target mail server accepts "
|
||||
"cleartext connections and email from other smtp relay"
|
||||
)
|
||||
)
|
||||
parser.add_argument(
|
||||
'domain',
|
||||
type=str,
|
||||
help="domain to check"
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
'-p',
|
||||
'--port',
|
||||
type=int,
|
||||
default=25,
|
||||
help="port for STARTTLS (usually 25)",
|
||||
)
|
||||
parser.add_argument(
|
||||
'-f',
|
||||
'--from_addr',
|
||||
type=str,
|
||||
default="foo@example.com",
|
||||
help="address to use to check the server (default foo@example.com)"
|
||||
)
|
||||
parser.add_argument(
|
||||
'-t',
|
||||
'--to_addr',
|
||||
type=str,
|
||||
default="",
|
||||
help="address of the recipient (default [random]@[domain])"
|
||||
)
|
||||
parser.add_argument(
|
||||
"-v",
|
||||
"--verbose",
|
||||
action="store_true",
|
||||
help="Activate verbose mode an display all smtp trafic"
|
||||
)
|
||||
|
||||
args = parser.parse_args()
|
||||
origin_domain = args.from_addr.split("@")[-1]
|
||||
rand_char = ''.join(choices(ascii_lowercase, k=64))
|
||||
to_addr = args.to_addr if args.to_addr else f"{rand_char}@{args.domain}"
|
||||
|
||||
print(
|
||||
"Testing if the server support clear text email delivery:",
|
||||
end=' '
|
||||
)
|
||||
|
||||
try:
|
||||
result = check_clear(
|
||||
domain=args.domain,
|
||||
port=args.port,
|
||||
orgin_domain=origin_domain,
|
||||
from_addr=args.from_addr,
|
||||
to_addr=to_addr,
|
||||
log_level=2 if args.verbose else 0
|
||||
)
|
||||
except Exception as exception:
|
||||
print(color("Unknown", "orange"))
|
||||
print(
|
||||
"got unknown exception run the command again with -v for more "
|
||||
"details"
|
||||
)
|
||||
print(exception)
|
||||
else:
|
||||
if result:
|
||||
print(color("True", "green"))
|
||||
else:
|
||||
print(color("False", "red"))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
Loading…
Reference in New Issue
Block a user