Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - Python - Как запустить прослушивание портов и разные команды к ним при обращении?

Ответить
Настройки темы
Разное - Python - Как запустить прослушивание портов и разные команды к ним при обращении?

Аватара для Mancoffee

Старожил


Сообщения: 410
Благодарности: 10


Конфигурация

Профиль | Отправить PM | Цитировать


Есть такой скрипт
Скрытый текст
Код: Выделить весь код
import socket
import os
import logging
import psutil

WOL_PORT = 9999
INTERFACE_NAME = 'My Lan'
INTERFACE_NAME_ARCH = 'enp37s0'

logging.basicConfig(format='%(levelname)s: %(asctime)s %(message)s', level=logging.INFO)
logger = logging.getLogger(__name__)


def get_ip_mac_address(interface_name: str) -> tuple:
    ip_addr = mac_addr = None

    for item in psutil.net_if_addrs()[interface_name]:
        addr = item.address

        if '.' in addr:
            ip_addr = addr
        elif ('-' in addr or ':' in addr) and '::' not in addr:
            mac_addr = addr.replace(':', '-').upper()

    if not ip_addr or not mac_addr or ip_addr == '127.0.0.1':
        raise 'Не удалось получить IP или MAC-адрес сетевого интерфейса'

    return ip_addr, mac_addr


def assemble_wol_packet(mac_address: str) -> str:
    return f'{"FF-" * 6}{(mac_address + "-") * 16}'


def check_is_wol_packet(raw_bytes: bytes, assembled_wol_packet: str) -> int:
    decoded_packet_data = '-'.join(f'{byte:02x}' for byte in raw_bytes).upper() + '-'

    if decoded_packet_data == assembled_wol_packet:
        return 1

    return 0


def run_udp_port_listener(port: int, interface_name: str):
    ip_addr, mac_addr = get_ip_mac_address(interface_name)

    server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    server_socket.bind((ip_addr, port))
    logger.info(f'Listening on {ip_addr}:{port}')

    assembled_wol_packet = assemble_wol_packet(mac_addr)

    while True:
        data, _ = server_socket.recvfrom(1024)

        is_wol_packet = check_is_wol_packet(data, assembled_wol_packet)

        if is_wol_packet == 1:
            if os.name == 'posix':
                os.system('reboot')
            elif os.name == 'nt':
                os.system('D:\\TotalCMD\\Launching\\Soft\\System\\EasyUEFI\\App\\EasyUEFI\\bin\\EasyUEFIC.exe --one-time-boot --index 6 & shutdown -r -t 0 -f')

if os.name == 'posix':
    run_udp_port_listener(WOL_PORT, INTERFACE_NAME_ARCH)
elif os.name == 'nt':
    run_udp_port_listener(WOL_PORT, INTERFACE_NAME)

Нужно запускать разные программы/команды при запуске пакета wol с андроид. Сейчас приходиться плодить запуск 4-5 скриптов, чтобы выполнять разные команды.
Можно ли это всё в одно собрать?
Например если обращение идёт к порту 9999, то запустить то-то, если к 9998, то другую команду.

Отправлено: 21:48, 26-10-2024

 


Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - Python - Как запустить прослушивание портов и разные команды к ним при обращении?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Поиск файла по маске и выполнение с ним команды idenchik1488@vk Скриптовые языки администрирования Windows 4 14-08-2017 19:11
Proxy/NAT - Переброс портов при обращении на конкретный домен kim-g Сетевые технологии 1 15-09-2016 01:44
VBS/WSH/JS - Циклическое выполнение команды при обращении к файлу НариманБ Скриптовые языки администрирования Windows 1 29-07-2016 13:00
Ошибка - Ненормальные тормоза в XP при обращении к харду, как избавится? DENIS451 Microsoft Windows 2000/XP 12 16-09-2009 06:27
Доступ - Открытие портов и подкючение к ним. masergey Microsoft Windows 2000/XP 3 12-03-2008 20:00




 
Переход