Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Реализация Wake для сети – Волшебный Пакет

Delphi , Интернет и Сети , Сеть

Реализация Wake для сети – Волшебный Пакет

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

{ 
What's a Magic Packet? 
Was ist ein Magic Packet? 

DESTINATION SOURCE MISC. FF FF FF FF FF FF 11 22 33 44 55 66 11 22 33 44 
55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 
55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 
55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 
55 66 11 22 33 44 55 66 11 22 33 44 55 66 MISC. CRC. 

Note: Destination, Source, Misc and CRC are normally added by our Socket-Component 
Beachte: Destination, Source, Mis und CRC werden normalerweise von deiner 
Socket-Komponente hinzugefugt 
}

 procedure TForm1.Button1Click(Sender: TObject);
 var
   Data, temp: string;
   k, n: integer;
 begin
   Data := '';
   for k := 0 to 5 do
   begin
     Data := Data + Chr(StrToInt('$FF'));  // 6x add a FF / 6x ein FF hinzufugen 
  end;
   temp := StringReplace(Edit1.Text, '-', '', [rfReplaceAll]);
   for k := 0 to 15 do
   begin
     temp := StringReplace(Edit1.Text, '-', '', [rfReplaceAll]);
     for n := 0 to 5 do
     begin
       // 16x add Target-Mac-Adress / 16x die Ziel-Macadresse hinzufugen 
      Data := Data + Chr(StrToInt('$' + temp[1] + temp[2]));
       Delete(temp, 1, 2);
     end;
   end;

      //Example with TIdUDPClient of Indy 
  //IdUDPClient1.Send('255.255.255.255', '80', Data);  // Send it / Verschick es 
end;

Что такое Magic Packet?

Magic Packet - это специальный пакет UDP, отправляемый для пробуждения компьютера на сети. Он состоит из адреса MAC-адреса назначения, за которым следуют 6 байт FF (все единицы), а затем повторяется адрес MAC-адреса цели несколько раз.

Объяснение кода

Код написан на Delphi и использует библиотеку Indy для сетевого программирования.

  1. Процедура события Button1Click генерирует Magic Packet.
  2. Сначала создается пустая строка Data и заполняется 6 байтами FF используя цикл.
  3. Затем код читает содержимое Edit1.Text, которое ожидается быть адресом MAC-адреса цели в формате xx:xx:xx:xx:xx:xx.
  4. Код заменяет любые дефисы (-) в адресе MAC-адреса на пустые строки используя StringReplace. Это делается 16 раз, потому что есть 16 байт в адресе MAC-адреса цели.
  5. Затем код проходит по каждому байту адреса MAC-адреса цели и добавляет его к строке Data после конвертации в hexadecimal значение используя StrToInt('$' + temp[1] + temp[2]). Строка temp обновляется, удаляя первые 2 символа (уже обработанные байты) после каждой итерации.
  6. Наконец, код отправляет сгенерированный Magic Packet по UDP используя метод IdUDPClient1.Send.

Примечание

Комментарий гласит, что обычно адрес MAC-адреса назначения, адрес MAC-адреса источника и CRC (Циклическая Красная Проверка) добавляются компонентом сокета. Однако в этом реализации эти значения не включены в сгенерированный Magic Packet.

Альтернативное решение

Если вы хотите генерировать Magic Packet более эффективно, можно использовать одиночный цикл для итерации по каждому байту адреса MAC-адреса цели и добавления его к строке Data без использования StringReplace. Вот пример:

for k := 0 to 15 do
begin
  for n := 0 to 5 do
  begin
    Data := Data + Chr(StrToInt('$' + temp[1+n*2..n*2+1]));
  end;
end;

Код предполагает, что temp - это строка, содержащая адрес MAC-адреса цели в формате xx:xx:xx:xx:xx:xx. Цикл итерирует по каждому байту адреса MAC-адреса цели, конвертирует его в hexadecimal значение используя StrToInt('$' + temp[1+n*2..n*2+1]), и добавляет его к строке Data.

В статье описывается реализация Wake-функции для сети, которая использует магический пакет (Magic Packet) для обнаружения и включения компьютеров в локальной сети.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Сеть ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 09:24:47/0.0060319900512695/0