Программа "Wake on LAN"

Включение удаленного компьютера по заранее известному IP-адресу. Поддержка удаленного рабочего стола. Описание работы программы "Wake on LAN". Список файлов, составляющих проект. Созданные функции схемы сообщений. Текст главных функций класса CPowerOnDlg.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 09.12.2011
Размер файла 1,8 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Отчёт по курсовой работе

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

Введение

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

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

Настройка компьютера

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

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

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

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

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

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

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

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

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Теперь компьютер можно включить с помощью 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

010203040506010203040506010203040506010203040506010203040506

010203040506010203040506010203040506010203040506010203040506

010203040506010203040506

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(0x0202, &WsaData)!=NULL)

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

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

CAsyncSocket udp_s;

udp_s.Create(40000,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(40000,SOCK_DGRAM);

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

BOOL bOptVal = TRUE;

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

return;

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

s.SendTo(magicP,102,40000);

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

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

s.Close();

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

OnRemote.ShowWindow(TRUE);

OnShutdown.ShowWindow(TRUE);

}

//----------------------------------------------

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

UINT CPowerOnDlg::HexStrToInt(CString hexStr)

{

char *stop;

char num[3];

UINT res = 0;

if (hexStr.GetLength()>2)

return 0;

memset(num,'\0',3);

strcpy_s(num,hexStr);

res = strtol(num,&stop,16);

if (res==LONG_MAX || res==LONG_MIN || res==0)

return 0;

return res;

}

//----------------------------------------------

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

void CPowerOnDlg::OnBnClickedButton()

{

CString param("/v:");

param += ip;

ShellExecute(NULL,"open","mstsc.exe",param,"C:\WINDOWS\system32",SW_SHOWNORMAL);

}

//----------------------------------------------

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

void CPowerOnDlg::OnBnClickedButton2()

{

CString param("-s -m \\");

param += ip;

ShellExecute(NULL,"open","shutdown.exe",param,"C:\WINDOWS\system32",SW_SHOWNORMAL);

}

Заключение и полезная ссылка

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

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

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

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

Размещено на Allbest.ru


Подобные документы

  • Программа смены обоев рабочего стола, принцип ее работы. Основные виды обоев для рабочего стола. Существующие программы и их преимущества. Разработка приложения для смены обоев рабочего стола с использованием функций программы Delphi 7, листинг программы.

    контрольная работа [3,8 M], добавлен 17.11.2012

  • Основные функции администрирования сети, определение главных обязанностей администратора, программы удаленного управления. Защита от вредоносного программного обеспечения, контроль используемых для этого средств. Настройка программы "Лицензии Компас".

    курсовая работа [1,7 M], добавлен 16.06.2013

  • Способы и методы разработки удаленного автоматизированного рабочего места специалиста службы социальной защиты района Северное Тушино г. Москвы. Теория реляционных баз данных. Этапы жизненного цикла проекта, обоснование его экономической эффективности.

    дипломная работа [644,5 K], добавлен 19.02.2013

  • Свойства и режимы реализации удаленного доступа. Организация удаленного доступа. Интеграция удаленного доступа в корпоративную интрасеть. Установка клиентских средств удаленного доступа для Windows. Утилита, работающая в архитектуре клиент-сервер.

    курсовая работа [28,2 K], добавлен 17.12.2011

  • Причины распространения локальных вычислительных сетей (ЛВС). Принципы работы отдельных элементов ЛВС. Классификация сетей по признаку территориального размещения. Обзор программного обеспечения для удаленного управления с помощью сети Интернет.

    курсовая работа [4,0 M], добавлен 12.10.2011

  • График функции. Дескриптор окна консоли. Процедура обработки сообщений. Регестрация класса окна с помощью функции RegisterClass. Обработчик сообщений по умолчанию. Текст программы. Процедура WNDProc. Главная функция. Управление вызывающей функции.

    практическая работа [311,0 K], добавлен 11.10.2008

  • Описание использованного набора макросредств. Список использованных констант и структур. Основы вызова API-функций. Основы программирования на 32-битном ассемблере. Формирование объектного кода, содержащего текст исходной программы в машинном виде.

    курсовая работа [150,4 K], добавлен 18.05.2014

  • Описание функций, использующихся в программах. Основы 32-битного программирования на языке Assembler для ОС WINDOWS. Использование функции invoke, которая позволяет намного сократить текст программы и делает приложения похожими на программы для "ЯВы".

    курсовая работа [252,6 K], добавлен 20.02.2015

  • Значение астрофизических исследований. Международные космические проекты. Инфокоммуникационные технологии удаленного доступа к компьютеру. Основные возможности и достоинства Team Viewer. Порядок работы с астрофизическим комплексом в реальном времени.

    дипломная работа [4,8 M], добавлен 12.11.2013

  • Анализ и математическая постановка задачи. Описание алгоритма действий, структурной организации программы и ее программной реализации. Текст основной программы, модулей вывода текстовых файлов на экран, извлечения ехе-файлов и подсчёта лабораторных работ.

    курсовая работа [28,1 K], добавлен 28.02.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.