Различия
Показаны различия между двумя версиями страницы.
| Следующая версия | Предыдущая версия | ||
|
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 минут. | ||