Помощь в написании студенческих работ
Антистрессовый сервис

Программа «Wake on LAN»

КурсоваяПомощь в написанииУзнать стоимостьмоей работы

Теперь компьютер можно включить с помощью Wake on LAN, но для того, чтобы воспользоваться удалённым доступом к этому компьютеру, нужно включить данную опцию в свойствах компьютера и соответствующую службу: После нажатия кнопки «Запуск» необходимо подождать несколько минут (2−5), чтобы на удалённом компьютере загрузилась операционная система и стало возможно подключение к удалённому рабочему столу. Читать ещё >

Программа «Wake on LAN» (реферат, курсовая, диплом, контрольная)

Отчёт по курсовой работе Программа «Wake on LAN»

Введение

Программа «Wake On LAN» представляет собой Windows-приложение, предназначенное для включения удалённого компьютера по заранее известному IP-адресу. Также в ней включена поддержка удалённого рабочего стола включённого компьютера и возможность его выключения.

Эту программу целесообразно использовать администраторам для включения определённых компьютеров в сети и управления ими, а также пользователям, которым нужно зайти на свой компьютер со статичным IP-адресом удалённо, например, для того, чтобы взять с его винчестера забытый файл, а потом благополучно его выключить.

Настройка компьютера Для того чтобы полноценно воспользоваться функцией удаленного включения необходимо:

— Материнская плата, поддерживающая WoL (Wake-On-LAN);

— Блок питания стандарта ATX;

— Сетевая карта или модем, поддерживающие управление электропитанием;

— Компьютер, выключенный в режиме Soft-OFF (именно в этот режим он переходит через пуск, после нажатия кнопки включения на корпусе/клавиатуре, выключения всеми возможными программными средствами).

Процесс настройки WoL начинается с включения ее в BIOS’е:

Затем нужно включить управление электропитания для сетевого адаптера

Теперь компьютер можно включить с помощью Wake on LAN, но для того, чтобы воспользоваться удалённым доступом к этому компьютеру, нужно включить данную опцию в свойствах компьютера и соответствующую службу:

Управляемый компьютер находится в дежурном режиме (stand by) и выдаёт питание на сетевой адаптер. Сетевой адаптер находится в режиме пониженного энергопотребления, просматривая все пакеты, приходящие на его MAC-адрес и ничего не отвечая на них. Если одним из пакетов окажется Magic Packet, сетевой адаптер выдаёт сигнал на включение питания компьютера.

Описание работы программы

1. Определение MAC-адреса по IP-адресу компьютера через посылку тестового пакета через сокеты.

2. Если MAC-адрес найден, то программа записывает его и соответствующий IP-адрес в текстовый файл arp. txt; в противном случае программа ищет MAC-адрес по IP-адресу в этом текстовом файле.

3. Формируется «магический пакет» из 6 байт FF, а затем — MAC-адреса сетевой платы, повторённого 16 раз. То есть, если бы адрес платы выглядел как 01:02:03:04:05:06, то магический пакет оказался бы таким:

FFFFFFFFFFFF010203040506010203040506010203040506010203040506

4. Посылка «магического пакета» на MAC-адрес пробуждаемого компьютера.

5. Далее возможно подключение к удалённому рабочему столу.

6. Также возможно выключение компьютера.

При запуске программы появляется окно:

Пользователю нужно ввести IP-адрес компьютера, который он собирается включить, и по кнопке «Запуск» этот компьютер включится, если он есть в сети, удовлетворяет требованиям настройки, и будет найден его MAC-адрес, в противном случае на экран будет выведено сообщение с указанием причины отказа запуска.

Если всё прошло удачно, то MAC-адрес включённого компьютера выведется в текстовое поле «MAC-адрес» и появятся кнопки «Подключение к удалённому рабочему столу» и «Выключение удалённого компьютера».

После нажатия кнопки «Запуск» необходимо подождать несколько минут (2−5), чтобы на удалённом компьютере загрузилась операционная система и стало возможно подключение к удалённому рабочему столу.

По нажатию кнопки «Подключение к удалённому рабочему столу» вызывается соответствующая служба:

Для подключения к удалённому рабочему столу необходимо ввести логин и пароль администратора удалённого компьютера.

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

Список файлов, составляющих проект Файлы заголовков:

PowerOn.h — описание классов синхронизации файлов.

PowerOnDlg.h — описание класса диалогового окна настроек.

resource.h — файл определения констант для диалогового окна.

