Парсинг email адресов python

#1 Python для пентестера. Email-парсер на Python 3. Часть 1.

Сегодня я начну повествование создания парсера электронной почты. Атаки по электронной почте являются важнейшим компонентом социальной инженерии.

Вы можете использовать электронную почту, для дальнейшего расширения своей атаки (например, backdoor). Мы можем собрать все электронные ящики, от определенной компании, и отправить backdoor, с ожиданием того, что сотрудники откроют письма, и запустят вредоносную программу на своих машинах.

Мы собираемся создать программу, которая сможет собирать все адреса электронной почты, с определенного доменного имени. Например, мы хотим иметь возможность указать ссылку на конкретный веб-сайт, и наша программа соберет все ящики, которые касаются этого конкретного домена.

Давайте посмотрим, как можно это сделать, с помощью языка программирования Python. Это будет полезная программа, которой Вы сможете пользоваться в повседневности. Я назову файл: «email-scraper.py»:

email-scraper.py

Теперь начнем импортировать библиотеки, которые нам понадобятся. Сперва импортируем библиотеку «BeautifulSoup»:

beautifulsoup

Далее импортируем библиотеку запросов: «requests»:

Далее импортируем библиотеку запросов: «requests»

Нам также нужно импортировать запросы, с исключением. Это библиотека «requests.exceptions»:

Нам также нужно импортировать запросы, с исключением. Это библиотека «requests.exceptions»

Еще нам нужно импортировать библиотеку: «urllib.parse»:

Еще нам нужно импортировать библиотеку: «urllib.parse»

Далее, нам нужно импортировать библиотеку: «deque» из «collections»:

Далее, нам нужно импортировать библиотеку: «deque» из «collections»

И, последняя библиотека, которая нам понадобится – это «re»:

И, последняя библиотека, которая нам понадобится – это «re»

Теперь, когда мы импортировали обычные библиотеки, запросим информацию у пользователей, которая нам нужна, для запуска нашей программы, такую как «url». Я укажу переменную «user_url», и далее, пропишу «input», для того, чтобы пользователь ввел адрес цели. Это выглядит как: «user_url = input(‘[+] Enter Target URL To Scan:’)»:

user_url = input(‘[+] Enter Target URL To Scan:’)

На всякий случай, преобразуем нашу конструкцию в строковый формат. Нужно просто добавить круглые скобки, в начале и конце строки кода, с указанием типа «str»:

Читайте также:  Php enable errors in script

str

Далее, нам нужно объявить переменную, которую я назову «urls», и пропишем «deque». После этого, откроем круглые скобки, а также внутри квадратные скобки, и укажем url пользователя («user_url»):

user_url

Если у Вас не установлены некоторые библиотеки, из начала кода, то рекомендую Вам их установить. Они будут подчеркнуты красной или желтой чертой (в зависимости от редактора кода).

Продолжим нашу программу, и создадим множество «scrapped_urls», которое будет искать шаблоны электронной почты на указанном сайте:

scrapped_urls

Для каждого шаблона электронного ящика, который нам удастся найти, мы собираемся сохранить его, а затем распечатать. В конце выполнения нашей программы, мы также хотим создать еще одно множество, которое будем равно e-mail-ам:

emails = set()

Теперь мы можем попытаться спарсить электронные ящики, с помощью инструкции «try:», и внутри этого оператора, будем использовать цикл «while»:

try: while len(urls):

Нам нужно создать еще переменную «count», которая будет равна 0: «count = 0», и будет увеличиваться на 1:

count = 0, count += 1

Если достигается число счета, равное 100, тогда выходим из цикла. Это просто означает, что мы говорим программе, очистить только первые 100 url-адресов:

if count == 100 break

Поскольку, все адреса url находятся в «deque», нам необходимо создать переменную «url», и использовать функцию «popleft», для того, чтобы адреса появлялись слева:

url = urls.popleft()

Мы можем использовать этот url-адрес, и добавить его с помощью метода «add()», и затем указать «url» в скобках:

scrapped_urls.add(url)

В следующей части цикла статей, мы рассмотрим, как можно преобразовать наш url-адрес, и разделить его на базовые части, а затем посмотрим, как создать шаблон, который попытается найти электронные ящики, внутри каждого из url-адресов.

