Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/49: Рейтинг темы: голосов - 49, средняя оценка - 4.76
 Аватар для QenT
40 / 40 / 8
Регистрация: 29.01.2009
Сообщений: 244

Wake-on-LAN (Magic Packet)

10.04.2009, 03:58. Показов 9433. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
WOL (англ. Wake-on-LAN — пробуждение по локальной сети) — технология, позволяющая удаленно «пробудить» компьютер посредством ЛВС, отправив по сети так называемый «Magic Packet» — пакет, сформированный специальным образом. Этот пакет может быть вставлен в пакеты любых стандартных протоколов верхних уровней, например, UDP, TCP или IPX.
Состав Magic Packet:
Вначале идет так называемая “цепочка синхронизации”, состоящая из 6 байт FF, а затем — MAC-адрес сетевой платы, повторённый 16 раз. То есть, если бы адрес платы выглядел как 01:02:03:04:05:06, то магический пакет оказался бы таким:
FFFFFFFFFFFF0102030405060102030405060102 03040506010203040506
0102030405060102030405060102030405060102 03040506010203040506
0102030405060102030405060102030405060102 03040506010203040506
010203040506010203040506

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
Код на Delphi (исправлено)
program WOL;
 
{$APPTYPE CONSOLE}
 
uses
  Windows,
  SysUtils,
  IdBaseComponent,
  IdComponent,
  IdUDPBase,
  IdUDPClient,
  IdGlobal;
{$R *.res}
 
function HexToInt(const s: string): Integer;
begin
  Result := 0;
  if Length(s) <= (SizeOf(LongWord) * 2) then
    Result := StrToInt('$' + s);
end;
 
procedure ErrMsg(Msg:String);
begin
  MessageBox(0,PChar(Msg),'Wake On LAN',MB_OK or MB_ICONERROR);
end;
 
procedure WakeUPComputer(aMacAddress: string);
var i,j,k:Byte;
    lBuffer: TBytes; // исправлено здесь (для BDS2006)
    lUDPClient:TIdUDPClient;
begin
  try
    SetLength(lBuffer,102);
 
    for i := 0 to 5 do begin
      lBuffer[i] := $FF;
    end;
 
    for i:=1 to 16 do begin
      k:=i*6;
      for j := 0 to 5 do begin
        lBuffer[k+j] := HexToInt(aMacAddress[j*2+1] + aMacAddress[j*2+2]);
      end;
    end;
 
    lUDPClient:=TIdUDPClient.Create(nil);
    try
      lUDPClient.BroadcastEnabled:=true;
      lUDPClient.Host:='255.255.255.255';
      lUDPClient.Port:=2050;
      lUDPClient.SendBuffer(lBuffer); //исправлено здесь (для BDS2006)
    except
      on E:Exception do ErrMsg(E.Message);
    end;
    lUDPClient.Free;
    SetLength(lBuffer,0); // не забываем чистить память
  except
    on E:Exception do ErrMsg(E.Message);
  end;
end;
 
procedure ShowHelp;
begin
  MessageBox(0,'Usage: WOL.exe <MAC-address>'#13#10'Example: WOL 000D619AFB55',
    'Wake On LAN',0);
end;
 
begin
  if ParamCount>0 then WakeUpComputer(ParamStr(1)) else ShowHelp;
end.
Если, кто то занимался этим на билдере, или понимает как можно с делфи переделать на билдер, помогите пожалуйста.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.04.2009, 03:58
Ответы с готовыми решениями:

wake-on-lan
Привет всем кто разбирается в сетевых технологиях. Ситуация в следующем Я и несколько моих друзей находимся в одной локальной сети! ...

Wake On Lan
Пк в LAN сети включается всегда а по WOL (4G) только после выключения в течении 10-20 секунд то есть он принимает но вот почему только 20...

Wake ON Lan
Здравствуйте, есть материнка ASUS AM1M-A. Когда я нахожусь в локальной сети, то бишь с сижу чрз роутер в своем интернете или чрз телефон...

3
0 / 0 / 0
Регистрация: 15.07.2015
Сообщений: 1
13.04.2009, 19:33
Спасибо за примерчик, как раз искал что-нибудь насчет wake-on-lan.
В общем, как-то так, в функции не оборачивал, проверил на 2009:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <IdBaseComponent.hpp>
#include <IdComponent.hpp>
#include <IdUDPBase.hpp>
#include <IdUDPClient.hpp>
 
