What's new
Runion

This is a sample guest message. Register a free account today to become a member! Once signed in, you'll be able to participate on this site by adding your own topics and posts, as well as connect with other members through your own private inbox!

Вопрос | поиск imap url по email

AmperVolt

Midle Weight
Депозит
$0
Пытаюсь реализовать поиск корректных imap url по адресу мыла. Может кто сталкивался? Просьба подсказать. Желательно чтобы это возможно было делать в командной строке либо скриптом.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Python:
Скопировать в буфер обмена
def is_listening(ip, port):
try:
port = int(port)
socket_type = socket.AF_INET6 if ':' in ip else socket.AF_INET
s = socket.socket(socket_type, socket.SOCK_STREAM)
s.settimeout(3)
s = ssl.wrap_socket(s, server_hostname=ip, do_handshake_on_connect=False) if port == 465 else s
s.connect((ip, port))
s.close()
return True
except:
return False

def guess_smtp_server(domain):
global default_login_template, resolver_obj, domain_configs_cache, dangerous_domains
domains_arr = [domain, 'smtp-qa.'+domain, 'smtp.'+domain, 'mail.'+domain, 'webmail.'+domain, 'mx.'+domain]
try:
mx_domain = str(resolver_obj.resolve(domain, 'mx')[0].exchange)[0:-1]
domains_arr += [mx_domain]
except:
raise Exception('no MX records found for: '+domain)
if is_ignored_host(mx_domain) or re.search(dangerous_domains, mx_domain) and not re.search(r'\.outlook\.com$', mx_domain):
raise Exception(white('skipping domain: '+mx_domain+' (for '+domain+')',2))
if re.search(r'protection\.outlook\.com$', mx_domain):
return domain_configs_cache['outlook.com']
for host in domains_arr:
try:
ip = get_rand_ip_of_host(host)
except:
continue
for port in [2525, 587, 465, 25]:
debug(f'trying {host}, {ip}:{port}')
if is_listening(ip, port):
return ([host+':'+str(port)], default_login_template)
raise Exception('no connection details found for '+domain)
Без проблем переделаешь для IMAP (домены и порт). И вот в атаче стаааарые (нужно перечекать) конфиги для доменов из какого-то говночекера.
Вложения
imapdatabase.txt
 
Aels сказал(а):
Python:
Скопировать в буфер обмена
def is_listening(ip, port):
try:
port = int(port)
socket_type = socket.AF_INET6 if ':' in ip else socket.AF_INET
s = socket.socket(socket_type, socket.SOCK_STREAM)
s.settimeout(3)
s = ssl.wrap_socket(s, server_hostname=ip, do_handshake_on_connect=False) if port == 465 else s
s.connect((ip, port))
sclose




domain
default_login_template resolver_obj domain_configs_cache dangerous_domains
domains_arr domain domain domain domain domain domain

mx_domain resolver_objresolvedomain exchange
domains_arr mx_domain

Exceptiondomain
is_ignored_hostmx_domain researchdangerous_domains mx_domain research mx_domain
Exceptionwhitemx_domaindomain
research mx_domain
domain_configs_cache
host domains_arr

ip get_rand_ip_of_hosthost


port
debug
is_listeningip port
hostport default_login_template
raise Exception('no connection details found for '+domain)
Без проблем переделаешь для IMAP (домены и порт). И вот в атаче стаааарые (нужно перечекать) конфиги для доменов из какого-то говночекера.
Нажмите, чтобы раскрыть...

Вот подобный конфиг как раз искал. Спасибо большое. а то я пока только смог вот такое нагородить:
Python:
Скопировать в буфер обмена
import os
import re
import json
import requests

def get_email_settings(email):
url = f'https://emailsettings.firetrust.com/settings?q={email}'
response = requests.get(url)
if response.status_code == 200:
source = response.json()
data = source
for i in range(len(data["settings"])):
if data["settings"]["protocol"] == "IMAP":
imap_server = data["settings"]["address"]
imap_port = data["settings"]["port"]
return imap_server, imap_port
return 'N/A', 'N/A'

with open('emails2.txt', 'r') as email_file:
email_addresses = email_file.readlines()

email_addresses = [email.strip() for email in email_addresses]

for email in email_addresses:
imap_server, imap_port = get_email_settings(email)
if imap_server != 'N/A':
print(f'{email}: {imap_server}:{imap_port}')
else:
print(f'No IMAP server found for {email}')
Нашёл api, но он сильно ограничен, не всё находит.

Ну и вот так для тех кого api что выше, не нашёл.

Python:
Скопировать в буфер обмена
import subprocess
import socket

def get_mx_record(domain):
cmd = f"dig {domain} MX"
output = subprocess.run(cmd.split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output_str = output.stdout.decode("utf-8").strip()
lines = output_str.split("\n")
mx_records = []
for line in lines:
if "MX" in line:
mx_records.append(line.split()[-1][:-1])
return mx_records

def get_imap_url(email):
email_parts = email.split("@")
domain = email_parts[-1]
imap_hosts = []
imap_hosts.append(f"imap.{domain}")
mx_records = get_mx_record(domain)
for mx_record in mx_records:
imap_hosts.append(f"imap.{mx_record}")
ip_hosts = []
for host in imap_hosts:
try:
ip = socket.gethostbyname(host)
try:
reverse_host = socket.gethostbyaddr(ip)[0]
ip_hosts.append(f"imap.{reverse_host}")
except socket.herror:
pass
except socket.gaierror:
pass
imap_hosts.extend(ip_hosts)
for host in imap_hosts:
for port in (993, 143):
try:
s = socket.create_connection((host, port), timeout=3)
s.close()
return f"{host}:{port}"
except socket.error:
pass
return None

results = {}
with open("emails.txt", "r") as f:
for email in f:
email = email.strip()
results = get_imap_url(email)

with open("imap_urls.txt", "w") as f:
for email, imap_url in results.items():
if imap_url:
f.write(f"{email}: {imap_url}\n")
else:
f.write(f"{email}: Not found\n")
 
Top