Читайте также:  User javascript on https

Источник

Конкурс [ Пишем Hack-Tools ] — Парсер e-mail адресов

mailparser_2.png

Графическая оболочка выполнена в Tkinter входящий в состав Python и не требующий отдельной установки.

import requests import re from tkinter import * from tkinter import filedialog icon="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"

Создаём главное окно с названием «root», задаем размеры окна и запрет на изменение окна .Записываем информацию о версии, название

root=Tk() root.geometry("325x250") root.resizable(width=False, height=False) __version__="0.0.1 Beta" root.title("MailParser "+__version__+" By Pirnazar")

Пишем функцию которая будет выполняться при нажатии кнопки Save для сохранения результатов в файл.

def save(): fn = filedialog.SaveAs(filetypes = [('*.txt', '.txt')]).show() if fn == '': return if not fn.endswith(".txt"): fn+=".txt" open(fn, 'wt').write(email.get('1.0', 'end'))

Теперь самое главное, сердце программы))

def run(): database=[] # создаем "базу" (список) ссылок чтоб не было дубликатов headers = < 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36' ># Задаем User-Agent-a чтоб не палиться url=url_value.get() # Получаем ссылку на страницу try: # Попробуем сделать запрос page=requests.get(url,headers=headers) except: # Если не получилось сделать запрос тогда url="http://"+url # добавляем начала ссылки "http://" page=requests.get(url,headers=headers) # Снова попробуем отправить запрос page=str(page.text) emails=re.findall('\w+\@\w+.\w+',page) # Ищем e-mail адреса for i in range(len(emails)): # Запускаем цикл for в списке email if emails[i] in database: # Если e-mail адрес есть в базе данных тогда pass # ничего)) else: # В противном случай email.insert(END, emails[i]+'\n') # Добавляем в текстовое поле database.append(emails[i]) # Добавляем в базу данных
root.tk.call('wm', 'iconphoto', root._w, img)

Создаем надписи, кнопки, текстовое поля.

text_1=Label(text="URL:") text_1.place(x=10,y=10) url_value=Entry(width=30) url_value.place(x=45,y=10) run=Button(text="Run",height=1,command=run) run.place(x=235,y=10) email=Listbox( font="Courier 9", width=41, height=12) email.place(x=15,y=42) save_btn=Button(text="Save",command=save) save_btn.place(x=273,y=10)

И напоследок отображаем наше окно:

import requests import re from tkinter import * from tkinter import filedialog def run(): database=[] # создаем "базу" (список) ссылок чтоб не было дубликатов headers = < 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36' ># Задаем User-Agent-a чтоб не палиться url=url_value.get() # Получаем ссылку на страницу try: # Попробуем сделать запрос page=requests.get(url,headers=headers) except: # Если не получилось сделать запрос тогда url="http://"+url # добавляем начала ссылки "http://" page=requests.get(url,headers=headers) # Снова попробуем отправить запрос page=str(page.text) emails=re.findall('\w+\@\w+.\w+',page) # Ищем e-mail адреса for i in range(len(emails)): # Запускаем цикл for в списке email if emails[i] in database: # Если e-mail адрес есть в базе данных тогда pass # ничего)) else: # В противном случай email.insert(END, emails[i]+'\n') # Добавляем в текстовое поле database.append(emails[i]) # Добавляем в базу данных def save(): fn = filedialog.SaveAs(filetypes = [('*.txt', '.txt')]).show() if fn == '': return if not fn.endswith(".txt"): fn+=".txt" open(fn, 'wt').write(email.get('1.0', 'end')) root=Tk() root.geometry("325x250") root.resizable(width=False, height=False) __version__="0.0.1 Beta" root.title("MailParser "+__version__+" By Pirnazar") icon="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" img = PhotoImage(data=icon) root.tk.call('wm', 'iconphoto', root._w, img) text_1=Label(text="URL:") text_1.place(x=10,y=10) url_value=Entry(width=30) url_value.place(x=45,y=10) run=Button(text="Run",height=1,command=run) run.place(x=235,y=10) email=Listbox( font="Courier 9", width=41, height=12) email.place(x=15,y=42) save_btn=Button(text="Save",command=save) save_btn.place(x=273,y=10) root.mainloop()

Источник

Оцените статью