void func()
{
    AnsiString MacStr = "00123456789A";
        TIdBytes SendBuf;
    SendBuf.Length = 102;
 
    const char* Str = MacStr.c_str();
    unsigned char MacAddr[ 6 ] = { 0 };
 
    for( int i=0, j=0; i < 12; ++i ) {
        MacAddr[ j ] |= Str[ i ] >= '0' && Str[ i ] <= '9' ? Str[ i ]-'0' :
                        Str[ i ] >= 'A' && Str[ i ] <= 'F' ? Str[ i ]-'A' + 10 :
                        Str[ i ] >= 'a' && Str[ i ] <= 'f' ? Str[ i ]-'a' + 10 : 0x00;
        if( !(i % 2) )
            MacAddr[ j ] <<= 4;
        else
            ++j;
 
    }
    int z = 0;
    for( ; z < 6; ++z )
        SendBuf[ z ] = 0xFF;
    for( int i=0; i < 16; ++i )
        for( int j=0; j < 6; ++j )
            SendBuf[ z + i*6 + j ] = MacAddr[ j ];
 
/* Проверка адреса
    UnicodeString MsgStr;
    for( int i=0; i < SendBuf.Length; ++i )
        MsgStr += IntToHex( SendBuf[ i ], 2 );
    Application->MessageBox( MsgStr.c_str(), L"IniFile" );
*/
    try {
        TIdUDPClient* UDPClient = new TIdUDPClient(this);
        UDPClient->BroadcastEnabled = true;
        UDPClient->Host = "255.255.255.255";
        UDPClient->Port = 2050;
        UDPClient->SendBuffer( SendBuf );
        delete UDPClient;
    } catch (...) {
        Application->MessageBox( L"UDP Send Error!", L"IniFile" ); // L"" - для 2009
    }
    SendBuf.Length = 0;
}
0
 Аватар для QenT
40 / 40 / 8
Регистрация: 29.01.2009
Сообщений: 244
13.04.2009, 22:15  [ТС]
У меня тоже 2009, все закинул, получил список ошибок=( ,а ведь такой удобный код для дальнейшего развития...
[ILINK32 Error] Error: Unresolved external '__fastcall Idudpclient::TIdUDPClient::~TIdUDPClient ()' referenced from C:\USERS\VLADISLOVE\DOCUMENTS\RAD STUDIO\PROJECTS\DEBUG\UNIT1.OBJ
[ILINK32 Error] Error: Unresolved external '__fastcall Idudpbase::TIdUDPBase::~TIdUDPBase()' referenced from C:\USERS\VLADISLOVE\DOCUMENTS\RAD STUDIO\PROJECTS\DEBUG\UNIT1.OBJ
[ILINK32 Error] Error: Unresolved external '__fastcall Idcomponent::TIdComponent::~TIdComponent ()' referenced from C:\USERS\VLADISLOVE\DOCUMENTS\RAD STUDIO\PROJECTS\DEBUG\UNIT1.OBJ
[ILINK32 Error] Error: Unresolved external 'Idudpclient::TIdUDPClient::' referenced from C:\USERS\VLADISLOVE\DOCUMENTS\RAD STUDIO\PROJECTS\DEBUG\UNIT1.OBJ
[ILINK32 Error] Error: Unresolved external '__fastcall Idbasecomponent::TIdBaseComponent::TIdBa seComponent(Classes::TComponent *)' referenced from C:\USERS\VLADISLOVE\DOCUMENTS\RAD STUDIO\PROJECTS\DEBUG\UNIT1.OBJ
[ILINK32 Error] Error: Unresolved external '__fastcall Idudpbase::TIdUDPBase::SetBroadcastEnabl ed(const bool)' referenced from C:\USERS\VLADISLOVE\DOCUMENTS\RAD STUDIO\PROJECTS\DEBUG\UNIT1.OBJ
[ILINK32 Error] Error: Unresolved external '__fastcall Idudpclient::TIdUDPClient::SendBuffer(co nst System:ynamicArray<unsigned char>)' referenced from C:\USERS\VLADISLOVE\DOCUMENTS\RAD STUDIO\PROJECTS\DEBUG\UNIT1.OBJ
0
0 / 0 / 0
Регистрация: 15.07.2015
Сообщений: 1
14.04.2009, 14:12
У меня работает с GUI. В варианте для консоли не собирается с теми же ошибками, а когда подтыкиваешь библиотеки вручную - валится с access violation. Похоже, Indy без гуя не живет. Так что если без окна - или окно прятать, или брать другую библиотеку для UDP, благо их вагон. Изменится только отправка пакета, можно TUDPSoket вместо TIdUDPClient попробовать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.04.2009, 14:12
Помогаю со студенческими работами здесь

Wake on lan
Прошу полноценно разобраться в данной функции: т.е. как настроить с самого начала и до конца. Искал информацию, но разобраться не совсем...

Wake on lan
Модераторы подсказали что данную тему поднять можно в данном разделе. Итак, суть в том, что я хочу осуществить функцию Wake on lan,...

Wake On LAN
Сделал, чтобы комп включался, когда я жму кнопочку на другом компе, но это не всегда срабатывает. Короче, сетевая карта горит где-то 5...

Wake-on-lan
Здравствуйте. Такой вопрос. Как можно послать команду wake-on-lan компьютеру по wifi сети как это делает zyxel ceenetic ?

Wake On Lan
Здравствуйте. Стоит задача организовать массовое включение ПК по локальной сети, для этого будет использоваться технология Wake On Lan...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru