Как прослушать несколько портов в python?

Есть такой скрипт
import socket
import os
import logging
import psutil

WOL_PORT = 7
INTERFACE_NAME = 'Ethernet 2'

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('sudo shutdown -h now')
            elif os.name == 'nt':
                os.system('"shutdown -r"')


run_udp_port_listener(WOL_PORT, INTERFACE_NAME)


Можно ли прослушивать несколько портов для выполнения разных команд в условии?
  • Вопрос задан
  • 94 просмотра
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
Можно, открыв несколько сокетов и проверяя их все.
Но начиная с определенного числа команд проще будет использовать SSH или иную форму удалённого управления.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
24 июл. 2024, в 11:35
10000 руб./за проект
24 июл. 2024, в 11:14
2000 руб./за проект
24 июл. 2024, в 10:48
10000 руб./за проект