stdafx.h — включаемый файл для стандартных системных включаемых файлов.

Файлы исходного кода:

PowerOn.cpp — описание методов классов синхронизации.

PowerOnDlg.cpp — файл реализации.

stdafx.cpp — исходный файл, содержащий стандарт, включающий PowerOn.pch.

Файлы ресурсов:

PowerOn.rc2 — файл ресурсов проекта.

PowerOn.ico — иконка программы.

Структура классов удаленный компьютер программа Главным классом является класс диалогового окна CPowerOnDlg, который содержит все необходимые переменные и методы. Их более подробное описание приведено ниже:

class CPowerOnDlg: public CDialog

{

// Construction

public:

CPowerOnDlg (CWnd* pParent = NULL); // стандартный конструктор

//{{AFX_DATA (CPowerOnDlg)

enum { IDD = IDD_POWERON_DIALOG };

CString m_mac; //C-строка содержащая MAC-адрес

CIPAddressCtrl m_ip; //IP-адрес

CButton OnRemote; //Кнопка «Подключение к удалённому рабочему столу»

CButton OnShutdown; //Кнопка «Выключение удалённого компьютера»

CString ip; //C-строка содержащая IP-адрес

//}}AFX_DATA

// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL (CPowerOnDlg)

protected:

virtual void DoDataExchange (CDataExchange* pDX); //поддержка DDX/DDV

//}}AFX_VIRTUAL

// Реализация

protected:

HICON m_hIcon;

// Созданные функции схемы сообщений

//{{AFX_MSG (CPowerOnDlg)

virtual BOOL OnInitDialog ();

afx_msg void OnSysCommand (UINT nID, LPARAM lParam);

afx_msg void OnPaint ();

afx_msg HCURSOR OnQueryDragIcon ();

//}}AFX_MSG

DECLARE_MESSAGE_MAP ()

private:

CString GetMac (); //Функция получения MAC-адреса

UINT HexStrToInt (CString hexStr); //Переводит Cstring, содержащую шестнадцатиричныое число, в int

public:

afx_msg void OnIpnFieldchangedIpaddress1(NMHDR *pNMHDR, LRESULT *pResult);

afx_msg void OnPowerOn (); // Функция включения удалённого компьютера

afx_msg void OnBnClickedButton (); //Функция включения удалённого рабочего стола

afx_msg void OnBnClickedButton2(); // Функция выключения удалённого компьютера

};

Иходный текст главных функций класса CPowerOnDlg

//Получает MAC-адрес…

CString CPowerOnDlg: GetMac ()

{

//Будем использовать сокеты

m_mac="" ;

CString _mac;

UpdateData (FALSE);

WSADATA WsaData;

BYTE field[4];

m_ip.GetAddress (field[0], field[1], field[2], field[3]);

ip="" ;

CString c_f[4];

for (int j=0; j<4; j++)

{

c_f[j]. Format («%i», field[j]);

ip+=c_f[j];

if (j<3) ip+="." ;

}

DWORD _ip=inet_addr (ip);

if (WSAStartup (0×0202, &WsaData)≠NULL)

MessageBox («WSA не запущено!»);

//Создаём UDP-сокет и отсылаем по нему любые данные

CAsyncSocket udp_s;

udp_s.Create (40 000,SOCK_DGRAM);

SOCKADDR_IN udp_sin;

BOOL bOptVal = TRUE;

if (udp_s.SetSockOpt (SO_BROADCAST,(char*)&bOptVal, sizeof (BOOL))≠SOCKET_ERROR)

{

udp_sin.sin_family = AF_INET;

udp_sin.sin_port = htons (5232); //Шлём на любой порт.

udp_sin.sin_addr.s_addr = _ip;

if (udp_s.SendTo («TEST», 5,(SOCKADDR*)&udp_sin, sizeof (udp_sin), NULL)>0)

{ //Пакет отослан. Вытаскиваем MAC-адрес из системы

MIB_IPNETTABLE * pIpNetTable = (MIB_IPNETTABLE *) new char[0xFFFF];

ULONG cbIpNetTable = 0xFFFF;

if (NO_ERROR == GetIpNetTable (pIpNetTable, &cbIpNetTable, TRUE))

{

for (DWORD i = 0; i < pIpNetTable->dwNumEntries; i++)

{

if (pIpNetTable->table[i]. dwAddr==_ip&&pIpNetTable->table[i].dwType≠2)

{

CString strTMP;

BYTE* _m=(BYTE*)&pIpNetTable->table[i]. bPhysAddr;

for (int j=0; j<6; j++)

{

strTMP.Format («%02X» ,*_m++);

m_mac+=strTMP;

_mac+=strTMP;

if (j<5) m_mac+="-" ;

};

UpdateData (FALSE);

delete[] pIpNetTable;

udp_s.Close ();

WSACleanup ();

//Проверяем есть ли такой IP в файле

std:ifstream file («arp.txt»);

char tmp_ip[16];

char tmp_mac[13];

bool fflag = false;

while (!file.eof ())

{

file >> tmp_ip >> tmp_mac;

if (tmp_ip == ip)

{

fflag = true;

break;

}

}

file.close ();

if (!fflag) //Записываем IP и соответствующий MAC-адрес в конец файла

{

std:ofstream file («arp.txt», std: ios:app);

file << ip << «» << _mac <<" n" ;

file.close ();

}

return _mac;

}

}

}

else MessageBox («Ошибка таблицы IPMAC!»);

}

else MessageBox («Ошибка данных!»);

}

else MessageBox («Ошибка сокетов!»);

udp_s.Close ();

WSACleanup (); //Освобождаем ресурсы

//ищем MAC-адрес в файле

std:ifstream file («arp.txt»);

char tmp_ip[16];

char tmp_mac[13];

bool fflag = false;

do

{

file >> tmp_ip >> tmp_mac;

if (tmp_ip==ip)

{

fflag = true;

break;

}

}while (!file.eof ());

file.close ();

if (!fflag)

{

MessageBox («MAC-адрес не найден»);

return «» ;

}

else

{

_mac = tmp_mac;

m_mac = tmp_mac;

for (int i=5;i>0;i—)

m_mac.Insert (2*i," -");

UpdateData (FALSE);

return _mac;

}

};

//——————————————————————-;

//Включает удалённный компьютер

void CPowerOnDlg: OnPowerOn ()

{

//Получаем MAC адрес

CString macAddr = GetMac ();

if (macAddr=="") return;

//Будем использовать сокеты

CAsyncSocket s;

//Инициализируем «магический пакет»

BYTE magicP[102];

//Первые 6 байт 0xFF

for (int i=0;i<6;i++)

magicP[i] = 0xff;

//Заполняем 6−12 байты MAC-адресом

for (int i=0;i<6;i++) {

magicP[i+6] = HexStrToInt (macAddr.Mid (i*2,2));

}

//заполняем оставшиеся 90 байт MAC-адресом

for (int i=0;i<15;i++) memcpy (&magicP[(i+2)*6],&magicP[6], 6);

//Создаём сокет для отправки данных

s.Create (40 000,SOCK_DGRAM);

//Настраиваем сокет для передачи пакета

BOOL bOptVal = TRUE;

if (s.SetSockOpt (SO_BROADCAST,(char*)&bOptVal, sizeof (BOOL))==SOCKET_ERROR)

return;

//Отправка магического пакета

s.SendTo (magicP, 102,40 000);

TRACE (_T («Магический пакет отправлен. Удалённый компьютер должен включится.»));

//Выключаем сокеты и освобождаем буфер

s.Close ();

//Делаем видимой кнопку включения удалённого рабочего стола

OnRemote.ShowWindow (TRUE);

OnShutdown.ShowWindow (TRUE);

}

//——————————————————————-;

//Переводит Cstring, содержащую шестнадцатиричныое число, в int

UINT CPowerOnDlg: HexStrToInt (CString hexStr)

res==0)

return 0;

return res;

//——————————————————————-;

//Функция включения удалённого рабочего стола

void CPowerOnDlg: OnBnClickedButton ()

{

CString param («/v:»);

param += ip;

ShellExecute (NULL," open" ," mstsc. exe", param," C: WINDOWSsystem32″, SW_SHOWNORMAL);

}

//——————————————————————-;

//Функция выключения компьютера

void CPowerOnDlg: OnBnClickedButton2()

{

CString param («-sm »);

param += ip;

ShellExecute (NULL," open" ," shutdown. exe", param," C: WINDOWSsystem32″, SW_SHOWNORMAL);

}

Заключение

и полезная ссылка Данная программа полезна для получения базовых знаний о сокетах и MFC.

Полезные ссылки:

http://citforum.ru/book/cook/winsock.shtml

http://msdn.microsoft.com/ru-ru/default.aspx

Показать весь текст
Заполнить форму текущей работой