Разбудить устройство (Wake-on-LAN) на Python

Wake-on-LAN (WoL) — это полезная технология, которая позволяет удаленно включать компьютер или другое устройство в локальной сети (LAN). Это особенно удобно для системных администраторов и энтузиастов, которые хотят управлять своими устройствами удаленно. В этой статье мы рассмотрим, как реализовать Wake-on-LAN на Python, используя различные подходы.

Основы Wake-on-LAN

WoL работает по принципу отправки специального сетевого пакета, известного как "magic packet", на сетевой интерфейс устройства. Этот пакет содержит MAC-адрес целевого устройства и передается в локальную сеть. Сетевой адаптер устройства, получив такой пакет, инициирует включение или пробуждение устройства.

Важные моменты

  • MAC-адрес: Уникальный идентификатор сетевого интерфейса устройства.
  • Magic Packet: Специальный пакет данных, состоящий из шести байт 0xFF, за которыми следует MAC-адрес, повторенный 16 раз.
  • Широковещательная передача: Magic packet отправляется на широковещательный адрес, чтобы его получили все устройства в сети.

Подготовка устройства

Перед тем, как реализовать WoL, необходимо убедиться, что целевое устройство настроено для поддержки этой функции:

  1. BIOS/UEFI: Включите поддержку Wake-on-LAN в настройках BIOS или UEFI.
  2. Операционная система:
    • Windows: Включите WoL в свойствах сетевого адаптера.
    • Linux: Настройте сетевой адаптер с помощью утилиты ethtool.

Реализация Wake-on-LAN на Python

Вариант 1: Использование библиотеки socket

Это базовый способ, который не требует установки дополнительных библиотек.

import socket

def wol(mac, ip='255.255.255.255', port=4343): # port: 7, 9 or 4343
    mac = mac.replace('-', ':')
    if len(mac) == 17 and mac.count(':') == 5:
        mac_bytes = bytes.fromhex(mac.replace(':', ''))
    else:
        print('Неправильный формат MAC-адреса.')
    magic_packet = b'\xff' * 6 + mac_bytes * 16
    with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as sock:
        sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
        sock.sendto(magic_packet, (ip, port))

wol(mac='00:B0:D0:63:C2:26', port=9)
Вариант 2: Использование библиотеки wakeonlan

Эта библиотека упрощает процесс отправки WoL пакетов. Сначала установите её:

pip install wakeonlan
Пример кода:
from wakeonlan import send_magic_packet

def wol(mac, ip='255.255.255.255', port=4343): # port: 7, 9 or 4343
    send_magic_packet(mac, ip_address=ip, port=port)

wol(mac='00:B0:D0:63:C2:26', port=9)

Примечания

  • Безопасность: Используйте WoL в доверенных сетях, так как широковещательные пакеты могут быть использованы злоумышленниками.
  • Совместимость: Убедитесь, что ваше устройство и сетевое оборудование поддерживают WoL.
  • Сетевые ограничения: Если вы хотите отправить WoL пакет через Интернет, возможно, потребуется дополнительная настройка маршрутизатора или использование VPN.

Заключение

Wake-on-LAN — мощный инструмент для удаленного управления устройствами. С помощью Python можно легко реализовать отправку WoL пакетов, используя различные подходы, от встроенной библиотеки socket до специализированных библиотек, таких как wakeonlan. Надеюсь, эта статья помогла вам понять, как настроить и использовать WoL в ваших проектах.
Поделится:
*текст* - жирный, ~текст~ - курсивный, -текст- - зачеркнутый, _текст_ - подчеркнутый
IP-адрес: 3.145.7.253
Часовой пояс: Asia/Almaty
Подробнее

Сервисы

Страницы

Информация