Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Wake Up On Lan 
:(
    Опции темы
Bonderas
Дата 15.3.2005, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 15.3.2005

Репутация: нет
Всего: нет



Доброго времени суток!

Вот возникла передо мной задача - пробудить комп по сети - Wake up on lan тобишь...
Вроде как и инфа есть в инете и всё, но вот сел писать и застопорился...

До сего момента сетевые проги не писал, разве что чуть чуть использовал CORBA - посему тонкостей в этой области не знаю...

Ну а теперь все по порядку:

Значит вычитал я в просторах интернета, что для пробуждения компа нужно слать "магический пакет" (оговорюсь сразу, что все настройки в БИОСе и в настройках сетевушки выставлены - готовые программки будят на ура...), состоящий из 6 байт FF, а затем — собственно адрес сетевой платы, повторенный 16 раз.

Решил не ходить окольными путми и установил на форму IdUDPClient для отсылки этой самой магии... Active=true, BroadcastEnable=true,BufferSize=8192,
Host=255.255.255.255,Port=2050(установил наобум)

MAC адрес подопытного - 00:10:dc:f1:49:3b
Значит сам пакет должен быть следующим как я понимаю

FFFFFFFFFFFF
0010dcf1493b0010dcf1493b0010dcf1493b0010dcf1493b
0010dcf1493b0010dcf1493b0010dcf1493b0010dcf1493b
0010dcf1493b0010dcf1493b0010dcf1493b0010dcf1493b
0010dcf1493b0010dcf1493b0010dcf1493b0010dcf1493b
(единым сообщением ессестно)

А теперь самое смешное - как все это послать? 8)

Правельным ли будет следующее:

int SendBuff [102];
for (int i = 0;i<6;i++)
SendBuff[i] = 0xFF;
for (int j=0;j<16;j++)
{
SendBuff[6+j*6] = 0x00;
SendBuff[7+j*6] = 0x10;
SendBuff[8+j*6] = 0xdc;
SendBuff[9+j*6] = 0xf1;
SendBuff[10+j*6] = 0x49;
SendBuff[11+j*6] = 0x3b;
}
IdUDPClient1->SendBuffer(SendBuff,102);

или нет?

Всем ответившим заранее спасибо!

PM MAIL   Вверх
LuckLess
Дата 15.3.2005, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 15.9.2004

Репутация: нет
Всего: 1



С WOL ни когда не сталкивался , но бумаю проблема в том , что тебе надо послать магический пакет , т.е. IP пакет , в поле данных которого будет то что ты сказал , а не инкапсулированный UDP пакет , который шлешь ты...

код можно построить както так...

Код

SOCKET sd;
struct sockaddr_in adr;
char buff[]="FFFFFFFFFFFF0010dcf1493b0010dcf1493b0010dcf1493b0010dcf1493b
0010dcf1493b0010dcf1493b0010dcf1493b0010dcf1493b
0010dcf1493b0010dcf1493b0010dcf1493b0010dcf1493b
0010dcf1493b0010dcf1493b0010dcf1493b0010dcf1493b";
sd=socket(Af_INET,SOCK_RAW,IPPROTO_IP);
adr.sin_family=AF_INET;
adr.sin_port=NULL;
adr.sin_addr.s_addr=//нужный IP
connect(sd,&adr,sizeof(adr));
send(sd,buff,strlen(buff),NULL);



Это сообщение отредактировал(а) LuckLess - 15.3.2005, 23:48
PM MAIL   Вверх
Bonderas
Дата 16.3.2005, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 15.3.2005

Репутация: нет
Всего: нет



В этом случае пошлется строка - а нужно послать последовательность байт и к тому же сетевая карточка на выключенном компьютере врятли знает свой IP - потому нужно слать широковещательный пакет...
PM MAIL   Вверх
LuckLess
Дата 16.3.2005, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 15.9.2004

Репутация: нет
Всего: 1



с широковещательным код будет выглядеть так..
Код

SOCKET sd;
struct sockaddr_in ladr,radr;
char buff[]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x10,0xDC,0xF1,0x49,0x39,
0x00,0x10,0xDC,0xF1,0x49,0x39,
0x00,0x10,0xDC,0xF1,0x49,0x39,
0x00,0x10,0xDC,0xF1,0x49,0x39,
0x00,0x10,0xDC,0xF1,0x49,0x39,
0x00,0x10,0xDC,0xF1,0x49,0x39};
sd=socket(Af_INET,SOCK_RAW,IPPROTO_IP);
ladr.sin_family=AF_INET;
ladr.sin_port=NULL;
ladr.sin_addr.s_addr=//IP машины с которой шлешь

radr.sin_family=AF_INET;
radr.sin_port=NULL;
radr.sin_addr.s_addr=//широковещательный IP

bind(sd,&ladr,sizeof(ladr));
sendto(sd,buff,/*Скока там байт...?(лень считать)*/,NULL,&radr,sizeof(radr));


Это сообщение отредактировал(а) LuckLess - 16.3.2005, 11:02
PM MAIL   Вверх
Bonderas
Дата 16.3.2005, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 15.3.2005

Репутация: нет
Всего: нет



Спасибо, попробую...
PM MAIL   Вверх
Gulja
Дата 9.6.2005, 11:57 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











нет, я не поняла, а где смайлик со словом ЛОХ?!!!
для меня. smile
плиз дайте ктонить ссылочку по теме WOL
ну хоть какуюнить маленькую
что это и с чем едят smile
  Вверх
DENNN
Дата 14.6.2005, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: нет
Всего: 43



PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.1568 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.