Программа "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