Различия
Показаны различия между двумя версиями страницы.
Следующая версия | Предыдущая версия | ||
rdp:доступ-к-windows-rdp-по-e-mail [2020/12/20 01:00] admin создано |
rdp:доступ-к-windows-rdp-по-e-mail [2020/12/20 14:38] (текущий) admin |
||
---|---|---|---|
Строка 3: | Строка 3: | ||
Сразу оговоримся: | Сразу оговоримся: | ||
- | Из-за самоизоляции большей части бухгалтеров пришлось работать удаленно. Самым быстрым решением был проброс RDP наружу. Что бы в тот же час сервер не начали ломать, | + | Из-за самоизоляции большей части бухгалтеров пришлось работать удаленно. Самым быстрым решением был проброс RDP наружу. Что бы в тот же час сервер не начали ломать, |
Корпоративная почта располагается на сервисе ЯндексКоннект. Для начала создал ящик 1с@example.com и в нем папку access. Правилами обработки входящей почты указал, | Корпоративная почта располагается на сервисе ЯндексКоннект. Для начала создал ящик 1с@example.com и в нем папку access. Правилами обработки входящей почты указал, | ||
+ | {{ : | ||
Теперь создаем папку scripts, и в нее кладем файл mail.py с данным содержанием (используется Pyhon 3.7×64): | Теперь создаем папку scripts, и в нее кладем файл mail.py с данным содержанием (используется Pyhon 3.7×64): | ||
- | ? | + | <file python mail.py> |
- | 1 | + | |
- | 2 | + | |
- | 3 | + | |
- | 4 | + | |
- | 5 | + | |
- | 6 | + | |
- | 7 | + | |
- | 8 | + | |
- | 9 | + | |
- | 10 | + | |
- | 11 | + | |
- | 12 | + | |
- | 13 | + | |
- | 14 | + | |
- | 15 | + | |
- | 16 | + | |
- | 17 | + | |
- | 18 | + | |
- | 19 | + | |
- | 20 | + | |
- | 21 | + | |
- | 22 | + | |
- | 23 | + | |
- | 24 | + | |
- | 25 | + | |
- | 26 | + | |
- | 27 | + | |
- | 28 | + | |
- | 29 | + | |
- | 30 | + | |
- | 31 | + | |
- | 32 | + | |
- | 33 | + | |
- | 34 | + | |
- | 35 | + | |
- | 36 | + | |
- | 37 | + | |
- | 38 | + | |
- | 39 | + | |
- | 40 | + | |
- | 41 | + | |
- | 42 | + | |
- | 43 | + | |
- | 44 | + | |
- | 45 | + | |
- | 46 | + | |
- | 47 | + | |
- | 48 | + | |
- | 49 | + | |
- | 50 | + | |
- | 51 | + | |
- | 52 | + | |
- | 53 | + | |
- | 54 | + | |
- | 55 | + | |
- | 56 | + | |
- | 57 | + | |
- | 58 | + | |
- | 59 | + | |
- | 60 | + | |
- | 61 | + | |
- | 62 | + | |
- | 63 | + | |
- | 64 | + | |
- | 65 | + | |
- | 66 | + | |
- | 67 | + | |
- | 68 | + | |
- | 69 | + | |
- | 70 | + | |
- | 71 | + | |
- | 72 | + | |
- | 73 | + | |
- | 74 | + | |
- | 75 | + | |
- | 76 | + | |
- | 77 | + | |
- | 78 | + | |
- | 79 | + | |
- | 80 | + | |
- | 81 | + | |
- | 82 | + | |
- | 83 | + | |
import imaplib | import imaplib | ||
import email | import email | ||
Строка 103: | Строка 20: | ||
import ipaddress | import ipaddress | ||
import os | import os | ||
- | + | ||
# | # | ||
imap = imaplib.IMAP4_SSL(' | imap = imaplib.IMAP4_SSL(' | ||
- | imap.login(' | + | imap.login(' |
- | + | ||
#выбор каталога | #выбор каталога | ||
imap.select(' | imap.select(' | ||
- | + | ||
# | # | ||
r, d = imap.search(None, | r, d = imap.search(None, | ||
Строка 118: | Строка 35: | ||
matches = re.finditer(regex, | matches = re.finditer(regex, | ||
for matchNum, match in enumerate(matches, | for matchNum, match in enumerate(matches, | ||
- | carray.extend (" | + | carray.extend (" |
i = len(carray) | i = len(carray) | ||
ii=0 | ii=0 | ||
- | + | ||
def check_ip(ip): | def check_ip(ip): | ||
- | try: | + | |
- | ipaddress.ip_address(ip) | + | ipaddress.ip_address(ip) |
- | except ValueError: | + | except ValueError: |
- | return 0 | + | return 0 |
- | else: | + | else: |
- | return 1 | + | return 1 |
- | + | ||
- | while ii & | + | while ii < i: |
- | result, data = imap.search(None, | + | result, data = imap.search(None, |
- | ids = data[0] # Получаем сроку номеров писем | + | ids = data[0] # Получаем сроку номеров писем |
- | id_list = ids.split() # Разделяем ID писем | + | id_list = ids.split() # Разделяем ID писем |
- | latest_email_id = id_list[-1] # Берем последний ID | + | latest_email_id = id_list[-1] # Берем последний ID |
- | result, data = imap.fetch(latest_email_id, | + | result, data = imap.fetch(latest_email_id, |
- | raw_email = data[0][1] # Тело письма в необработанном виде | + | raw_email = data[0][1] # Тело письма в необработанном виде |
- | email_message = email.message_from_bytes(raw_email) | + | email_message = email.message_from_bytes(raw_email) |
- | efrom = make_header(decode_header(email_message[' | + | efrom = make_header(decode_header(email_message[' |
- | esubject = make_header(decode_header(email_message[' | + | esubject = make_header(decode_header(email_message[' |
- | sesubject = str(esubject) | + | sesubject = str(esubject) |
- | edate = email_message[' | + | edate = email_message[' |
- | ipv = check_ip(str(esubject)) | + | ipv = check_ip(str(esubject)) |
- | f = open(' | + | f = open(' |
- | f.write(edate) | + | f.write(edate) |
- | f.write(' | + | f.write(' |
- | f.write(str(efrom)) | + | f.write(str(efrom)) |
- | f.write(' | + | f.write(' |
- | f.write(str(esubject)) | + | f.write(str(esubject)) |
- | f.write(' | + | f.write(' |
- | f.close() | + | f.close() |
- | print(' | + | print(' |
- | if ipv == 1: | + | if ipv == 1: |
- | f = open(' | + | f = open(' |
- | f.write(sesubject) | + | f.write(sesubject) |
- | f.write(',' | + | f.write(',' |
- | f.close() | + | f.close() |
- | print(' | + | print(' |
- | else: | + | else: |
- | f = open(' | + | f = open(' |
- | f.write(' | + | f.write(' |
- | f.write(sesubject) | + | f.write(sesubject) |
- | f.close() | + | f.close() |
- | print(' | + | print(' |
- | f = open(' | + | f = open(' |
- | f.write(' | + | f.write(' |
- | f.close() | + | f.close() |
- | + | ||
- | ii = ii+1 | + | ii = ii+1 |
- | if ii == i: | + | if ii == i: |
- | break | + | |
- | + | ||
f = open(' | f = open(' | ||
ipslist = f.read().split("," | ipslist = f.read().split("," | ||
Строка 178: | Строка 95: | ||
ips = str(ips) | ips = str(ips) | ||
os.system(' | os.system(' | ||
+ | </ | ||
+ | |||
Для корректного работы скрипта требуется: | Для корректного работы скрипта требуется: | ||
- | Заменить имя почтового ящика (1с@example.com) и пароль (PASSWORD) на ваши. | + | - Заменить имя почтового ящика (1с@example.com) и пароль (PASSWORD) на ваши. |
- | Заменить имя RDP доступа на ваше. У меня указано для Windows 7 ( Дистанционное управление рабочим столом (TCP — входящий) ) | + | |
- | Создать файл access.txt и log.txt | + | |
- | В access.txt заранее через запятую внести IP адреса с которых должен быть доступ (как правило это внутренние подсети и ip администратора) | + | |
- | Наконец создать файл start.cmd с содержанием: | + | |
- | ? | + | |
- | 1 | + | <file dos start.cmd> |
- | 2 | + | |
cd C:\scripts\ | cd C:\scripts\ | ||
mail.py | mail.py | ||
+ | </ | ||
+ | |||
После чего дергайте скрипт через планировщик каждые 5 минут. | После чего дергайте скрипт через планировщик каждые 5 минут. |