Kategorie: Server, Desktop

Wake on LAN - Zapínání počítačů po síti

Jak přes běžnou drátovou síť zapnout vypnutý nebo uspaný počítač pomocí WakeOnLan, tedy zasláním magického paketu.

Co je potřeba

  • Podporu WakeOnLan hardwaru (novější stolní počítače obvykle podporují)
  • Zapnutou podporu WakeOnLan v BIOSu
  • MAC adresu (fyzickou adresu) síťové karty počítače
  • Případně IP adresu, pokud zapínající a zapínaný počítač leží v různých podsítích
  • Na softwaru zapínaného počítače nezáleží, vše leží na hardwaru

Hardware

Aby WakeOnLan mohlo fungovat, musí po vypnutí počítače zůstat síťová karta zapnutá. Poznat lze podle kontrolek u konektoru - pokud svítí i když je počítač vypnutý, mělo by to fungovat. Nastavit by to mělo jít v Setupu v části věnované Power managementu. Například vedle časovaného zapínání, nebo zapínání počítače klávesnicí. Je zde sice také položka External modem, to co ale hledáme se (minimálně tam kde jsem to zkoušel) skrývá pod PCIe.

Aby magický paket dorazil do správné síťové karty, musí být adresován patřičné MAC adrese. Ta stačí aby paket putoval skrz switch, ale ne skrz router - aby paket prošel skrz router, musí být opatřený patřičnou IP adresou. Ta nemusí náležet přímo samotnému počítači, který ji v tu chvíli ostatně ani nemusí mít, ale musí ležet v dané podsíti. Pokud paket vysíláme ze stejné podsítě, můžeme místo IP adresy použít adresu 255.255.255.255 - paket tak bude doručen všem počítačům v místní podsíti, ale bude platit pouze pro ten s danou MAC adresou.

Odeslání z Linuxu

Za nejstandardnější způsob se může považovat příkaz wakeonlan ze stejnojmenného balíku. Nejobvyklejší použití:
wakeonlan 00:12:4G:SF:12:13
Pokud počítač leží v jiné podsíti, musíme uvést i IP adresu, která paket dovede do správné podsítě: (Můžeme použít oběžník dané podsítě, nebo přímo IP počítače, teoreticky by měla stačit libovolná IP v dané podsíti, zajímají se o ni totiž pouze routery, protože paket přijímá samotná síťová karta, která IP adresu nepoužívá)
wakeonlan -i 192.168.5.255 00:12:4G:SF:12:13

Odeslání z PHP (neotestováno)

function WakeOnLan($mac,$addr="255.255.255.255",$socket_number=9){
 $addr_byte = explode(':',$mac);
 $hw_addr = '';
 for ($a=0; $a <6; $a++) $hw_addr .= chr(hexdec($addr_byte[$a]));
 $msg = chr(255).chr(255).chr(255).chr(255).chr(255).chr(255);
 for ($a = 1; $a <= 16; $a++) $msg .= $hw_addr;
 if(!socket_create(AF_INET, SOCK_DGRAM, SOL_UDP)){
  echo "Error creating socket: ".socket_strerror(socket_last_error($s));
  return false;
 }else{
  if(($opt_ret = socket_set_option($s, 1, 6, TRUE))<0){
   echo "setsockopt() failed, error: " . strerror($opt_ret) . "\n";
   return false;
  }
  if(socket_sendto($s, $msg, strlen($msg), 0, $addr, $socket_number)){
   socket_close($s);
   return true;
  }else{
   echo "socket_sendto() failed!";
   return false;
  }
 }
}
WakeOnLan("00:12:4G:SF:12:13",gethostbyname("myhomeserver.dynamicdns.org"));

Odeslání z Windows

Pro odeslání z Windows existuje několik utilitek, jako například PowerOff, který lze použít i v dávkových souborech a i pro jiné vychytávky jako je například vypínání počítače nebo zamykání obrazovky.

Komentáře


Nebyly přidány žádné komentáře.