Есть достаточно много программ для использования WOL, но сегодня мы напишем свою на Visual C#. Точнее даже не то что бы программу а «каркас» который при небольшой доработке можно превратить в полноценный программный продукт.
Запустим Visual C#, и создадим новый проект назвав его WakeUP. Кинем на форму один textBox и один компонент Button. Выглядеть все это будет вот так:
Компонент textBox1 будет использоваться для ввода MAC адреса удаленного компьютера, который необходимо включить. А кнопка button1 будет выполнять процедуру «отправки сигнала»
Суть WOL заключается в том что бы отправить пакет сформированный определённым образом. В начале пакета идет так называемая «цепочка синхронизации»: 6 байт, равных 0xFF. Затем — MAC-адрес сетевой платы, повторённый 16 раз. Компьютер должен поддерживать включение по сети, проверьте наличие данной возможности в BIOS вашей материнской платы.
Напишем код нашей программы.
Добавим в класс (public partial class Form1 : Form) Новый класс вот такого вида:
public class WOLClass : UdpClient
{
public WOLClass()
: base()
{ }
//Установим broadcast для отправки сообщений
public void SetClientToBrodcastMode()
{
if (this.Active)
this.Client.SetSocketOption(SocketOptionLevel.Socket,
SocketOptionName.Broadcast, 0);
}
}
И саму функцию отправки пакета:
//MAC адрес должен выглядеть следующим образом: 013FA049
private void WakeFunction(string MAC_ADDRESS)
{
WOLClass client = new WOLClass();
client.Connect(new IPAddress(0xffffffff), 0x2fff); //Используем порт = 12287
client.SetClientToBrodcastMode();
int counter = 0;
//буффер для отправки
byte[] bytes = new byte[1024];
//Первые 6 бит 0xFF
for (int y = 0; y < 6; y++)
bytes[counter++] = 0xFF;
//Повторим MAC адрес 16 раз
for (int y = 0; y < 16; y++)
{
int i = 0;
for (int z = 0; z < 6; z++)
{
bytes[counter++] = byte.Parse(MAC_ADDRESS.Substring(i, 2), NumberStyles.HexNumber);
i += 2;
}
}
//Отправим магический пакет
int reterned_value = client.Send(bytes, 1024);
}
На обработчик события нажатия кнопки button1 напишем вызов написанной нами только что функции:
WakeFunction(textBox1.Text);
Весь код программы целиком:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Globalization;
namespace WakeUP
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public class WOLClass : UdpClient
{
public WOLClass()
: base()
{ }
//Установим broadcast для отправки сообщений
public void SetClientToBrodcastMode()
{
if (this.Active)
this.Client.SetSocketOption(SocketOptionLevel.Socket,
SocketOptionName.Broadcast, 0);
}
}
//MAC адрес должен выглядеть следующим образом: 013FA049
private void WakeFunction(string MAC_ADDRESS)
{
WOLClass client = new WOLClass();
client.Connect(new IPAddress(0xffffffff), 0x2fff); //Используем порт = 12287
client.SetClientToBrodcastMode();
int counter = 0;
//буффер для отправки
byte[] bytes = new byte[1024];
//Первые 6 бит 0xFF
for (int y = 0; y < 6; y++)
bytes[counter++] = 0xFF;
//Повторим MAC адрес 16 раз
for (int y = 0; y < 16; y++)
{
int i = 0;
for (int z = 0; z < 6; z++)
{
bytes[counter++] = byte.Parse(MAC_ADDRESS.Substring(i, 2), NumberStyles.HexNumber);
i += 2;
}
}
//Отправим магический пакет
int reterned_value = client.Send(bytes, 1024);
}
private void button1_Click(object sender, EventArgs e)
{
WakeFunction(textBox1.Text);
}
////////////////////////////////////////////////
}
}
Теперь немножко о том как узнать MAC адрес сетевой карты удаленного компьютера.
Нажмем Win + R и введем туда cmd вызвав консоль:
Пропингуем целевой узел. Для этого нужно либо знать IP, либо Имя компьютера.
Теперь введем команду arp –a, и в ответ получим список IP адресов и сопоставленные с ними MAC адреса:
Теперь все что осталось сделать — это скомпилировать проект в Visual C#, запустить его и ввести в единственное поле на форме полученный MAC адрес целевого компьютера.
Немного расширив этот «скелет», на пример возможностью сохранять список соотношений MAC, IP и Имени компьютера можно получить вполне рабочее и крайне полезное приложение. Можно так же расширить программу возможностью сканирования диапазона IP адресов, получения соотношений MAC — IP автоматически, тем самым уменьшив количество ручной работы по добавлению MAC в список
