Войти

Показать полную графическую версию : Wake-on-LAN


Guest
23-06-2004, 13:40
Здравствуйте!

Мне нужно из программы включить удаленно комп. На том компе Wake-on-LAN присутствует, проблема в том, как через API-вызовы (или еще как) послать сигнал компу включиться. Пробовал искать в MSDN - максимум, что нашел, это то, что нужно тому компу послать Magic Packet, но что это такое и как его послать...

И еще: чтобы комп включился по Wake-on-LAN он может быть выключен (Soft-Off) или нужно, чтобы он был в Suspend'е ?

Vlad Drakula
23-06-2004, 21:12
Guest
для того чтобы комп включился нужно чтобы его материнка и сетевуха были под напряжением (комп может быть выключен)

что бы разбудить комп в биусе должна стоять галка "Wake-on-LAN"

потом по сети нужно послать этому компу пакет данных, тогда сетевуха даст сигнал и комп начнет загружаться.

но сетевуха должна это поддерживать!

Dread Knight
24-06-2004, 00:27
Еще раз привет, если что - Guest это был я.

Поясню еще раз, чтобы советов с бухты барахты a-la Vlad Drakula (надеюсь, без обид?)  больше не поступало.

Материнка и сетевуха под напряжением (на свитче лампочки светятся), в биосе стоит галка, сетевуха WOL, ессесно, поддерживает (а в добавок и boot from lan, но суть не в этом).
Я все это знаю, и трабла моя не в этом. Вопрос ведь звучит не "почему у меня WOL не работает". Вопрос стоит так: какую(ие) функцию и из какой DLL нужно заюзать чтобы послать пакет по сети (я так понимаю, не по IP или имени компа, а по MAC адресу сетевухи), и что именно это должен быть за пакет, т.е. нужно либо название функции, либо (еще лучше), кусок кода, выполняющий данное действие.

На данный момент я сумел найти только функции Ndis<чего-нибудь>, но во-первых для них мне нужен ndis.h, которого я что-то не нашел у себя, и во-вторых, судя по кое-чему из их описания, заюзать их можно только в режиме ядра, а значит из драйвера. Но драйвер писать как-то неохота, да и не нужны мне такие сложности. Может, есть еще что-нить?

И все так же неясно с Magic Packet.

Vlad Drakula
24-06-2004, 01:47
Dread Knight
тебе нужна не "ndis.h" а "Ntddndis.h"

hasherfrog
24-06-2004, 09:17
Dread Knight
Думаю, сначала стоит решить несколько теоритических вопросов и сделать несколько ламерских попыток прояснить ситуацию "вручную", У Вас есть машина (точнее, две + LAN), на которой Вы могли бы опробовать пробуждения? Если да, я предлагаю проверить:
1. Если пингануть "спящую" машину, она проснётся?
2. Что вообще необходимо/достаточно сделать на второй машине, чтобы проснулась "спящая".
Если знать хотя бы такие мелочи, можно решить вопрос бвстрее. Дело в том, что я лично никогда этим не пользуюсь, потому что:
1. Непатченные и ранние версии виндов вообще плохо "просыпаются". Да, я помню, что Вам надо включиться, а не проснутся, но если машина не выключилась, а "уснула", то будет как раз этот вариант.
2. Вытекает из первого пункта. По умолчания установка сетевой карты ключает режим "отключать сетевую карту для экономии". Имхо, это как-то может наложится на Wake-on-LAN.
ПС. Возможно, это дилетантские размышления, но... Мне же теперь тоже интересно, что это за Маджик-пакет :)

Добавлено:

ППС. Немного путанно вышло с терминами "спящая". В одном случае имеется в виду "в гибернации", в другом - "отключенная". Надеюсь, Вы поймёте.

CyberDaemon
24-06-2004, 10:39
И все так же неясно с Magic Packet
Дык есть же Гугль (http://www.google.ru/search?q=Magic%20packet)! Сылок вываливает - море. В первой же пятерке ссылок даже какую-то DLL (http://www.sevillaonline.com/ActiveX/ARMagicPacketLib.htm) найти можно.

hasherfrog
24-06-2004, 11:01
Да, правду говорят: "Вера - это когда лень проверить". Я-то действительно решил, что инфу сложно найти...

Dread Knight
24-06-2004, 15:31
Vlad Drakula
проверю, но не думаю, что мне это действительно нужно, почему - см. ниже

CyberDaemon
про гугль я и сам вспомнил, только вот Magic Packet поискать там как-то не додумался... :gigi:
правда, ответа на свой вопрос я пока так и не нашел - либа это хорошо, но мне интересно, как оно работает.

кстати, нашел я и прогу, которая включает мой комп по сети, и с ней все заработало как надо. Но хотелось бы узнать, как именно.
Судя по ее импортам, она юзает сокеты, вот только как? Не то чтобы я совсем ламер, просто с сокетами я работал мало, и как с их помощью послать ровно 1 определнный пакет на определенный MAC- (а не IP-) адрес, представляю не смутно, а очень смутно (то есть не представляю совсем)

hasherfrog
Я-то действительно решил, что инфу сложно найти...
не, ну, я-то искал, просто не там, и не то :gigi:

в общем, будем искать :) только не сейчас, а вечером.
но если кто чего может сказать сразу - скажу спасибо за сэкономленное мне время

Guest
25-06-2004, 16:51
как было сказано выше ... ты попробовал Google ?!?!

вот тебе несколько из результатов по поиску "WOL ethernet packet format":

http://www.matcode.com/wol.htm
  - это конзольная програмка
http://ahh.sourceforge.net/wol/wol.html#SEC4
  - описание magic packet-а
http://markh.de/software/wol.c
  - прогромный код... написан для Linux но очень просто доработавыется до Win.

hasherfrog
26-06-2004, 11:10
По поводу данных Guest ссылок.
Пример wol.c делает броадкастовый посыл пакета, что не совсем корректно. Кроме того, емнип, я по гуглевым ссылкам, выдаваемых на запрос, приведённый CyberDaemon, видел (ещё раз емнип) содержимое маджик-пакета. В wol.c его нет.
Что касается программирования под winsock. Нужен обязательно 2.0, т.к. "сырые сокеты" поддерживаются только там.




© OSzone.net 2001-2012