Как реализовать функцию Wake ON LAN
От: kastet  
Дата: 26.10.02 09:18
Оценка:
Не знает ли кто-нибудь как разбудить выключенный компьютер при помощи Wake on LAN ?

Насколько я знаю, надо послать на его сетевуху т.н. "Magic Packet". Как его сформировать? Может у кого примеры/исходники есть ?
Re: Как реализовать функцию Wake ON LAN
От: Александр Воронин Россия [70620598]
Дата: 28.10.02 06:28
Оценка:
Здравствуйте kastet, Вы писали:

K>Не знает ли кто-нибудь как разбудить выключенный компьютер при помощи Wake on LAN ?


Вот, завалялось...

#!/usr/bin/perl
#
# little perl script to send a wake-up "magic" packet via lan to power-on
# a PC. This is only supported by new BIOS versions, and must be supported
# by the LAN adapter.
#
# (c) 1999 by Marc Heuse <mheuse@kpmg.com>, the GPL applies to this code.
#

$IP="255.255.255.255";  # limited broadcast ip (default)
$PORT="9991";       # udp port             (default)
$INIT_STREAM="\377\377\377\377\377\377";     # (don't change this)

require 5.002;
use Socket;

if (not defined $ARGV[0]) {
    print "(c) 1999 by Marc Heuse <mheuse\@kpmg.com>\n\n";
    print "Syntax: $0 ethernet_id [ip-address] [udp-port]\n\n";
    print "Sends a magic wakeup packet to turn on a PC via the LAN\n";
    print "Example: $0 00:80:c9:d1:e0:eb 10.70.82.255 53\n\n";
    exit(1);
}

$ETHERNET_ID = $ARGV[0];
$IP   = $ARGV[1]  if defined $ARGV[1];
$PORT = $ARGV[2]  if defined $ARGV[2];

print STDOUT "Sending to Ethernet-ID $ETHERNET_ID, using destination $IP:$PORT\n";

$protocol = getprotobyname('udp');
socket(S, &PF_INET, &SOCK_DGRAM, $protocol) || die "can't create socket\n";
setsockopt(S, SOL_SOCKET, SO_REUSEADDR, 1);
setsockopt(S, SOL_SOCKET, SO_BROADCAST, 1);
bind(S, sockaddr_in(0, INADDR_ANY)) || die "can't bind\n";
$ipaddr = inet_aton($IP)        || die "unknown host: $IP\n";
$paddr  = sockaddr_in($PORT, $ipaddr)   || die "sockaddr failed\n";

$ETHERNET_ID =~ s/[:-]//g;
$ETHERNET_ID = pack "H12", $ETHERNET_ID;

$WAKE_UP = $INIT_STREAM;    $i=0;
while ($i<16) {
    $WAKE_UP = $WAKE_UP . $ETHERNET_ID;
    $i++;
}

# send three times to be sure the system gets the packet
send (S, $WAKE_UP,0,$paddr)     || die "send failed.\n";
send (S, $WAKE_UP,0,$paddr);
send (S, $WAKE_UP,0,$paddr);
---
wbr, Alexander Voronin
mailto:
Re[2]: Как реализовать функцию Wake ON LAN
От: Formica  
Дата: 16.12.02 11:24
Оценка:
Оно конечно замечательно.Скриптик правильный.
Но можно узнать вы с помощью его включили компьютер?
Если да,то можно узнать подробности(порт например).
А то писал прогу на d6;делает то же самое,но машина так и не проснулась.
Re[3]: Как реализовать функцию Wake ON LAN
От: kastet  
Дата: 16.12.02 13:40
Оценка:
Здравствуйте, Formica, Вы писали:

F>Оно конечно замечательно.Скриптик правильный.

F>Но можно узнать вы с помощью его включили компьютер?
F>Если да,то можно узнать подробности(порт например).
F>А то писал прогу на d6;делает то же самое,но машина так и не проснулась.


Аналогично! Машину включить не удалось. Злые языки говорят, что чтобы работал Wake On Lan надо какой-то кабель из сетевухи в материнскую плату воткнуть. Проверить не могу, кабеля нет.
Re[4]: Как реализовать функцию Wake ON LAN
От: Александр Воронин Россия [70620598]
Дата: 16.12.02 13:55
Оценка: 1 (1)
Здравствуйте, kastet, Вы писали:

K>Здравствуйте, Formica, Вы писали:


F>>А то писал прогу на d6;делает то же самое,но машина так и не проснулась.


Дома нет под рукой подходящего железа, а на работе — машины с перлом и времени

K>Аналогично! Машину включить не удалось. Злые языки говорят, что чтобы работал Wake On Lan надо какой-то кабель из сетевухи в материнскую плату воткнуть. Проверить не могу, кабеля нет.


Чтобы работала эта фича надо выполнить минимум 2.5 начальных условия:
1. Сетевуха должна быть PCI2.2-compatible, либо более старая, но с тем самым кабелем (по нему мать подает питающие 5В на сетевуху и слушает ее выход WOL). В PCI2.2 все это возможно без внешнего шнурка.
2. Режим WOL должен поддерживаться и быть включен в БИОСе (WakeOn — NetCard)
2.5 Комп предварительно должен быть "правильно" выключен — кажется, это называется "Soft-Off" — лампочки на клаве и сетевой карте должны гореть (хотя, я видел сетевуху, где это не так, но светодиодами при пинге она подмаргивает в "выключенном" состоянии). При выключении кнопкой, некоторых вариантах выключения компа виндой и пропадании питания — это не всегда так.

Ежели появится поболе времени на работе — все ж попробую...

Собственно, интересно, работает ли пинг/коннект по MAC адресу... ...
---
wbr, Alexander Voronin
mailto:
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.