Czym jest magiczny pakiet Wake on LAN?

Wake on LAN włącza uśpiony lub wyłączony komputer przez sieć. Karta sieciowa komputera pozostaje zasilana i nasłuchuje magicznego pakietu: 6 bajtów FF, po których 16 razy następuje adres MAC komputera, czyli łącznie 102 bajty. Pakiet jest zwykle wysyłany jako rozgłoszenie UDP na port 9 lub 7, dzięki czemu odbierają go wszystkie urządzenia w sieci lokalnej, ale wybudza się tylko urządzenie o pasującym adresie. Funkcję Wake on LAN trzeba najpierw włączyć w ustawieniach BIOS-u lub UEFI komputera.

Narzędzia takie jak wakeonlan i etherwake wysyłają ten pakiet, ale nie zawsze są zainstalowane, a na serwerze lub urządzeniu NAS możesz nie chcieć ich dodawać.

Opis narzędzia

To narzędzie tworzy jednolinijkowe polecenie, które wysyła pakiet przy użyciu tego, co Linux ma już dostępne. Wpisz adres MAC komputera, który chcesz wybudzić, w formacie 00:11:22:AA:BB:CC, 00-11-22-AA-BB-CC, 0011.22AA.BBCC lub jako 12 kolejnych cyfr szesnastkowych, a następnie wybierz metodę wysyłania w polu Wyślij za pomocą:

  • Python 3 lub Perl — działają w bash i zsh, nie wymagają dostępu root i obsługują rozgłaszanie
  • Bash /dev/udp — nie wymaga instalowania żadnych dodatkowych narzędzi, ale działa tylko w bash, nie w zsh, i nie obsługuje rozgłaszania

Pole Adres rozgłoszeniowy lub IP jest wstępnie ustawione na 255.255.255.255, a port UDP na 9. Linux zwraca komunikat „Permission denied”, gdy bash wysyła dane na adres rozgłoszeniowy, dlatego narzędzie wyświetli ostrzeżenie, jeśli wybierzesz bash i adres kończący się na .255. Zamiast tego użyj w tym polu adresu IP danego komputera.

Polecenie jest tworzone w przeglądarce. Skopiuj je i uruchom na dowolnym komputerze z systemem Linux w tej samej sieci.

Przykłady

Dla adresu 00:11:22:AA:BB:CC, Python 3, rozgłaszanie na porcie 9:

python3 -c 'import socket;s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM);s.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,1);s.sendto(bytes.fromhex("ff"*6+"001122aabbcc"*16),("255.255.255.255",9))'

Bash, wysyłanie bezpośrednio do komputera o adresie 192.168.1.20:

printf "$(printf '\\xff%.0s' {1..6})$(printf '\\x00\\x11\\x22\\xaa\\xbb\\xcc%.0s' {1..16})" > /dev/udp/192.168.1.20/9

Funkcje

  • Polecenia w wersjach dla Python 3, Perl i bash
  • Obsługa adresów MAC z dwukropkami, myślnikami, kropkami lub bez separatorów
  • Ostrzeżenie, gdy wersja dla bash nie może dotrzeć do adresu rozgłoszeniowego